Aspose.cells8.7.1.0⇒22.8.0.0へ移行し、既存プログラムの
マイグレーションをしています。
「**」前方一致のセル値(例:**Date)をFind関数で見つける以下の処理があります。
~~
Dim op As New FindOptions()
op.LookInType = LookInType.Values
op.LookAtType = LookAtType.StartWith
Dim c As Cell = Nothing
For Each sheets As Worksheet In book.Worksheets
While True
c = sheets.Cells.Find("**", c, op)
~~
8.7.1.0では、「**」前方一致の値のみcに取り出せていましたが、
22.8.0.0では、「**」をワイルドカードと認識してしまうらしく、
「**」以外の普通の文字列値や、数式が入っているセルもcに拾ってしまいます。
他のFindOptionsも試しましたが、うまくいきません。
8.7.1.0と同じ動作にしたいのですが、どうしたらよいでしょうか。
※「**」:*は半角です。
(半角の*文字が正しく反映しなかったので全角にしてあります)
違いがある場合は、コードで FindOptions.RegexKey 属性を「false」に設定してみてください。
op.RegexKey = False
それでも問題が見つかった場合は、テンプレートの Excel ファイルと、スプレッドシートでのみ抽出する値を示すスクリーンショットをいくつか共有してください。 すぐに問題を確認いたします。
帳票.7z (270.4 KB)
@Amjad_Sahi
返信ありがとうございました。
>違いがある場合は、コードで FindOptions.RegexKey 属性を「false」に設定してみてください。
>op.RegexKey = False
設定してみましたが、現象は変わりませんでした。
テンプレートファイルと、
7.8.1.0と22.8.0.0での出力ファイル、
不具合の解説資料を添付しましたので、ご確認お願いいたします。
サンプルファイルありがとうございます。
問題を正確に評価し、(スクリーンショットに従って) 正確な違いを比較するには、2 つのスタンドアロン サンプル コンソール VS.NET アプリが必要です。 1 つは古いバージョン (7.8.1.0) で、もう 1 つは新しいバージョン (22.8.0.0) です。 したがって、両方のプロジェクトを作成して提供し、プロジェクトを圧縮して共有します。 すぐに問題を調査します。
あなたの問題をさらに評価しました。 「*」は MS Excel ではワイルドカードとして扱われることに注意してください。 したがって、この動作を望まない場合は、~*~*
を使用して **
自体を表す必要があります。
例えば。、
c = sheet.Cells.Find(" ", c, op)
に:
c = sheet.Cells.Find("~*~*", c, op)
参考までに、「*Date
」は「abcDate
」、「123Date
」、「**Date
」などの日付に一致しますが、「~*~*Date
」は「*Date
」のみに一致します。
@Amjad_Sahi
早速の回答、返信ありがとうございました。
>「*」は MS Excel ではワイルドカードとして扱われることに注意してください。
7.8.1.0から22.8までのどこかのタイミングで、「*」はワイルドカードと
して取り扱うようになったということで承知いたしました。
>c = sheet.Cells.Find("~ * ~ *", c, op)
修正案をいただきありがとうございました。テンプレートの「* *」を「**」に修正する方針になりましたので、以下のように対処することで正常動作するようになりました。
①頭に「**」(半角)をつけているセルは頭に「**」(全角)をつけるようにテンプレートを修正
②ソースコードの判定は「**」(全角)で判定
(例)c = sheet.Cells.Find("**", c, op)
本件はクローズとさせていただきます。
ありがとうございました。