【问题标题】:save word document that's been created dynamically using SaveFileDialog?保存使用 SaveFileDialog 动态创建的 Word 文档?
【发布时间】:2012-06-07 21:20:00
【问题描述】:

我有将文本写入 Word 文档(非 XML)并将其保存到文件的代码。现在,我正在尝试对其进行修改,以便创建文档并提示用户保存文档。

这是创建Word文档的代码:

object miss = System.Reflection.Missing.Value;
object Visible = true;
object start1 = 0;
object end1 = 0;
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Document aDocument = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss);
Range rng = aDocument.Range(ref start1, ref miss);

try
{
    rng.Font.Name = "Georgia";
    rng.InsertAfter("Report Header!");
    object filename = @"C:\Users\test.doc";

    aDocument.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
    object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges;
    object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument;
    object routeDocument = true;
    ((_Document)aDocument).Close(saveChanges, originalFormat, routeDocument); //to close the document process (winword.exe)
    //WordApp.Visible = true;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}        

这按预期工作;它创建一个 Word 文档并为用户打开它。我一直在阅读来自 Microsoft 的 this link 关于使用 SaveFileDialog 保存文件的信息,但我不完全确定如何将其应用于我的情况。由于 SaveFileDialog 提供了要写入的流对象,我应该从 Word 文件中读取并将其写入流吗?如果是这种情况,我不确定如何编码,但这似乎是一种迂回的方式。有没有办法将创建的 Word 文档直接传递给 SaveFileDialog?

【问题讨论】:

    标签: c# winforms ms-word


    【解决方案1】:

    SaveFileDialog 可以简单地用于为您的用户提供一个选择文件夹和名称的界面。然后由您来保存文件。

    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "Word document|*.doc";
    saveFileDialog1.Title = "Save the Word Document";
    if(DialogResult.OK == saveFileDialog1.ShowDialog())
    {
        string docName = saveFileDialog1.FileName;
        if(docName.Length > 0)
        {
            object oDocName = (object)docName;
            aDocument.SaveAs(ref oDocName, ref miss, ref miss, ref miss, ref miss, ref miss,  
                         ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, 
                         ref miss, ref miss, ref miss, ref miss); 
            WordApp.Visible = true; 
        }
    }
    

    您在问题中提到的方法由 MSDN in this article 记录,但在您的情况下,让 MSWORD 应用程序对其文件执行保存操作更为实际。

    【讨论】:

    • 啊,好的。不过,这段代码给了我一个错误。错误显示"The best overloaded match for for Microsoft.Office.Interop._Document.SaveAs(ref object, ref object,......) has some invalid arguments" 我通过将ref docName 更改为(object) docName 修复了此错误。这是一个合适的解决方案吗?
    • 您链接到的页面看起来像是我发布的页面的更新版本,但如果此解决方案(包括我之前评论中所述的更改)没问题,我可能会坚持下去暂时。
    • 坚持下去,你会避免头疼的!
    • 那么我会坚持我的改动。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多