当前位置:   article > 正文

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

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

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

以下是修改后的代码:

  1. csharp
  2. using System;
  3. using System.Linq;
  4. using Excel = Microsoft.Office.Interop.Excel;
  5. namespace ExcelSearchExample
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             // 连接到正在运行的 Excel 实例或启动新的 Excel 实例
  12.             Excel.Application excelApp = new Excel.Application();
  13.             excelApp.Visible = true; // 设置 Excel 可见
  14.             // 获取活动工作簿和工作表
  15.             Excel.Workbook workbook = excelApp.ActiveWorkbook;
  16.             Excel.Worksheet worksheet = workbook.ActiveSheet;
  17.             // 调用自定义的查找方法
  18.             Excel.Range foundRange = FindTextInWorksheet(worksheet, "关键字");
  19.             // 处理找到的结果
  20.             if (foundRange != null)
  21.             {
  22.                 Console.WriteLine("找到在单元格:" + foundRange.Address);
  23.             }
  24.             else
  25.             {
  26.                 Console.WriteLine("未找到基。");
  27.             }
  28.             // 释放资源
  29.             System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
  30.             System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
  31.             System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
  32.         }
  33.         static Excel.Range FindTextInWorksheet(Excel.Worksheet worksheet, string searchText)
  34.         {
  35.             // 获取整个工作表的值
  36.             Excel.Range searchRange = worksheet.UsedRange;
  37.             object[,] values = searchRange.Value;
  38.             // 获取数组的维度
  39.             int rowCount = values.GetLength(0);
  40.             int colCount = values.GetLength(1);
  41.             // 遍历数组查找文本
  42.             for (int row = 1; row <= rowCount; row++)
  43.             {
  44.                 for (int col = 1; col <= colCount; col++)
  45.                 {
  46.                     if (values[row, col] != null && values[row, col].ToString().Contains(searchText))
  47.                     {
  48.                         // 计算找到的单元格在 Excel 中的位置
  49.                         int excelRow = searchRange.Row + row - 1;
  50.                         int excelCol = searchRange.Column + col - 1;
  51.                         // 返回找到的单元格
  52.                         return worksheet.Cells[excelRow, excelCol] as Excel.Range;
  53.                     }
  54.                 }
  55.             }
  56.             return null;
  57.         }
  58.     }
  59. }


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/260181
推荐阅读
相关标签
  

闽ICP备14008679号