C# 获取Excel里引用的外部其他excel文件清单

关键方法:mySheet.Application.ActiveWorkbook.LinkSources(XlLink.xlExcelLinks);

主要代碼如下

Application myExcel = null;//引用Excel Application类別

Workbook myBook = null;//引用活页簿类別

Worksheet mySheet = null;//引用工作表类別

Range myRange = null;//引用Range类別

string excelPath = "";

public ExcelModify(string filePath)

{

excelPath = filePath;

try

{

myExcel = new Application();//实例化Excel Application

myExcel.DisplayAlerts = false;//停用警告

myExcel.Visible = false; //Excel 不可见

// 3 時,打開excel沒有更新提示,詳情見Office官方說明

myBook = myExcel.Workbooks._Open(excelPath, "3", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

// Microsoft.Office.Interop.Excel 引用的屬性 Embed interop type 改成false才可以

mySheet = (Worksheet)myBook.Worksheets1;//Excel文件打开工作簿的第一个文件

}

catch (Exception ex)

{

this.Close();

throw ex;

}

}

/// <summary>

/// 將object\*轉化為object\[\]

/// </summary>

/// <param name="arr"></param>

/// <returns></returns>

private object\[\] ConvertArray(Array arr)

{

int lb = arr.GetLowerBound(0);

var ret = new objectarr.GetUpperBound(0) - lb + 1;

for (int ix = 0; ix < ret.Length; ++ix)

{

retix = arr.GetValue(ix + lb);

}

return ret;

}

public void ReadFile()

{

string notex = "";

if (mySheet != null && mySheet.Application.ActiveWorkbook != null)

{

object oj = mySheet.Application.ActiveWorkbook.LinkSources(XlLink.xlExcelLinks);

//object\[\] obj = (object\[\])oj; // 報錯

object\[\] obj = ConvertArray(oj as Array);

if (obj != null && obj.Length > 0)

{

for (int i = 0; i < obj.Length; i++)

{

string fi = (string)obji;

if (!File.Exists(fi))

{

notex += fi;

}

}

}

}

}

遍歷外部鏈接的的單元格清單

public Dictionary<string, string> GetSheetLinksData(string xlsPath)

{

Application _appliation=null;

Workbook _workbook = null;

Object missing = System.Reflection.Missing.Value;

Dictionary<string, string> linksData = new Dictionary<string, string>();

try

{

FileInfo xlsInfo = new FileInfo(xlsPath);

_appliation = new Application();

_appliation.DisplayAlerts = false;//停用警告

_appliation.Visible = false; //Excel 不可见

// 採用 3,和另存為,保證新文件數據是更新后的數據

_workbook = (Workbook)_appliation.Workbooks.Open(xlsPath, "3", missing, missing, missing, missing, missing, missing,

missing, missing, missing, missing, missing, missing, missing);

Worksheet mySheet = (Worksheet)_workbook.Worksheets1; //引用工作表类別

try

{

Range cs = mySheet.Cells.SpecialCells(XlCellType.xlCellTypeFormulas);

if (cs != null)

{

foreach (Range c in cs)

try

{

string col = convertToCharacter(c.Column) + (c.Row).ToString();

if (c.Formula.ToString() != "" && c.Formula.ToString().Contains("$"))

{

linksData.Add(col, c.Formula.ToString());

}

}

catch { }

}

}

catch

{

}

}

catch (Exception ex)

{

throw ex;

}

finally {

if (_workbook != null)

{

//關掉當前sheet

_workbook.Close(missing, missing, missing);

//關掉excel

_appliation.Workbooks.Close();

//退出程序

_appliation.Quit();

}

}

return linksData;

}

/// <summary>

/// 十進制轉化為26進制

/// </summary>

/// <param name="i"></param>

/// <returns></returns>

private string convertToCharacter(int i)

{

char\[\] list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

StringBuilder sb = new StringBuilder();

while ((i - 1) / 26 != 0)

{

sb.Append(listi / 26 - 1);

i = i % 26;

}

i = (i - 1) % 26;

sb.Append(listi);

return sb.ToString();

}

相关推荐
Sarvartha16 分钟前
Object 类
java·开发语言
知守观19 分钟前
feign-core 就在依赖树里,运行时却找不到类:一次 provided scope 引发的启动失败排查
java·spring cloud·maven
她的男孩20 分钟前
企业接口照样拦得住:独立 Flyway、@RequiresFeature 与离线许可证
java·spring boot·后端
十年Java程序媛20 分钟前
Lambda 与函数式接口|别只会复制 ()->{},底层规则和坑一次性讲清
java·spring boot·后端
Nozokime28 分钟前
ThreadLocal 在流式 Agent 里静默失效:LangChain4j 轨迹埋点的零侵入方案
java
小宋102132 分钟前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
m0_587383001 小时前
工业场景设备维修维护实战技巧 全流程标准化落地与常见问题排查指南
java·spring·小程序·架构·需求分析
郑州光合科技余经理1 小时前
本地生活平台搭建:跨业态用户标识怎么贯通
java·开发语言·前端·后端·uni-app·php·ai编程
木头科技1 小时前
【AI 工程化第八篇】Spring AI 多模型路由实战:DeepSeek、通义、Kimi、OpenAI 如何统一接入和自动切换
java·人工智能·spring
Behavior1 小时前
国内下载使用 Unity 6000 踩坑点总结
c#·unity3d·游戏开发