0

1 つの単語ドキュメントにマスター テーブルがあります。

テーブルの最初の列にはキーがあります。ユーザーが選択したキー (行) に基づいて別のテーブルを作成する必要があります。

ユーザーはキー (行) を複数回選択できます。

表1:

TaskName    Data       Group
abc         data1      group1
pqr         data2      group2
lmn         data3      group3

TaskName列がキー列です。ユーザーはabc、pqr、abc、pqr、lmnを選択できます

これにより、次のようなテーブルが生成されます。

TaskName    Data       Group
abc         data1      group1
pqr         data2      group2
abc         data1      group1
pqr         data2      group2
lmn         data3      group3

table.Cell().Range.Textこれを行うとフォーマットが失われるため、使用できません。

4

1 に答える 1

0

最初に Word.Selection を使用してみましたが、一度に 1 行ずつコピーして貼り付ける方法がわかりませんでした。Word.Selection を使用して実行できる場合があります。

次に考えたのは、一度にセルをコピーして貼り付けることでしたが、Range プロパティはテーブルのセル構造を保持します。Word モデルを調べて、行の終わりとして区別するために、すべての行の後にある種の終了文字があるかどうかを調べようとしました。そのような文字がありますが、それはすべてのセルです。この文字を見つけるには、office ボタン ([ホーム] の横) をクリックし、単語のオプションをクリックして、[表示] をクリックし、[常にこれらの書式設定マークを画面に表示する] セクションで、[すべての書式設定マークを表示] にチェックマークを付けます。これにより、Word 文書内のすべての印刷不能文字が表示されます。これはあなたが見ることができるシンボルです ¤.

この記号はセルの構造情報を保持し、公開されている ANSI 文字は 13 + 7 です。13 は段落記号で、7 は「セルの終わり」マーカーです。これは、ファイル内のセル構造管理を指す追加情報を保持します。Word 2007 では、これら 2 つの文字は 1 つの文字として表示されるため、セルの範囲からこの文字を削除する必要があります。

マスター テーブルから必要なすべてのセルを保持するリストを作成しました。

List<Microsoft.Office.Interop.Word.Cell> masterTableCells=new List<Microsoft.Office.Interop.Word.Cell>();

その後、次のコードは Range から最後の文字を削除します

                    Microsoft.Office.Interop.Word.Table table = b.Range.Tables[1];

                table.ID = b.Name;
                for (int colCounter = 1; colCounter <= masterTable.Columns.Count; colCounter++)
                {
                    Microsoft.Office.Interop.Word.Range sourceRange = masterTable.Cell(1, colCounter).Range;
                    Microsoft.Office.Interop.Word.Range targetRange = table.Cell(1, colCounter).Range;
                    object oCharacter = Microsoft.Office.Interop.Word.WdUnits.wdCharacter;
                    object negOne = -1;
                    sourceRange.MoveEnd(oCharacter, negOne);
                    targetRange.MoveEnd(oCharacter, negOne);
                    targetRange.FormattedText = sourceRange.FormattedText;

                }

目的は、フォーマットされたテキストを取得することであり、各セル Range から文字を削除することで、テーブル全体ではなく、その特定のセルの構造のみを指すことができます。

書式設定されたテキスト プロパティのみでループを実行しようとすると、テーブルの破損エラーが発生します。お役に立てれば。

于 2012-01-24T08:39:48.490 に答える