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