Helpex - Trao đổi & giúp đỡ Đăng nhập
5

Sau đây Exception được đưa ra nếu tôi cố gắng mở tệp excel trên máy khách:

Exception from HRESULT: 0x800A03EC

Ngoại lệ bên trong: (trống)

Theo dõi ngăn xếp:

   at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
   at (own assembly)

HResult này là một Lỗi rất chung chung, tôi không thể tìm thấy bất kỳ thông tin hữu ích nào về nó.

Thiết lập của tôi:

Dịch vụ WCF chạy bên trong Dịch vụ Windows. Thiết lập giống hệt nhau đang hoạt động trên ba máy khác.

Những điều tôi có thể loại trừ:

  • Con đường sai lầm
  • Tệp không tồn tại
  • Tập tin bị lỗi
  • Tệp được bảo vệ ghi

Những điều tôi đã làm:

  • Đã tạo các thư mục Desktop như được thấy ở đây (Câu trả lời thứ hai) https://social.msdn.microsoft.com/Forums/vstudio/en-US/4d6c383a-94eb-4898-9d22-aa4bb69be25b/
  • Cấp cho Thư mục Màn hình Quyền "Mọi người" hoặc "Jeder" ("Jeder" tương đương với "Mọi người" trong tiếng Đức)
  • Bắt đầu Dịch vụ với Người dùng đang hoạt động
  • Đã thay đổi cấu hình DCOM cho Excel theo lời khuyên của Heidi2 (xem liên kết ở trên)
  • Đã thay đổi từ Office 365 thành Office Professional Plus
  • Ngôn ngữ được đặt thành en-US trong khi cố gắng mở tệp
  • Mở tệp theo cách thủ công được cho là sẽ được mở: không có lỗi / cảnh báo / hộp thoại người dùng từ excel
  • Đã cài đặt tiếng Anh - Mỹ trên máy đích
  • Đã viết một Dịch vụ không WCF khởi động dll thực thi yêu cầu Interop
  • Đã viết một ứng dụng bảng điều khiển khởi động dll thực thi yêu cầu Interop

Một số quan sát:

  • Nếu tôi xóa thư mục Màn hình nền (xem phần "Những việc tôi đã làm" đầu tiên), tôi gặp lỗi như được mô tả và giải quyết tại đây: Microsoft Office Excel không thể truy cập tệp 'c: \ inetpub \ wwwroot \ Timesheet \ App_Data \ Template. xlsx '
  • Excel được mở trong một thời gian ngắn trong trình quản lý tác vụ trong khi dll cố gắng mở tệp excel
  • trong khi tôi đã cài đặt Office 365, Office Click-Once Tasks vẫn phản đối trong Trình quản lý tác vụ, đôi khi đóng băng Ứng dụng. Đó là lý do tại sao tôi chuyển sang Professional Plus
  • Nếu ngôn ngữ hoạt động được đặt thành Anh Mỹ, lỗi này sẽ không xuất hiện nữa; nhưng hình ảnh, được cho là được hiển thị bởi Interop, lại được hiển thị trống

Tôi còn thiếu gì ở đây?

5 hữu ích 0 bình luận 14k xem chia sẻ
4

Xin lỗi - tôi biết đây là câu trả lời gián tiếp, mặc dù tôi khuyên bạn nên làm theo. Cá nhân tôi có những trải nghiệm rất tồi tệ với các dịch vụ Excel Interop (ứng dụng ASP.NET). Như tôi biết, Microsoft không khuyến khích tự động hóa máy chủ Interop .

Ngay cả khi bạn giải quyết được vấn đề này, bạn có thể gặp phải các vấn đề về rò rỉ bộ nhớ, hiệu suất, v.v. Trong dự án trước của tôi, chúng tôi đã nâng cao tính năng tự động hóa tương tác của Excel cho đến khi triển khai. Chúng tôi đã vấp phải rất nhiều vấn đề (các quy trình Interop trong Excel không đóng đúng cách, v.v.) đến mức chúng tôi phải viết lại mọi thứ thành OpenXML.

Nếu có thể, hãy sử dụng định dạng OpenXML mới. Có một thư viện ClosedXML giúp làm việc với rất dễ dàng.

Tại sao OpenXML so với Interop ?:

  1. Hiệu quả (OpenXML nhẹ)

  2. Không có nguy cơ rò rỉ bộ nhớ

  3. Dễ sử dụng

4 hữu ích 1 bình luận chia sẻ
1

Trước khi thử giải pháp này, hãy đảm bảo rằng bạn đã đọc đoạn "Những việc tôi đã làm" từ câu hỏi (và thử những gì áp dụng cho bạn)

Ngoại lệ được ném ra khi mở Tài liệu; trên máy tạo Excels, các tệp được tạo không hợp lệ.

Giải pháp là thay đổi Định dạng của các con số.

Đi tới Cấu hình hệ thống -> Thời gian, Ngôn ngữ và Khu vực -> Ngôn ngữ

Ngoại lệ HResult 0x800a03ec khi cố gắng mở Excel bằng Microsoft.Office.Interop.Excel.Workbooks.Open () Thời gian, Ngôn ngữ và Khu vực -> Ngôn ngữ">

Nhấn vào Siêu liên kết được đánh dấu

Mở Cài đặt nâng cao

Ngoại lệ HResult 0x800a03ec khi cố gắng mở Excel bằng Microsoft.Office.Interop.Excel.Workbooks.Open ()

Thay đổi dấu phân cách thành một điểm "." Ngoại lệ HResult 0x800a03ec khi cố gắng mở Excel bằng Microsoft.Office.Interop.Excel.Workbooks.Open ()

1 hữu ích 0 bình luận chia sẻ
0

Chúng tôi đã chuyển đổi giải pháp Máy khách / Máy chủ của mình từ ngôn ngữ 4GL sang C #, trong đó mã C # được nhúng bên dưới đã hoạt động mà không gặp bất kỳ sự cố nào trước đó và bắt đầu nhận được thông báo lỗi tương tự.

Excel.Application excelApp = new Excel.Application();
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileExcel,
    0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    true, false, 0, true, false, false);

Tôi đã làm theo tất cả các hướng dẫn trong chuỗi này, nhưng vô ích, cho đến khi tôi nhận ra rằng trong trường hợp của chúng tôi ít nhất là fileExcel, chứa đường dẫn đầy đủ với tên của tệp và được định nghĩa là System.String fileExcel có dấu cách ở cuối, ví dụ thay vì "C : \ temp \ MyTest.xls "nó là" C: \ temp \ MyTest.xls [nhiều dấu cách] ". Khi tôi đã thêm Trim()vào fileExcel như bên dưới, tất cả trở lại bình thường. Hy vọng nó sẽ giúp ích cho ai đó trong tương lai.

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileExcel.Trim(),
    0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    true, false, 0, true, false, false);
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ excel wcf windows-services interop , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading