C# 获取Excel里引用的外部其他excel文件清单

news/2024/7/21 3:52:23 标签: c#, excel, java

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


http://www.niftyadmin.cn/n/5277125.html

相关文章

反网络爬虫的三个阶段

随着网络爬虫的普及和网络攻击的日益复杂&#xff0c;升级网络安全措施成为保护网站和应用程序免受恶意爬虫侵害的必要举措。本文将深入研究反网络爬虫的三个阶段&#xff0c;并详细探讨IP地址过滤的策略&#xff0c;以提升网络的安全性。 第一部分&#xff1a;反网络爬虫的三…

Macos 删除过期失效的软链接symlink

背景 现在需要卸载python老版本 通过移除以下目录中的对应python版本后 /Library/Frameworks/Python.framework/Versions /Applications 发现 /usr/local/bin 目录下还有老版本python的失效软链接 因此需要批量清除无效的软链接 命令行 系统目录下需要使用sudo实现删除 bre…

深入理解 Rust 中的元编程

元编程是编程技术中的一个高级概念&#xff0c;它涉及在编译时生成、修改代码的能力。Rust 语言支持强大的元编程功能&#xff0c;主要通过宏系统实现。本文将深入探讨 Rust 中的元编程概念&#xff0c;包括宏的基础、派生宏、过程宏的应用&#xff0c;以及如何在 Rust 项目中高…

【大数据存储与处理】实验一 HBase 的基本操作

一、实验目的&#xff1a; 1. 掌握 Hbase 创建数据库表及删除数据库表 2. 掌握 Hbase 对数据库表数据的增、删、改、查。 二、实验内容&#xff1a; 1、题目 0&#xff1a;进入 hbase shell 2、题目 1&#xff1a;Hbase 创建数据库表 创建数据库表的命令&#xff1a;create 表…

C语言实战之条件表达式a?b:c

a?b:c是什么意思&#xff1f; 这个是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c 条件表达式具体说明如下&#xff1a; 条件语句&#xff1a; if(a>b) maxa; else maxb; 可用条件表达式写为 max(a>b)?a:b; 执行该语句的语义是&#xff1a;如a&…

使用yarn安装electron时手动选择版本

访问1Password或者其他可以提供随机字符的网站&#xff0c;获取随机密码运行安装命令 操作要点&#xff0c;必须触发Couldnt find any versions for "electron" that matches "*"才算成功 将复制的随机密码粘贴到后面 例如&#xff1a;yarn add --dev elec…

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用修复建议 总结 漏洞名称 漏洞描述 在Apache Tomcat中发现了一个被归类为关键的漏洞&#xff0c;该漏洞在8.5.4(Application Server Soft ware)以下。受影响的是组…

全球知名的五款JavaScript混淆加密工具详解

​ 现在市场上有很多好用的混淆加密工具&#xff0c;其中一些比较流行且受欢迎的工具包括&#xff1a; 1、UglifyJS&#xff08;罗马尼亚&#xff09;&#xff1a;UglifyJS是一个非常流行的 JavaScript工具库&#xff0c;它可以压缩、混淆、美化和格式化 JavaScript 代码。使用…