从GemBox.Spreadsheet循环FindText方法

本文关键字:FindText 方法 循环 Spreadsheet GemBox | 更新日期: 2023-09-27 17:53:06

以网站为例,尝试创建一个循环,根据单元格内容标记某些单元格,这些单元格内容将通过Gembox组件的FindText方法进行识别

我的目标是:

  • 查找与关键字
  • 部分匹配的单元格
  • 转到该行的最后一列
  • 将该行的颜色更改为特定的颜色
  • 保持向下文档重复前面的命令
  • 在文档结束后停止

搜索工作在某种意义上找到查询,然后做我指示它做的事情,但它在第一个搜索结果后停止。

是否有一种方法来循环搜索使用这种方法,或者我可以使用它和另一种方法来测试单元格,看看它是否有我正在搜索的部分内容?

这是我的知识的基础链接:
https://www.gemboxsoftware.com/spreadsheet/examples/excel-search/109

再次感谢各位。

下面是我在1个查询的基础上计算系统是如何工作的,我想对整个文档都这样做

using System;
using System.Drawing;
using System.Text;
using System.IO;
using GemBox.Spreadsheet;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace autoexcel2
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //IF USING PRO PUT YOUR SERIAL BELOW
            SpreadsheetInfo.SetLicense("FREE-lIMITED-KEY");
            ExcelFile ef = ExcelFile.Load("sample.xlsx");
            string searchText = "pharma";
            var ws = ef.Worksheets[0];
            StringBuilder sb = new StringBuilder();
            int row;
            int col;
            ws.Cells.FindText(searchText, false, false, out row, out col);;
            if (row == -1 || col == -1)
            {
                sb.AppendLine("cant find nada");
                Console.WriteLine(sb.ToString());
            }
            else
            {
                ws.Cells[row,5].Style.FillPattern.SetSolid(Color.Aqua);
            }
           ef.Save("done.xlsx");
       }
    }
}

从GemBox.Spreadsheet循环FindText方法

尝试如下:

var workbook = ExcelFile.Load("sample.xlsx");
var worksheet = workbook.Worksheets[0];
var searchText = "pharma";
foreach (var currnetRow in worksheet.Rows)
{
    int row, col;
    if (currnetRow.Cells.FindText(searchText, false, false, out row, out col))
        currnetRow.AllocatedCells.Last().Style.FillPattern.SetSolid(Color.Aqua);
}
workbook.Save("done.xlsx");

这样,您就可以找到在行中第一次出现的搜索文本,然后根据需要格式化该行的最后一个单元格。

但是,如果您需要格式化这些找到的单元格,那么上面的方法可能不适合您,因为单行可能有多个单元格与搜索文本。

在这种情况下,您可以使用如下内容:

var workbook = ExcelFile.Load("sample.xlsx");
var worksheet = workbook.Worksheets[0];
var searchText = "pharma";
foreach (var row in worksheet.Rows)
{
    var range = row.Cells.GetSubrangeAbsolute(row.Index, 0, row.Index, row.AllocatedCells.Count);
    while (range.FindText(searchText, out int r, out int c))
    {
        worksheet.Cells[r, c].Style.FillPattern.SetSolid(Color.Aqua);
        range = range.GetSubrangeAbsolute(r, c + 1, r, range.LastColumnIndex);
    }
}
workbook.Save("done.xlsx");
编辑:

在较新版本的GemBox中。电子表格,现在有CellRange.FindAllText方法可以使用,例如:

foreach (ExcelCell cell in worksheet.Cells.FindAllText(searchText, false, false))
{
    // ...
}