2012-01-19 10 views
0

私は1つの単語の文書にマスターテーブルを持っています。interopとC#を使用してWord 2007のテーブルから別のテーブルに行をコピーする方法

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

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

表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を使用することができません。このフォーマットを行わないと失われます。

+0

table.Cell()を使用できないと言うと、Range.Textは試したコードを持っていて動作しません。 MSによると、これは書式設定でさえできます。初心者のためにこのリンクをチェックしてください。http://msdn.microsoft.com/en-us/library/aa537149%28v=office.11​​%29.aspx – MethodMan

+0

私が持っているマスターテーブルのフォーマットを確実にする必要があります。私はそれがRange.Textでできるとは思わない。 – gizgok

+0

あなたは素晴らしい例を提供するリンクを見たことがあります。 – MethodMan

答えて

0

Word.Selectionを使用して最初に試しましたが、一度に1行ずつコピーして貼り付ける方法を見つけられませんでした。 Word.Selectionを使用することは可能かもしれません。

私が考えたのは、一度に1つのセルをコピーすることですが、Rangeプロパティはテーブルのセル構造を保持しています。私はWordモデルを調べて、行の終わりとして区別するために、すべての行の後にある種の終了文字があるかどうかを調べようとしました。そのような文字がありますが、それはすべての細胞のためです。この文字を見つけるには、オフィスのボタン(ホームの他に)をクリックし、単語オプションをクリックし、ディスプレイ上のの部分をクリックして、常にこのフォーマットマークを画面に表示します。、すべてのフォーマットマークが表示されます。これは、ワードドキュメント内の印刷できない文字をすべて表示します。これはあなたが見ることができるシンボルです。

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

私はマスターテーブルから必要なすべてのセルを保持するためのリストを作成しました。次のコードは、目的がフォーマットされたテキストを得ることであった

    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; 

       } 

レンジからの最後の文字を削除し、各セル範囲から文字を除去することにより、その後

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

、我々はそれを指し示すことができます特定のセルの構造であり、テーブル全体ではありません。

フォーマットされたテキストプロパティのみを使用してループを実行しようとすると、テーブルの破損エラーが発生します。お役に立てれば。

関連する問題