从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");
}
}
}
尝试如下:
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))
{
// ...
}