2014-01-15 47 views
0

我正在修改MFC應用程序以將DOCX文件轉換爲RTF,因此可以在自動化Word 2003上使用它們。爲此,我使用由Office 2007兼容包安裝的文本轉換器「Wordcnvpxy.cnv」。 我已閱讀「外部文本文件轉換器SDK」(可獲得here),並瀏覽提供的示例以瞭解如何調用完全符合我需要的函數。 所以,我有Office Word - 如何在C++中調用ForeignToRtf32?

  • 函數簽名:

    typedef long (PASCAL *PFN_RTF)(long, long); 
    short ForeignToRtf32(HANDLE ghszFile, Istorage* pstgForeign, HANDLE ghBuff, HANDLE ghszClass, HANDLE ghszSubset, PFN_RTF lpfnOut); 
    
  • 含有DOCX文件的名稱(其對應於RtfToForeign32的第一個參數)的CString可變

有了這個,作爲一個C++新手,我有幾個問題:

  • 我不明白如何從CString的HANDLE(我讀過就可以了衆多的網頁沒有找到一個好的解決方案)。我不能使用「clr」,因此操作符^對我來說不是一個選項,無論我嘗試什麼,返回值總是爲「-1」(表示該函數無法打開輸入文件)。
  • 我只需要參數1(文件名),3(包含RTF輸出的緩衝區)和6(轉換器使用的RTF塊)。其他參數將爲NULL。那麼我怎樣才能將文件緩衝區通過的句柄保存到ghbuff ghbuff

有關信息,強制調用InitConverter32UninitConverter做工精細。

回答

0

好的,所以我終於解決了我的問題。總結起來,我的問題是:「如何在自動化Word 2003應用程序上處理DOCX文檔」,並且發現比使用Converter SDK更簡單的解決方案。

我必須做什麼來獲得成功的轉化率(從同一個問題,我問在MSDN複製/粘貼):

  1. 檢測,如果我的文檔是DOCX文檔(擴展名是不相關的 ,我需要檢查文件簽名)
  2. 獲取對應的Word 2007轉換器(當然, 兼容包是必需的)
  3. 與FileConverter的OpenFormat打開文件作爲一個參數FileConverter對象 「Documents.O筆「的方法。

下面是代碼的一些摘錄:

OpenDoc(CString inFileName, BOOL tryAgain) { 

m_oDoc = NULL; 
FileConverter fc = NULL; 

// isDocxFile checks the file signature 
BOOL isDocX = isDocxFile(inFileName); 

FileConverters fcList = m_oWordApp.GetFileConverters(); 

if (fcList.GetCount() > 1) { 

    // Beginning the loop on "0" won't work. The fcList starts at 1. 
    for (long i=1; i < fcList.GetCount() + 1; i++) { 
     FileConverter fcTemp = fcList.Item(COleVariant((long) i)); 
     if (fcTemp.GetClassName() == "Word12") { 
      fc = fcTemp; 
     } 
    } 
} 
    if (isDocX) { 
     m_oDoc = m_oDocs.Open( COleVariant(inFileName), //FileName 
          vFalse,      //ConfirmConversions 
          vTrue,      //ReadOnly 
          vFalse,      //AddToRecentFiles 
          vOpt,      //PasswordDocument 
          vOpt,      //PasswordTemplate 
          vFalse,      //Revert 
          vOpt,      //WritePasswordDocument 
          vOpt,      //WritePasswordTemplate 
          COleVariant(fc.GetOpenFormat()),   //Format 
          vOpt,      //Encoding 
          vOpt);      //Visible 
    } 
    else 
    { 
     m_oDoc = m_oDocs.Open( COleVariant(inFileName), //FileName 
          vFalse,      //ConfirmConversions 
          vTrue,      //ReadOnly 
          vFalse,      //AddToRecentFiles 
          vOpt,      //PasswordDocument 
          vOpt,      //PasswordTemplate 
          vFalse,      //Revert 
          vOpt,      //WritePasswordDocument 
          vOpt,      //WritePasswordTemplate 
          vOpt,      //Format 
          vOpt,      //Encoding 
          vOpt);      //Visible 
    } 
} 

有了這一切後,我的文檔可以被正確地呈現,並保存爲RTF,如果需要的話。

相關問題