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.Worksheets[1];//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 object[arr.GetUpperBound(0) - lb + 1];

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

{

ret[ix] = 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)obj[i];

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.Worksheets[1]; //引用工作表类別

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(list[i / 26 - 1]);

i = i % 26;

}

i = (i - 1) % 26;

sb.Append(list[i]);

return sb.ToString();

}

相关推荐
界面开发小八哥16 分钟前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz42 分钟前
[java: Cleaner]-一文述之
java
一碗谦谦粉1 小时前
Maven 依赖调解的两大原则
java·maven
emplace_back1 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
netyeaxi1 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~2 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码2 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码2 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健2 小时前
武汉拿下 23k offer 经历
java·面试·ai编程