关键方法: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();
? ? ? ? }
?