0

从网站上举了一个例子,并尝试创建一个循环,该循环将根据单元格内容标记某些单元格,这些单元格内容将通过 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");
       }
    }
}
4

1 回答 1

1

尝试以下操作:

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");
于 2014-04-02T13:25:32.803 回答