2011-11-24 51 views
7

Tôi đã gặp sự cố khi phát triển trên MS Visual Web Developer 2008 Express Ed. Phát triển ASP.NET C# trên Windows7 64 bit OS.Microsoft.Office.Interop.Excel không hoạt động trên 64 bit

Tôi đang cố gắng để mở một tài liệu Excel, nhưng nó mang lại cho tôi Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

tôi đã cấu hình xây dựng cho tất cả các bộ vi xử lý (CPU Bất kỳ, x64, x86) nhưng nó không hoạt động. Tôi đã tìm kiếm câu trả lời trên internet nhưng không thể tìm ra cách xử lý nó.

Điều kỳ lạ là cùng một mã hoạt động trên cùng một hệ thống khi tôi phát triển trên Microsoft Visual C# 2010 Express! làm thế nào mà? nó không phải là cùng một dll làm việc phía sau?

Tôi có cần thay đổi tệp COM dll đó để nó hoạt động trên hệ thống x64 không?

Hãy giúp tôi, tôi có thể làm gì?

Mã của tôi là:

using Excel = Microsoft.Office.Interop.Excel; 
xlApp = new Excel.Application(); 
__Log("Openning " + excelFileName); 
xlWorkBook = xlApp.Workbooks.Open(excelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2); 
+0

Tôi không hoàn toàn chắc chắn điều này willl giải quyết vấn đề của bạn, nhưng nếu bạn có một 32-bit COM DLL, bạn có thể cần phải sử dụng một build x86 của dự án của bạn ngay cả khi bạn đang chạy trên Windows 64 bit. – Andrew

+0

Tôi nghĩ bạn đã có ý tưởng đúng @Andrew. Nếu nó là 32bit Excel, 64bit .net sẽ không muốn làm việc với nó. Xây dựng nó như x86 và nó sẽ hoạt động. –

+0

Đã thử điều đó .. nhưng điều tương tự cũng xảy ra, tôi không hiểu tại sao vấn đề này không xảy ra trong Visual C# và chỉ trong nhà phát triển Web – Bush

Trả lời

19

Sau khi đào internet tôi phát hiện ra rằng có một lỗi trong Microsoft Interop với các đối tượng COM (ít nhất là với trường hợp của tôi đó là MS Excel 2010).

Lỗi này kiểm tra xem bản địa hóa của bạn (C# hoặc VB code) có phù hợp với bản địa hóa MS Excel mà bạn đã cài đặt trước đó hay không và nếu nó không cho biết thư viện Microsoft.Office.Interop cũ hoặc không hợp lệ.

nội địa hóa chủ đề của bạn có nguồn gốc từ khu vực thiết lập máy tính của bạn (từ bảng điều khiển -> Regional and Language)

Sau đó, có hai lựa chọn để giải quyết vấn đề này:

  1. Để thay đổi chủ đề của bạn nội địa hóa (bằng code)
  2. Cài đặt gói ngôn ngữ cho Office của bạn

Các giải pháp đầu tiên đi như thế này:

using System.Threading;  // For setting the Localization of the thread to fit 
using System.Globalization; // the of the MS Excel localization, because of the MS bug 

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
excelFileName = System.IO.Path.Combine(excelPath, "Ziperty Buy Model for Web 11_11_2011.xlsm"); 

Hy vọng nó sẽ giúp :) gr8 ngày

+0

... để biết thêm thông tin, mục nhập KB tương ứng: http://support.microsoft. com/default.aspx? scid = kb; vi-us; 320369 – Otiel

+1

@Otiel: KB dường như nói lỗi này áp dụng cho VS 2005 và Excel 2007 (và các phiên bản cũ hơn). Mô tả có vẻ phù hợp nhưng có thể là lỗi không liên quan. –

Các vấn đề liên quan