2012-08-30 2 views
7

私はInteropライブラリを使うのは非常に新しいですが、人々が常に示唆しているアドバイスは、マクロを記録してvbaコードをチェックすることです。問題は、マクロが私がやっていることを正確に記録していないことです。クイックスタイルをクリックして現在の選択に適用しますC#でWordクイックスタイルを適用するには - シンプルな書式だけでなく、スタイル全体を適用しますか?

私の仕事は、非常に単純です:私はパラグラフ(Microsoft.Office.Interop.Word.Paragraph)にクイックスタイルを適用する必要があり。ただし、set_styleコマンドを使用すると、基本的な書式設定のみが適用され、段落は元のクイックスタイル選択(普通)のままです。

Remouのアプローチを使用すると、それは私にとってはうまくいったのですが、自分のコードと非常によく似ているように見えますが、それを機能させることができませんし、少しオブジェクトモデルを理解するかもしれません。

public void AddParagraph(string text, string styleName = null) 
{ 
    Paragraph paragraph = _document.Content.Paragraphs.Add(); 
    if (styleName != null) 
    { 
    paragraph.Range.set_Style(_document.Styles[styleName]); 
    } 

    paragraph.Range.Text = text; 
    paragraph.Range.InsertParagraphAfter(); 
} 

AddParagraph("A title", "Heading 1");ですが、上記のラッパーを使用して文書を作成した結果、フォント、色、サイズ、太字/斜体のみが適用されます。

私自身の定義済みの名前付きスタイルを使用して自分の.dotxファイルを使用していますが、単にRemoueのコードを自分のテンプレートでコピーするので、問題ではないと思います。それぞれのスタイリングで複数の段落を追加する方法を理解することができます。

私のアプローチで何が間違っているのか、少なくとも私の要求に応じてRemouが提供する回答をどのように出すことができますか? :)

答えて

7

これは私のために働く。

Word.Application _wordApp = new Word.Application(); 
Word.Document oDoc = _wordApp.Documents.Add(); 
_wordApp.Visible = true; 
_wordApp.Selection.TypeText("Heading"); 
oDoc.Paragraphs[1].set_Style(Word.WdBuiltinStyle.wdStyleHeading2); 

あなたはあなたが想像したよりも多くの段落を取得している

paragraph.Range.Text = text + paragraph.Range.Text; 

を言います。私はあなたが必要と数える:

paragraph.Range.Text = text; 

を試してください:あなたはすべての方法少し近づけなく私を得たとして

Paragraph paragraph = _document.Content.Paragraphs.Add(); 
paragraph.Range.Text = text; 

if (styleName != null) 
{ 
    paragraph.set_Style(_document.Styles[styleName]); 
} 

paragraph.Range.InsertParagraphAfter(); 
+0

おかげRemou、私は、私の質問を更新しました。私はおそらくこれについて間違った方法をとっています。 –

+0

...私はうんざりです。スタイルとテキストを適用する順番を変更するのはそれでした、 '+ paragraph.Range.Text;'部分は私が間違って試してコピーしたものでした。ご協力ありがとうございました! :) –

関連する問題