Как открыть файл RTF с помощью C # без отображения диалогового окна преобразования файла Microsoft Word?

Вопрос

Я хочу программно открыть файл 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);

введите описание изображения здесь

Что я пробовал до сих пор

Собственно, есть два подвопроса.

С одной стороны, я не уверен, какую кодировку использовать. Я попробовал оба варианта, показанные во фрагменте кода, и проверил Википедию для кодировки символов 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();
            //}
        }
    }
}

person Lernkurve    schedule 16.02.2011    source источник


Ответы (1)


Согласно документации 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);
person Steve B    schedule 16.02.2011
comment
object confirmConversions = false было достаточно, чтобы все заработало. Я полностью упустил этот аргумент. Спасибо! - person Lernkurve; 16.02.2011