vsto快速在excel中查找某个字符串

news/2024/4/28 14:37:27

是的,使用foreach循环遍历 Excel.Range 可能会较慢,特别是在大型数据集上。为了提高效率,你可以考虑使用 Value 属性一次性获取整个范围的值,然后在内存中搜索文本。这样可以减少与 Excel 之间的交互次数,提高性能。

以下是修改后的代码:

csharp
using System;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;namespace ExcelSearchExample
{class Program{static void Main(string[] args){// 连接到正在运行的 Excel 实例或启动新的 Excel 实例Excel.Application excelApp = new Excel.Application();excelApp.Visible = true; // 设置 Excel 可见// 获取活动工作簿和工作表Excel.Workbook workbook = excelApp.ActiveWorkbook;Excel.Worksheet worksheet = workbook.ActiveSheet;// 调用自定义的查找方法Excel.Range foundRange = FindTextInWorksheet(worksheet, "关键字");// 处理找到的结果if (foundRange != null){Console.WriteLine("找到在单元格:" + foundRange.Address);}else{Console.WriteLine("未找到基。");}// 释放资源System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);}static Excel.Range FindTextInWorksheet(Excel.Worksheet worksheet, string searchText){// 获取整个工作表的值Excel.Range searchRange = worksheet.UsedRange;object[,] values = searchRange.Value;// 获取数组的维度int rowCount = values.GetLength(0);int colCount = values.GetLength(1);// 遍历数组查找文本for (int row = 1; row <= rowCount; row++){for (int col = 1; col <= colCount; col++){if (values[row, col] != null && values[row, col].ToString().Contains(searchText)){// 计算找到的单元格在 Excel 中的位置int excelRow = searchRange.Row + row - 1;int excelCol = searchRange.Column + col - 1;// 返回找到的单元格return worksheet.Cells[excelRow, excelCol] as Excel.Range;}}}return null;}}
}


这个修改后的代码首先将整个 UsedRange 的值读入到一个二维数组中,然后在内存中遍历数组以查找匹配的文本。这样可以减少与 Excel 之间的交互次数,从而提高性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

web的部署

首先&#xff0c;我们鼠标右击此电脑&#xff0c;管理&#xff0c;添加角色和功能 默认下一步&#xff0c; 默认下一步&#xff0c; 默认下一步&#xff0c; 勾选web&#xff0c;点击下一步&#xff0c; 点击下一步&#xff0c; 默认下一步&#xff0c; 勾选所需功能&#xff0…

宠物小精灵之收服

题目描述 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。 一天&#xff0c;小智和皮卡丘来到了小精灵狩猎场&#xff0c;里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而&#xff0c;野生的小精灵并不那么容易被收服。对于每一个野生小精灵而…

【机器学习300问】30、准确率的局限性在哪里?

一、什么是准确率&#xff1f; 在解答这个问题之前&#xff0c;我们首先得先回顾一下准确率的定义&#xff0c;准确率是机器学习分类问题中一个很直观的指标&#xff0c;它告诉我们模型正确预测的比例&#xff0c;即 还是用我最喜欢的方式&#xff0c;举例子来解释一下&#xf…

#QT(MainWindow初尝---文本编辑器)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;使用MainWindow做一个文本编辑器 3.记录 &#xff08;1&#xff09;创建几个功能 &#xff08;2&#xff09;为几个功能写实现&#xff0c;这里不能使用转到槽&#xff0c;需要自己用connect函数关联。这里的功能是QAction类&am…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路&#xff08;双端队列实现&#xff09;&#xff1a; 可以参考一下&#xff1a;力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤&#xff1a;初始化双端队列&#xff08;将s的前t_len个元素入队&#xff0c;此时检验是…