none
產生excel報表在Workbooks.Open會出現問題 RRS feed

  • 問題

  • 在VB2010撰寫產生excel報表在Workbooks.Open會出現問題

    而且只有當用戶端是安裝 Excel 2013 會出現問題,

    安裝 Excel 2000/2003/2007 的用戶端都沒問題, Excel 2010 沒試過

    錯誤訊息如下,請問有解決辦法嗎?  謝謝

    以下是excel元件早期連結的程式發生的錯誤
    System.Runtime.InteropServices.COMException (0x800A03EC): 發生例外狀況於 HRESULT: 0x800A03EC
    於Excel.Workbooks.Open(String .......

    以下是excel元件晚期連結的程式發生的錯誤
    System.Runtime.InteropServices.COMException (0x800A03EC): 無法取得類別 Workbooks 的 Open 屬性
    於 Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args,
    String[] paramnames, Boolean[] CopyBack)
    於 Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type,
    String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)

    2020/2/2 補充:

    測試程式其實很簡單,不是用VSTO,是直接參考excel2000的三個dll元件,

    Interop.Excel.dll、Interop.Office.dll、Interop.VBIDE.dll,以下是早期連結,

    晚期連結只是把變數類型改成 object,先謝謝大家的回覆

     Dim xlapp As Excel.Application
     Dim xlbook As Excel.Workbook
     Dim xlbooks As Excel.Workbooks

      xlapp = CreateObject("Excel.Application")
      xlapp.DisplayAlerts = False  
      xlbooks = xlapp.Workbooks
      xlbook = xlbooks.Open("d:/test/test.xls")  

    Tommy1231


    • 已編輯 Tommy1231 2020年2月2日 上午 06:09
    2020年1月22日 上午 04:25

所有回覆

  • 具體指令是甚麼可以貼出來給大家測試嗎?

    用 VSTO 本身會綁版本,如果用延後連結,應用程式本身不能加入 VSTO 參照或程式庫。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2020年1月30日 下午 01:02
  • 具體指令是甚麼可以貼出來給大家測試嗎?

    用 VSTO 本身會綁版本,如果用延後連結,應用程式本身不能加入 VSTO 參照或程式庫。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    測試程式其實很簡單,不是用VSTO,是直接參考excel2000的三個dll元件,

    Interop.Excel.dll、Interop.Office.dll、Interop.VBIDE.dll,以下是早期連結,

    晚期連結只是把變數類型改成 object,先謝謝大家的回覆

     Dim xlapp As Excel.Application
     Dim xlbook As Excel.Workbook
     Dim xlbooks As Excel.Workbooks

      xlapp = CreateObject("Excel.Application")
      xlapp.DisplayAlerts = False  
      xlbooks = xlapp.Workbooks
      xlbook = xlbooks.Open("d:/test/test.xls")  


    Tommy1231

    2020年2月2日 上午 06:08
  • 使用延後連結時,應把參照的 VSTO 程式庫移除,若沒移除,啟動時仍需對應版本的 .dll 進行載入。

    你可以將目前的 .vbproj 跟 .sln 複製一份,利用原始碼共用方式處理,在複製那份的專案中設定移除參照,則開發除錯時,用原先的解決方案,編譯散佈用的執行檔可使用後面複製編輯這份。

    修改 .sln / .vbproj 可參考這篇:

    https://tlcheng.wordpress.com/?s=vbproj


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2020年2月2日 下午 02:38
  • 使用延後連結時,應把參照的 VSTO 程式庫移除,若沒移除,啟動時仍需對應版本的 .dll 進行載入。

    你可以將目前的 .vbproj 跟 .sln 複製一份,利用原始碼共用方式處理,在複製那份的專案中設定移除參照,則開發除錯時,用原先的解決方案,編譯散佈用的執行檔可使用後面複製編輯這份。

    修改 .sln / .vbproj 可參考這篇:

    https://tlcheng.wordpress.com/?s=vbproj


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    感謝指點

    我把那三個dll元件從參考中移除

    並使用前述晚期連結的程式碼編譯後執行

    結果還是如同第一篇的錯誤訊息


    Tommy1231

    2020年2月2日 下午 05:31
  • 你有試過用新建預設 WinForm 專案建個測試例嗎?

    公司的用 .Net framework 2.0 開發的,從 Office 2003 用到 Office 365 都正常。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2020年2月4日 下午 03:03
  • Automation 不能建立也可能是位元版本造成。

    例如 .Net framework 預設是 any CPU ,你在 Win64 上跑會使用 x64 模式,如果 Office 是 32 位元版本,可能會無法正確建立物件,需要將程式碼強制指定位元版本編譯。


    T.L. Cheng

    2020年2月7日 上午 04:01
  • Automation 不能建立也可能是位元版本造成。

    例如 .Net framework 預設是 any CPU ,你在 Win64 上跑會使用 x64 模式,如果 Office 是 32 位元版本,可能會無法正確建立物件,需要將程式碼強制指定位元版本編譯。


    T.L. Cheng

    我在VB2010的編譯選項是用x86平台

    office2000元件是32位元

    這樣程式碼以及office元件應該都是32位元版本

    client端的 office 2013 是64位元版本

    請問是因為這樣才造成錯誤嗎?

    如果真是因為這樣,那代表client端的 64位元excel 不能向下相容32位元的呼叫端軟體

    我本來以為會跟windows 64位元一樣可以兼容32位元以及64位元的軟體


    Tommy1231



    • 已編輯 Tommy1231 2020年2月19日 下午 12:30
    2020年2月19日 下午 12:00
  • 你有試過用新建預設 WinForm 專案建個測試例嗎?

    公司的用 .Net framework 2.0 開發的,從 Office 2003 用到 Office 365 都正常。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    這個還沒試過

    有在想說會不會是因為client端的 office 2013 是64位元版本?

    而我的程式以及excel dll 元件都是32位元


    Tommy1231


    • 已編輯 Tommy1231 2020年2月19日 下午 12:31
    2020年2月19日 下午 12:11