2010-02-04 22 views
10

Sau khi phát triển bằng cách sử dụng Excel Interop với .Net trong một thời gian, tôi đã trở nên ngày càng khó chịu với bao nhiêu "điều kỳ lạ" xảy ra - như thế này câu hỏi tôi đã đăng trước đó - My Problem.
Tôi đánh giá cao đây không phải là một câu hỏi trực tiếp và nhiều hơn nữa về sự hợp tác kinh nghiệm, nhưng tôi nghĩ rằng sẽ hữu ích nếu tìm ra những phiền toái lớn nhất/những điều kỳ lạ mà họ đã có và cách họ vượt qua chúng.
Bằng cách đó tôi có thể tìm hiểu những vấn đề tôi có thể chạy vào trong tương lai :)Điều gây phiền nhiễu/kỳ lạ nhất đã xảy ra với bạn bằng cách sử dụng Excel Interop

Cảm ơn

+0

+1, thoải mái câu hỏi; Tôi sẽ gửi một cái gì đó sớm –

Trả lời

6

Các tính năng khó chịu nhất của Excel interop đối với tôi là mỗi khi bạn làm bất cứ điều gì nó tạo ra đối tượng COM đằng sau hậu trường, nhưng tất cả những điều này cần phải xử lý nếu không Excel sẽ không đóng khi bạn gọi Close(). Và nếu bạn bỏ lỡ một trong những điều thường khó để tìm ra nơi.

May mắn là tôi tìm thấy số này thread ở đây gợi ý một số cách để giải quyết vấn đề.

+0

Bạn cũng có thể muốn đọc chủ đề này: http://stackoverflow.com/questions/2191489/releasing-temporary-com-objects – Henrik

2

Bạn sẽ nhận được một Interop khác được biên dịch trên máy có phiên bản MS Office khác.

Điều này về cơ bản có nghĩa là một máy bổ sung (vật lý hoặc ảo) và giấy phép Visual Studio, Windows và MS Office bổ sung để phát triển cho phiên bản bổ sung.

Khi triển khai phiên bản cho khách hàng, tôi phải lưu trữ hình ảnh máy ảo để biên dịch phiên bản đó, vì tôi không thể đảm bảo tôi sẽ sử dụng cùng một phiên bản MS Office trên máy phát triển của mình.

2

Lưu trữ bộ nhớ vì có nhiều phiên bản mở khác nhau của ứng dụng Office.

Lập trình cẩn thận có thể sắp xếp, nhưng lỗi nội bộ trong ứng dụng có thể làm hỏng giả định của bạn.

+0

Vâng, tôi thấy điều này gây phiền toái. Tôi đã có điều này trên một số lần xuất hiện khi viết ứng dụng và gỡ lỗi (vì vậy không phải lúc nào cũng thoát khỏi ứng dụng trong trang viên đúng, do đó các phương thức vứt bỏ đúng được gọi) và có quá trình ghost. PSKill.exe là rất hữu ích trong những trường hợp này. – Ben

0

Điều khó chịu nhất đối với tôi là bạn nhận được các lỗi/ngoại lệ/sự cố dường như ngẫu nhiên.

Ví dụ, đôi khi tôi cần chuyển đổi một bộ lớn hàng nghìn sổ làm việc giữa các định dạng (xls/xlsx) từ ứng dụng bảng điều khiển C#. Excel hiếm khi xử lý tất cả các sổ làm việc này trong một lần truyền mà không có lỗi. Chạy nhiều lần gây ra sự cố trên các tệp khác nhau. Vì vậy, nếu a.xls và b.xls nằm trong tập hợp các tệp của tôi, Excel có thể không thành công trên a.xls trên thẻ đầu tiên và b.xls trên thẻ thứ hai.

Máy có dung lượng bộ nhớ/không gian đĩa nhiều hơn nhu cầu của ứng dụng. Ứng dụng này là đơn luồng, do đó, không có vấn đề về nhiều phiên bản Excel tạo ra sự tàn phá.

tôi đã quan sát hành vi này với Excel 2003 và với Excel 2007.

tôi cuối cùng sửa đổi ứng dụng của tôi để giải thích cho thực tế này, và theo dõi trong đó workbook đã được chuyển đổi thành công để vượt qua 2 có thể dọn dẹp đống lộn xộn còn lại bởi đèo đầu tiên.

+0

Các thông báo lỗi là một tiêu chuẩn mã hóa của Microsofts vô nghĩa và hoàn toàn trái ngược với các thông báo lỗi. Từ "Nguyên tắc tương tác trải nghiệm người dùng Microsoft" của họ - "Thông báo lỗi hiệu quả thông báo cho người dùng rằng đã xảy ra sự cố, giải thích lý do xảy ra và cung cấp giải pháp để người dùng có thể khắc phục sự cố". – Ben

+0

@Ben thử lỗi SSIS Excel giống như phép lạ so với lỗi khó hiểu của SSIS :) –

0

Việc thiếu hỗ trợ cho tự động hóa ...

Thực tế là bạn không thể chạy Excel trong môi trường tự động hoặc không tương tác ví dụ trên máy chủ. Nó có thể được thực hiện, nhưng không đáng tin cậy và không có mà không hack các hệ thống, mà thường là không khả thi cho môi trường sản phẩm. Nhưng điều này không giới hạn trong Excel.

Để biết thêm thông tin, hãy xem here. Tôi đã thực hiện một nghiên cứu gần đây về một số lựa chọn thay thế mà bạn có thể tìm thấy tại đây: Reading Excel Files as a Server Process

Điều này đã dẫn đến vô số vấn đề cho tôi và người khác, và tôi đã đọc nhiều bài đăng trên Stackoverflow về các vấn đề liên quan đến việc sử dụng Excel Một máy chủ. Nó thực sự không có giá trị phức tạp của đi xuống tuyến đường này, đặc biệt là kể từ Vista và ở trên chỉ đơn giản là không làm việc với Office 2k7 thông qua tự động hóa.

2

MOST lạ là thông số tùy chọn trong tất cả các phương thức Office. Đối với tôi là lập trình viên C# Missing.Value là như tất nhiên.

ví dụ SaveAs phương pháp mất 12 đối số và chỉ một trong số họ yêu cầu và bạn đã kết thúc với mã như thế

result.SaveAs('file',Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value) 

Cũng chữ ký phụ thuộc vào phiên bản văn phòng interop, mỗi phiên bản chính Excel cho biết thêm một số thông số để chữ ký và phá hủy hoàn toàn mã của bạn.

và cũng là cấu trúc không sử dụng được.
Một đề xuất - sử dụng VB.NET cho văn phòng interop - đó là công cụ thích hợp cho một điều như vậy, hoặc chờ đợi cho C# 4.0

0

1 - Thực tế là để ghi vào một trang tính từ chủ đề khác, bạn phải thực hiện IMessageFilter và thậm chí với điều đó, bạn vẫn phải whack it with a hammer

2 - Như Mark Byers nêu trên, "one dot rule" ... thở dài ...

3 - và tất nhiên, điều đó không có nơi rõ ràng là bất kỳ trong số này được gắn cờ vì vậy thay vào đó chúng tôi phải tìm kiếm các góc tối nhất của web, hy vọng sẽ vấp ngã một số lý do lý do ...

(Andrew Whitechapel đã tuy nhiên vui lòng viết lots of extremely helpful articles - cảm ơn, Andrew, nó chỉ là một điều đáng tiếc bạn đã phải ...)

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