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");

これにより、行内で最初に出現する検索テキストを見つけて、必要に応じて行の最後のセルをフォーマットできます。

ただし、見つかったセルをフォーマットする必要がある場合は、検索されたテキストを含む複数のセルが 1 つの行に含まれる可能性があるため、上記は機能しない可能性があります。

その場合、次のようなものを使用できます。

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 に答える