web-dev-qa-db-ja.com

C#でWordドキュメントを作成、挿入、保存する

Wordドキュメントのインスタンスの作成、あらゆる種類のテキストと書式の挿入に関する有用なドキュメントがたくさん見つかりましたが、まだプログラムで作成されて開かれていないドキュメントを保存するための場所が見つかりません。

基本的に、docxファイルを作成し、リッチテキストボックスのテキストを入力します。 ドキュメントの最後にテキストを挿入する方法 で見つけたコードを使用して、最初にドキュメントを作成すると、これを実現できます。しかし、_document.SaveAs()(存在しない-おそらくバージョンが異なる)を使用することを提案したり、ファイルがまだ存在しない場合は.Save()がSaveAsダイアログでプロンプトを表示したとしても、常に型の不一致エラーが発生します。したがって、使用するファイルを事前に作成した場合、これは作業コードです。

OpenFileDialog SDO = new OpenFileDialog();
SDO.ShowDialog();

Microsoft.Office.Interop.Word._Application oWord;
object oMissing = Type.Missing;
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;

oWord.Documents.Open(SDO.FileName);

oWord.Selection.TypeText(richTextBox1.Text);
oWord.ActiveDocument.Save();
oWord.Quit();

今度は、OpenFileDialogue Documents.Openの行を削除すると、C#で作成された新しいファイルを保存する方法がいくつかあるものの、

Microsoft.Office.Interop.Word._Application oWord;
object oMissing = Type.Missing;
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;

SaveFileDialog SD = new SaveFileDialog();

SD.Filter = "Word File |*.docx";
SD.Title = "Save File";
SD.ShowDialog();


oWord.Documents.Save(SD.FileName,WdNewDocumentType.wdNewXMLDocument);

oWord.Selection.TypeText(richTextBox1.Text);
oWord.ActiveDocument.Save();
oWord.Quit();

他の例では、ドキュメントを開いて自分で保存できるようにしていますが、ファイル名を選択する以外に人間の介入なしで保存する必要があります。

助けていただければ幸いです。また、尖塔や宝石などのサードパーティのdllのオプションは除外されているため、オプションではありません:(

プログラムを実行する前に存在しなかったWordドキュメントを作成して保存する簡単な例を誰かが持っている場合は、多くの義務があります。

6
Dan

Microsoft MSDNのドキュメントには、役立つガイドと例がたくさんあります。

あなたが含めたいのは:

using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Tools.Word;

次に、アプリケーションを宣言します。

Word.Application app = new Word.Application();

新しいドキュメントを宣言します:

Word.Document doc = app.Documents.Add();

ドキュメントにテキストを追加

これらのドキュメントを保存するには、2つの方法があります。

プログラムで

ファイルの保存ダイアログボックスを使用

7
Bender Bending

これが私のやり方です。

app = new Word.Application();

object oMissing = System.Reflection.Missing.Value;
Word._Document oDoc = app.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);

.....

app.ActiveDocument.SaveAs2(fileName);

Filenameは、希望するファイル名です。私が最初にこれを行っていたときに、文書化されていない(したがってサポートされていない)関数がたくさんあることに気付きました。 SaveAs2はその1つです。しかし、それは機能します。

2