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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件设计模式:单例模式

文章目录 前言一、单例模式实现1.饿汉式静态变量方式静态代码块方式 2.懒汉式线程不安全线程安全双重检查锁静态内部类方式枚举方式 二、存在问题1.序列化反序列化2.反射破坏3.解决序列化破坏解决反射破坏解决 三、JDK源码解析总结 前言 单例模式&#xff08;Singleton Patter…

windows远程桌面怎么开启?

文章目录 如下三种开启方式&#xff0c;任选一即可方式1.在系统属性中开启远程桌面方式2.通过系统设置开启远程桌面方式3.注册表编辑器开启远程桌面使用远程桌面 如下三种开启方式&#xff0c;任选一即可 配合 组网工具或者内网穿透 超级爽 局域网其他pc如何访问宿主机虚拟机IP…

@RequestParam、@PathVariable、@RequestBody、@RequestAttribute详解

一、RequestParam注解 作用&#xff1a;用于将指定的请求参数赋值给方法中的形参。 属性&#xff1a; 1&#xff09;value&#xff1a;请求参数名&#xff08;必须配置&#xff09; 2&#xff09;required&#xff1a;是否必需&#xff0c;默认为 true&#xff0c;即请求中必须…

Elasticsearch:什么是文本分类?

文本分类定义 - text classification 文本分类是一种机器学习&#xff0c;它将文本文档或句子分类为预定义的类或类别。 它分析文本的内容和含义&#xff0c;然后使用文本标签为其分配最合适的标签。 文本分类的实际应用包括情绪分析&#xff08;确定评论中的正面或负面情绪&…

GLTF/GLB模型在线预览、编辑、动画查看以及材质修改

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 GLTF在线编辑器提供了一个内置的模型查看器&#xff0c;可以加载和预…

Linux docker安装nacos

1&#xff1a;首先下载安装docker&#xff0c;这里不做描述&#xff0c;可以自行百度安装。 2&#xff1a;通过docker下载nacos&#xff0c; docker pull nacos/nacos-server:latest3&#xff1a;搭建临时nacos容器&#xff0c;此步骤的目的是为了获取nacos的配置文件和日志 …

Ubuntu 常用命令之 awk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 AWK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。在Ubuntu系统下&#xff0c;AWK命令主要用于数据处理和生成报告。 AWK命令的参数主要有 -F&#xff1a;指定输入文件分隔符&#xff0c;FS变量就是指定输入字…

【华为OD题库-094】最佳的出牌方法-java

题目 手上有一副扑克牌&#xff0c;每张牌按牌面数字记分(J11,Q12,K13&#xff0c;没有大小王)&#xff0c;出牌时按照以下规则记分: 出单张&#xff0c;记牌面分数&#xff0c;例如出一张2&#xff0c;得分为2 出对或3张&#xff0c;记牌面分数总和再x2&#xff0c;例如出3张3…

根据excel中的数据信息批量修改图片名称

背景说明 接了一个需求&#xff0c;需要将批量图片按照指定的需求进行重命名&#xff0c;本来的图片是以身份证号进行命名的.jpg文件&#xff0c;现在需要统一命名为班级姓名身份证号.png格式的文件。其中&#xff0c;用户提供了一张导出的excel数据表(data.xlsx)&#xff0c;数…

Salesforce回归后:谁在成为中国市场上的CRM首选?

怎样的C RM才是在中国这片土地上的最佳答案&#xff1f; 在Salesforce重新回归的今天&#xff0c;其所面临的产品、生态、技术、服务、数据等问题也恰是中国本土的CRM厂商被多年磨练和审视的问题。 在如Salesforce等国外软件进军中国市场的同时&#xff0c;中国本土的CRM厂商…

《漫画算法》笔记——给定数,求删除k个数字后的最小值

/*** 题目&#xff1a;给定一个数&#xff0c;求 删除k个数字后的最小值* 思路&#xff1a;考虑 “如何删除一个数字&#xff0c;得到最小值”&#xff0c;* 不难想到&#xff0c;应该优先删除“靠前&#xff0c;值大”的数字&#xff0c;* 观察到&#xff1a;如果一个数字大于…

深度学习14—注意力机制与自注意力机制

注&#xff1a;以下均为个人学习笔记&#xff0c;发布只为方便学习阅读&#xff0c;若觉侵权&#xff0c;请联系删除&#xff01;&#xff01; 1.李沐老师课堂学习理解笔记 1.1 随意线索和不随意线索 1.2 注意力机制 通过注意力池化层来有偏向性的选择某些输入。 1.3 注意力…

Linux 音视频SDK开发实践

一、兼容性适配处理 为什么需要兼容处理&#xff1f; 1、c兼容处理 主要有ABI兼容性问题&#xff0c;不同ubuntu系统依赖的ABI版本如下&#xff1a; ubuntu 18.04ubuntu 16.04ubuntu 14.04g7.55.44.8stdc版本libstdc.so.6.0.25libstdc.so.6.0.21libstdc.so.6.0.19GLIBCXXG…

BearPi Std 板从入门到放弃 - 后天篇(3)(ESP8266透传点灯)

简介 电脑搭建一个TCP Server&#xff0c; ESP8266 串口设置好透传模式, 再由TCP Server发送指令控制灯的亮灭; 开灯指令&#xff1a; led_on回车 &#xff1b; 关灯指令: led_off回车 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 串口: Usart1 / LPUART E…

指针---你真的会使用指针吗?

指针作为C语言中的一个部分&#xff0c;可以说指针是C语言的核心&#xff0c;那么它的难度肯定是不言而喻的&#xff0c;总是能把人给绕得找不到方向。 今天我就好好的说一说指针这个东西。 1、何为指针&#xff1f; 指针是C语言中用来存放地址的一个变量类型。我们可以将指针看…

Uniapp + Vue3 + Pinia + Vant3 框架搭建

现在越来越多项目都偏向于Vue3开发&#xff0c;想着uniapp搭配Vue3试试效果怎么样&#xff0c;接下来就是详细操作步骤。 初始化Uniapp Vue3项目 App.vue setup语法 <script setup>import {onLaunch,onShow,onHide} from dcloudio/uni-apponLaunch(() > {console.l…

同源策略:保护你的网页免受恶意攻击的第一道防线(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

使用Flask逐步搭建Web应用程序

大家好&#xff0c;Flask是一个使用Python编写的轻量级Web应用框架。它被设计成简单、易于学习和使用的&#xff0c;同时具备足够的灵活性和扩展性&#xff0c;以满足各种规模的Web应用开发需求。本文我们将介绍一个使用Flask逐步搭建Web应用程序的简单入门示例。 1.安装Flask…

计算机存储术语: 扇区,磁盘块,页

扇区(sector) 硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段&#xff0c;这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用 fdisk -l 了解扇区大小&#xff1a; $ sudo /sbin/fdisk -l Disk …

Vue3-24-组件-异步组件的介绍

什么是异步组件 个人理解 &#xff1a;异步组件 就是在用到这个组件的时候再进行加载&#xff0c;而不是 一上来就全部加载完成。即用即取的一个思想。异步组件中使用到的方法 &#xff1a; defineAsyncComponent () 方法 &#xff1a; 返回一个Promise 对象; 我们在开发过程中…