Как открыть файл RTF с C #, не показывая диалоговое окно «Преобразовать файл» Microsoft Word? - PullRequest
1 голос
/ 16 февраля 2011

Вопрос

Я хочу программно открыть файл RTF в Microsoft Word, используя C #.Но я не хочу получать диалог «Преобразовать файл» при этом.Как мне это сделать?

Код

Я пробовал этот фрагмент кода, но он по-прежнему показывает диалог 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);

enter image description here

То, что я пробовал до сих пор

На самом деле есть два подвопроса.

С одной стороны,Я не уверен, какую кодировку использовать.Я попробовал оба варианта, показанные во фрагменте кода, и проверил Википедию для кодировки символов RTF .

С другой стороны, object noEncodingDialog = true, похоже, не работает, так как "Преобразовать файл""Диалоговое окно продолжает появляться (возможно, потому что кодировка установлена ​​неправильно).

Есть идеи?

Версии

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

Полный исходный код

На всякий случай, если вы захотите попробовать его.

Добавить ссылку на «Библиотеку объектов Microsoft Word 11.0» на вкладке «COM».

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();
            //}
        }
    }
}

1 Ответ

3 голосов
/ 16 февраля 2011

Согласно документации метода Open , второй аргумент (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);
...