none
vb.net呼叫office的word元件寫檔的問題 RRS feed

  • 問題

  • 各位好,
    小弟最近用VB.Net寫了一隻程式
    主要是Call Office Word的DLL去讀檔
    然後做一些資料處理後寫回去.

    但是會發生寫檔時並沒有寫回去
    也沒有錯誤訊息發生.
    所以小弟只好先SaveAs到另一個地方, 再SaveAs回原來的地方
    這樣就可以正常寫入,
    不知道是哪邊動作沒有做好, 所以導至這個問題??
    註: 我call acrobat的dll去做, 寫檔也會有一樣問題.

    感謝回應
    2008年7月10日 上午 10:30

解答

  • 這三行改成一行會怎樣?

    Code Snippet

    wddoc.SaveAs("tmp.doc", Word.WdOriginalFormat.wdOriginalDocumentFormat)
    wddoc.SaveAs(filepath, Word.WdOriginalFormat.wdOriginalDocumentFormat)
    System.IO.File.Delete("tmp.doc")     

     

     

    改成:

    Code Snippet

    wddoc.SaveAs(filepath, Word.WdOriginalFormat.wdOriginalDocumentFormat)

     

     

    不要使用 Close 方法來企圖寫入,那個變更自動寫入的判斷旗標對程式變更不作用。
    2008年8月6日 下午 12:02

所有回覆

  • Office 全系列都是 ActiveX EXE ,所以沒有 DLL 給你 call 。若是你指的是 VSTO ,那個是 .Net 封裝介面的類別庫,實際上還是透過 ActiveX EXE 。

     

    寫檔沒寫回去這段讓人看不懂,請明確提供 Open 跟 Save 的呼叫程式碼。

     

    你哪邊動作沒做好,你不列出來別人知道嗎?

     

    Acrobat 是 Adobe 的產品,也有提供 ActiveX EXE ,但沒提供 DLL ,有其他廠商出類似的 DLL ,混在一起寫,根本不知道你在寫甚麼。 

    2008年7月16日 上午 03:26
    版主
  •  璉璉 寫信:

    Office 全系列都是 ActiveX EXE ,所以沒有 DLL 給你 call 。若是你指的是 VSTO ,那個是 .Net 封裝介面的類別庫,實際上還是透過 ActiveX EXE 。

     

    寫檔沒寫回去這段讓人看不懂,請明確提供 Open 跟 Save 的呼叫程式碼。

     

    你哪邊動作沒做好,你不列出來別人知道嗎?

     

    Acrobat 是 Adobe 的產品,也有提供 ActiveX EXE ,但沒提供 DLL ,有其他廠商出類似的 DLL ,混在一起寫,根本不知道你在寫甚麼。 

    嗯, 感謝您的指教.

    語焉不詳的部份先再此跟您道歉, 並附上部份程式碼.

    Code Snippet

     

            Dim wd As Word.Application
            Dim wddoc As Word.Document

            wd = New Word.Application
            wddoc = wd.Documents.Open(FileName:=filepath, _
                  ReadOnly:=False, AddToRecentFiles:=False, Visible:=False)

            '不重要的資料處理Code...

            '..........

            '..........

            

            '原本的做法為下面這行, 但是會發生Close完後, 沒有正確寫入的問題.

            'wddoc.Close(Word.WdSaveOptions.wdSaveChanges, Word.WdOriginalFormat.wdOriginalDocumentFormat)

           

            '目前解決先另存到tmp.doc, 再另存回原本的路徑filepath, 再將tmp.doc砍掉

            wddoc.SaveAs("tmp.doc", Word.WdOriginalFormat.wdOriginalDocumentFormat)
            wddoc.SaveAs(filepath, Word.WdOriginalFormat.wdOriginalDocumentFormat)
            System.IO.File.Delete("tmp.doc")     

            

            wddoc.Close()
            wddoc = Nothing

            wd.Quit()
            wd = Nothing 

     

     

    再請您看一下, 謝謝.
    2008年8月6日 上午 08:01
  • 這三行改成一行會怎樣?

    Code Snippet

    wddoc.SaveAs("tmp.doc", Word.WdOriginalFormat.wdOriginalDocumentFormat)
    wddoc.SaveAs(filepath, Word.WdOriginalFormat.wdOriginalDocumentFormat)
    System.IO.File.Delete("tmp.doc")     

     

     

    改成:

    Code Snippet

    wddoc.SaveAs(filepath, Word.WdOriginalFormat.wdOriginalDocumentFormat)

     

     

    不要使用 Close 方法來企圖寫入,那個變更自動寫入的判斷旗標對程式變更不作用。
    2008年8月6日 下午 12:02