【问题标题】:How to open a RTF file with C# without showing the Microsoft Word "Convert File" dialog?如何使用 C# 打开 RTF 文件而不显示 Microsoft Word“转换文件”对话框?
【发布时间】:2015-02-25 08:41:15
【问题描述】:

问题

我想使用 C# 以编程方式在 Microsoft Word 中打开一个 RTF 文件。但我不想在这样做时得到“转换文件”对话框。我该怎么做?

代码

我试过这段代码,但它仍然显示 Word 的“转换文件”对话框。

object missing = Missing.Value;
string fileName = @"C:\RtfFile.rtf";
//object encoding = WdSaveFormat.wdFormatRTF;
object encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
object noEncodingDialog = true; // http://msdn.microsoft.com/en-us/library/bb216319(office.12).aspx
word.Documents.Open(ref fullFilePath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref encoding, ref missing, ref missing, ref missing, ref noEncodingDialog, ref missing);

到目前为止我已经尝试过什么

其实有两个子问题。

一方面,我不确定要使用哪种编码。我已经尝试了代码 sn-p 中显示的两个选项并检查了Wikipedia for RTF character encoding

另一方面,object noEncodingDialog = true 似乎不起作用,因为“转换文件”对话框不断弹出(可能是因为编码设置错误)。

有什么想法吗?

版本

  • 字 2003
  • .NET 3.5
  • Visual Studio 2010 Ultimate

完整源代码

以防万一您想尝试一下。

从“COM”选项卡中添加对“Microsoft Word 11.0 Object Library”的引用。

using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Word;

namespace WordAutomationDemo
{
    public class Program
    {
        static void Main(string[] args)
        {
            new Program();
            Console.ReadKey();
        }

        public Program()
        {
            object wordObject = null;
            try
            {
                wordObject = Marshal.GetActiveObject("Word.Application");
            }
            catch (Exception)
            {
                // Do nothing.
            }

            Application word = null;
            bool wordInstanceCreated = false;
            if (wordObject != null)
            {
                word = (Application)wordObject;
            }
            else
            {
                wordInstanceCreated = true;
                word = new Application();
            }

            word.Visible = true;

            object missing = Missing.Value;
            object fullFilePath = @"C:\RtfFile.rtf";
            //object encoding = WdSaveFormat.wdFormatRTF; // http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.saveas(v=vs.80).aspx
            object encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
            object noEncodingDialog = true; // http://msdn.microsoft.com/en-us/library/bb216319(office.12).aspx
            word.Documents.Open(ref fullFilePath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref encoding, ref missing, ref missing, ref missing, ref noEncodingDialog, ref missing);

            //if (wordInstanceCreated)
            //{
            //    word.Quit();
            //}
        }
    }
}

【问题讨论】:

    标签: c# ms-word rtf word-automation


    【解决方案1】:

    根据Open method的文档,第二个参数(ConfirmConversions)可以指定禁用文档转换。将它与 (ReadOnly 参数) 结合起来,它应该可以解决您的问题。

    bool f = false;
    bool t = true;
    word.Documents.Open(ref fullFilePath, ref t, ref f, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref encoding, ref missing, ref missing, ref missing, ref noEncodingDialog, ref missing);
    

    【讨论】:

    • object confirmConversions = false 足以让它工作。我完全错过了那个论点。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多