0

ブックマーク位置(作業中)から範囲を選択します。

Word.ContentControl wcc;
Word.Selection WSelection = wApp.Selection;
object obj;
obj = (object)wApp.ActiveDocument.Bookmarks.get_Item(bookmark).Range;

次に、範囲の前に移動して段落を追加し、新しい段落に移動します。これは、ブックマークの前に ContentControl を追加したいためです (注文上の理由から) (動作中):

Word.Range WRange = WSelection.Range;
object count = 1;
object back = -1;
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

ここで、ContentControl を追加します (動作中):

wcc = WRange.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText, ref obj);
wcc.LockContentControl = true;
wcc.SetPlaceholderText(null, null, " ");
wcc.Tag = fileName;

そして今、その ContentControl に別の Word ファイルを挿入したい (動作していません!):

wcc.Range.InsertFile(Path.Combine(path, fileName));

外部 Word ファイルには、4 行のテーブルが含まれています (単なるサンプル ファイル)。コンテンツは、内部ではなく ContentControl の後に挿入されるようになりましたか? 結果は次のようになります。 結果 (ハイライトされた空の ContentControl と ContentControl の外側のテーブルを参照)

ContentControl の Text を設定しようとすると、正常に動作します (コンテンツ「テスト」は ContentControl の内部にあります):

wcc.Range.Text = "test";

最後のテストの結果、正しい範囲を選択したと思いますが、テーブルが ContentControl の外にあるのはなぜですか?

編集:

コードで実行したい手順でマクロを記録し、ContentControl と他の文字 (私の場合はスペース) がある行にテーブルを挿入できないことを発見しました。したがって、この解決策を得るために別の段落を追加しました。

Word.Range WRange = WSelection.Range;
object next = 1;
object back = -1;
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdParagraph, Count: ref next);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
wcc = WRange.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText, ref obj);
wcc.LockContentControl = true;
wcc.SetPlaceholderText(null, null, " ");
wcc.Tag = fileName;
wcc.Range.InsertFile(Path.Combine(path, fileName));

その結果、1 番目と 2 番目に追加された ContentControl (ContentControl 内のテーブルの最初と最後にある段落を含む) の間に、合計 3 つの段落で余分な段落があることになります... より良い解決策を提供する人はいますか?

4

1 に答える 1

1

ブラックボックステストを少し行うために、コードに基づいて小さなテストメソッドを作成しました。

これを行うために、2 つの小さなファイルを作成しました。

  • testdoc1.docx、新規から作成、=rand() でランダム テキストを挿入、「testbookmark」というブックマークを追加
  • testdoc2.docx、新しいものから作成、テーブルを挿入、4 つの行と 2 つの列をあなたのものと同じように。

ここに示した正確なコードを実行すると、問題なく動作しました。使用した範囲と関係があるかどうかを確認するために、少し書き直しました。

[TestMethod]
public void TestInsertFile()
{
    Application word = new Microsoft.Office.Interop.Word.Application();

    word.Visible = true;

    Document doc = word.Documents.Open(@"c:\temp\testdoc1.docx");

    Range rng = word.ActiveDocument.Bookmarks.get_Item("testbookmark").Range;

    object count = 1;
    object back = -1;

    rng.Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
    rng.Paragraphs.Add();
    rng.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

    object obj = rng as object;

    Word.ContentControl wcc = word.ActiveDocument.ContentControls.Add(WdContentControlType.wdContentControlRichText, ref obj);
    wcc.LockContentControl = true;
    wcc.SetPlaceholderText(null, null, " ");
    wcc.Tag = @"c:\temp\testdoc2.docx";

    wcc.Range.InsertFile(wcc.Tag);
}

したがって、あなたの問題はコードに関連していないようです。ソース ドキュメントまたはターゲット ドキュメントに、動作に影響を与える可能性のある他のコンテンツがないかどうかを確認します。私の TestMethod でコードを実行してみて、分離されたコードがあなたの側で同じように動作するかどうかを確認してください。

上記のコードの結果は次のとおりです。 結果出力

于 2016-03-14T10:42:11.517 に答える