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;
            }
        }
        ///


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

        ///
        ///
        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 GetSheetLinksData(string xlsPath)
        { 
             Application _appliation=null;
            Workbook _workbook = null;
            Object missing = System.Reflection.Missing.Value;
            Dictionary linksData = new Dictionary();
            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;
        }
 
        ///


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

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

你可能感兴趣的:(VSTO,c#,excel,java)