SaveAs2 для Word 2010 не работает с клиентским ПК с Word 2007 - PullRequest
5 голосов
/ 29 марта 2012

Я разработал приложение WinForm для VB.Net (VS2010) с установленным Office 2010 Professional и 64-разрядной платформой Windows 7. Программа открывает документ в формате .doc и .rtf и пытается сохранить его в формате htm. Я использую следующие команды:

Dim sFilePath as String = "C: \ ABC \ file.doc"

        Dim oApp As New Microsoft.Office.Interop.Word.Application
        Dim oDoc As New Microsoft.Office.Interop.Word.Document
        Dim sTempFileName As String = System.IO.Path.GetTempFileName()
        oDoc = oApp.Documents.Open(sFilePath)
        oApp.Visible = False
        oDoc = oApp.ActiveDocument
        oDoc.SaveAs2(sTempFileName, FileFormat:=WdSaveFormat.wdFormatHTML,CompatibilityMode:=Microsoft.Office.Interop.Word.WdCompatibilityMode.wdWord2007)
        oDoc.Close()
        oApp.Quit()
        oDoc = Nothing
        oApp = Nothing

Все идет хорошо с разработкой и запуском на ПК разработчика, но когда я публикую его для автономной установки и разверну на клиентском ПК с Windows XP с Office 2007, он выдаст ошибку в строке oDoc.SaveAs2 и произойдет сбой программы. Я достаточно гуглил, но не смог найти решение. Кто-нибудь, пожалуйста, помогите мне как можно скорее

1 Ответ

3 голосов
/ 29 марта 2012

Из MSDN

SaveAs2
Этот метод отображается в IntelliSense в проектах Word 2007, предназначенных для .NET Framework 4. Однако это свойство не может бытьиспользуется в проектах Word 2007

Кстати, если вы ищете на этом сайте, вы найдете ответ по вашей проблеме здесь

Вы можете проверить версию текущего Wordустановлен на ПК пользователя с помощью этого кода:

string v = _myWordApp.Version;
switch(v)
{
    case "7.0":
    case "8.0":
    case "9.0":
    case "10.0":
    _myWordDoc.SaveAs2000(ref _documentFile, ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing);
      break; 
    case "11.0":
    case "12.0"
    _myWordDoc.SaveAs(ref _documentFile, ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing, ref _nothing,
        ref _nothing, ref _nothing, ref _nothing, ref _nothing);
    case "14.0"
    _myWordDoc.SaveAs2(ref _documentFile, ref WdSaveFormat.wdFormatHTML, 
                ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing, ref _nothing, 
        ref _nothing, ref _nothing, ref _nothing, ref _nothing,
        ref _nothing, ref _nothing, ref _nothing, 
                ref Microsoft.Office.Interop.Word.WdCompatibilityMode.wdWord2007);
      break;
    default:
      errorText = "Not able to get Word Version"
      break;
} 

Извините за код C #, но его легко перевести.

...