質問
Table: 表 または Repeating Group: 繰り返しの各要素にアクセスに何らかの操作を行いたい事があります。ここでは、その基本的なアクセス方法について、教えてください。
回答
Table: 表 または Repeating Group: 繰り返しの各要素にアクセスするには、次の場所から行います。
文書定義のメニュー「文書定義」>「文書定義プロパティ」 >
「イベントハンドラ」タブ >「文書定義ルールチェック後」をチェック> [スクリプトの編集(S)...] ボタンをクリック。
Table: 表 または Repeating Group: 繰り返しの行数を取得する。
// 記述形式:
int rowCount = Document.Field( <Table: 表 または Repeating Group: 繰り返しへのフルパス> ).Items.Count;
記述例:
下図のような文書構造である場合:
// Table: 表の行数を得る例。
int rowCount = Document.Field( "Document Section 1\\LineItem" ).Items.Count;
// また、パスを何度も記述することが大変である場合、このように記述することもできます。
string docSec01 = "Document Section 1";
IField lineItem = Document.Field( docSec01 + "\\LineItem" );
int rowCount = lineItem.Items.Count;
// クラス: IField は文書定義のフィールドのインスタンスを格納するABBYY FlexiCapture 独自のクラスです。インスタンスには仕様に沿った様々な操作を行うことができます。詳しくはHelpをご覧ください。
Table: 表 または Repeating Group: 繰り返し グループ の要素の各行、列にアクセスしたい場合は、例えば文書構造が下図のような形の場合、次の例をご参考ください。
// スクリプト例。例はC#。
string productName = "";
string qty = "";
string unit = "";
string unitPrice = "";
string amount = "";
// Table: 表 または Repeating Group: 繰り返しグループの要素でない場合の要素の値へのアクセス方法
string totalAmount = Document.Field("Document Section 1\\TotalAmount").Text;
// Table: 表 または Repeating Group: 繰り返しグループの要素へのアクセス方法
IField table = Document.Field("Document Section 1\\TransactionTable");
// 行数を取得
int rowCount = table.Items.Count;
// Table: 表 または Repeating Group: 繰り返しグループの各行の列要素の文字列の値へのアクセス方法
for( int i=0 ; i<rowCount ; i++ )
{
productName = table.Items[i].Field("ProductName").Text;
qty = table.Items[i].Field("Qty").Text;
unit = table.Items[i].Field("Unit").Text;
unitPrice = table.Items[i].Field("UnitPrice").Text;
amount = table.Items[i].Field("Amount").Text;
}
コメント
1件のコメント
藤田卓也
Repeating Groupで取得した時、「発見順」でブロックに格納するようにしていますが、FLでは正しく機能するのに、FCで取得順番が異なるのですが、そのあたりは制御出来ないでしょうか?そのあたり参考となる情報があれば教えてもらえないでしょうか?
サインインしてコメントを残してください。