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

}

相关推荐
customer083 分钟前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
全栈开发圈5 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
WaaTong7 分钟前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
面试鸭9 分钟前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
Python大数据分析@13 分钟前
python操作CSV和excel,如何来做?
开发语言·python·excel
John.liu_Test1 小时前
js下载excel示例demo
前端·javascript·excel
沈询-阿里1 小时前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.1 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list