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();

}

相关推荐
wuminyu几秒前
Kafka配置TLS/SSL加密传输时零拷贝失效分析
java·linux·c语言·jvm·c++
边境悍匪5 分钟前
蜗牛学苑 Java 智能体学习 Day41|ElementPlus 布局、Vue‑Router 登录、Axios 思维导图复盘
java·vue.js·学习
心中有你021411 分钟前
Java Swing实现校园最短路径导航系统(Dijkstra算法完整源码+详细解析)
java·开发语言·算法
重生之小比特14 分钟前
【Java SE】数组的定义与使用
java·开发语言
摆烂z1 小时前
定时任务同步数据--续跑&重试
java·mybatis·ai编程
Lost of 程序猿1 小时前
船岸数据同步链路实战:SendFlag、单调版本号与断网三天后的续传
后端·c#·asp.net
CAE虚拟与现实2 小时前
docker desktop中的build功能是要build什么
java·docker·容器
allnlei4 小时前
s6-overlay - 装在 Docker 容器里的轻量级管家
java·docker·容器
IT_Octopus9 小时前
IntelliJ 本地日志路径自定义:`-DLOG_PATH=./logs` 为什么总“不听话“
java·log4j·intellij-idea
长征coder10 小时前
【无标题】
java·性能优化