DOBON.NET DOBON.NETプログラミング掲示板過去ログ

リッチテキストボックス内のテキストをワード形式で保存

環境/言語:[WinXP、VB.NET]
分類:[.NET]

お世話になります。VB.NETでエディタを作成しています。
Titleどおり、
リッチテキストボックス内のテキストをワード形式で保存したいのですが、
どうすれば効率よくできるのでしょうか?
実は、恥ずかしながら、
リッチテキストボックスをRTF形式で保存した後、
わざわざワードを起動してRTF形式で読み出し、
そしてワード形式で保存するという非常に面倒な作業をやらせてます。

こんな感じで、、。dcDocフォームに設定してあります。

'リッチテキストボックスのテキストをリッチテキスト形式で保存
dcDoc.RichTextBox1.SaveFile(dcFilename & ".rtf",_ RichTextBoxStreamType.RichText)
dcDoc = Nothing

Dim wdApp As Microsoft.Office.Interop.Word.Application
Dim wdDoc As Microsoft.Office.Interop.Word.Document
wdApp = New Microsoft.Office.Interop.Word.Application()
wdDoc = wdApp.Documents.Open(CType(dcFilename & ".rtf", Object))
wdDoc.SaveAs(CType(dcFilename, Object))

wdDoc = Nothing
wdApp = Nothing

上記コードはかなり適当で、
その他RTFを削除しなければならないわけなのですが、
処理時間がかなりかかります。

なんとか、効率よくやらせたいのですが、
お知恵を貸していただけないでしょうか?
よろしくお願いします。
2005/04/19(Tue) 19:10:45 編集(投稿者)

> リッチテキストボックスをRTF形式で保存した後、
> わざわざワードを起動してRTF形式で読み出し、
> そしてワード形式で保存するという非常に面倒な作業をやらせてます。

 Word の形式で保存しようとしているのですから、起動するのは仕方ないのではないでしょうか?


> その他RTFを削除しなければならないわけなのですが、
> 処理時間がかなりかかります。

 「RTFを削除」というのが何を指しているのかも、どこがボトルネックになっているのかも判りませんが、
一旦リッチテキスト ファイルに保存するという手順を省けば(どの程度改善されるかはさておき)
それだけ早くなるのではないかと思います。

 例えば次のようにクリップボードを利用するいうのはどうでしょう。
# C# ですけど、内容は伝わりますよね?


    object nothing = Type.Missing;
    object documentType = Word.WdNewDocumentType.wdNewBlankDocument;
    object visible = false;
    object fileName = System.IO.Path.Combine(Application.StartupPath, "Text.doc");
    Word.Application app = new Word.Application();
    Word.Documents docs = app.Documents;
    Word.Document doc = docs.Add(ref nothing, ref nothing, ref documentType, ref visible);
    doc.Select();
    Word.Selection sel = app.Selection;

    int ss = this.richTextBox1.SelectionStart;
    int sl = this.richTextBox1.SelectionLength;
    this.richTextBox1.SelectAll();
    this.richTextBox1.Copy();
    this.richTextBox1.SelectionStart = ss;
    this.richTextBox1.SelectionLength = sl;

    sel.Paste();
    doc.SaveAs(ref fileName, ref nothing, ref nothing, ref nothing, ref nothing,
        ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing);
    Marshal.ReleaseComObject(sel);
    sel = null;
    doc.Close(ref nothing, ref nothing, ref nothing);
    Marshal.ReleaseComObject(doc);
    doc = null;
    Marshal.ReleaseComObject(docs);
    docs = null;
    app.Quit(ref nothing, ref nothing, ref nothing);
    Marshal.ReleaseComObject(app);
    app = null;

DOBON.NET | プログラミング道 | プログラミング掲示板