Tôi đang làm việc trên một ứng dụng có thể nhập dữ liệu từ nhiều định dạng khác nhau. Tôi muốn bao gồm CSV và các loại tệp phẳng khác (dễ) cũng như XLS và XLSX.
Dường như tùy chọn tốt nhất của tôi là sử dụng Interop.Excel mà tôi hiểu chỉ khả dụng nếu Excel được cài đặt.
Có cách nào để kiểm tra xem Interop.Excel có sẵn và cho người dùng biết rằng Excel phải được cài đặt để nhập từ XLS/XLSX không?Phát hiện Microsoft.Office.Interop.Excel Sẵn có
Trả lời
Microsoft.Office.Interop.Excel
là Office Primary Interop Assembly mà bạn có thể gửi cùng với ứng dụng của mình cho dù khách hàng có cài đặt Office hay không. Nó sẽ không gây hại gì cho đến khi bạn bắt đầu sử dụng nó. Vì vậy, trước khi sử dụng nó, bạn có thể look at the registry để xem Office có được cài đặt hay không.
Nếu bạn muốn hỗ trợ tệp Microsoft Excel gốc và không muốn phụ thuộc vào Microsoft Excel, hãy xem xét OpenXML. Thao tác này sẽ chỉ hoạt động với các tệp được định dạng Excel XML mới hơn. Nếu nhu cầu của bạn rất đơn giản và bạn chỉ cần đọc dữ liệu từ tệp Excel đã được định dạng cũ hoặc tệp CSV, bạn có thể sử dụng nhà cung cấp Ace và/hoặc nhà cung cấp Microsoft Jet OLE DB 4.0
OpenXML cho phép bạn đọc/ghi vào các tệp Excel được định dạng XML mới. Có một số luồng trên StackOverflow với nhiều thông tin hơn về cách sử dụng OpenXML đáng để kiểm tra.
Điều này không giải quyết được câu hỏi gốc. Đề xuất của bạn stil đòi hỏi một sự phụ thuộc bên ngoài mà cuối cùng bạn vẫn sẽ cần phải kiểm tra ... – Kris
Những gì phụ thuộc bên ngoài? Anh ta sẽ cần tham khảo assembly Document.OpenXML từ dự án của mình và có thể triển khai nó với ứng dụng của mình. Người dùng cuối sẽ không cần phải cài đặt Excel. Tương tự như vậy, nhà cung cấp Microsoft Jet OLEDB 4.0 hiện diện với các phiên bản mới hơn của hệ điều hành Windows và có thể được ứng dụng của anh thừa hưởng để đọc các bảng tính định dạng cũ hơn không được hỗ trợ bởi các tệp CSV và OpenXML nếu cần. – codechurn
@ Nghệ thuật: Câu hỏi là về việc phát hiện một hội đồng. Không phải về việc bao gồm nó như là một điều kiện tiên quyết ... Giải pháp của bạn cũng giống như vấn đề ban đầu của anh ấy. Người dùng cuối thực sự sẽ không cần phải cài đặt Excel nhưng OpenOffice hoặc một cái gì đó thay thế ... – Kris
này có thể làm việc trong các tính chất của dự án của bạn:
http://s11.photobucket.com/albums/a199/markawil/?action=view¤t=Untitled.png
Bạn có thể cố gắng sử dụng các khái niệm trình bày chi tiết ở đây:
How to detect .NET 2.0 vs. .NET 4.0 assemblies, and x86 vs. x64 vs. AnyCPU
Nhưng cũng:
How to detect if another assembly is available to my application or not
Kiểm tra sổ đăng ký có vẻ lạ đối với tôi, nhưng nếu đó là cách nó thường được thực hiện, tôi cho rằng tôi sẽ làm như vậy. – yakatz
Câu trả lời này như thế nào? Kiểm tra nếu văn phòng được cài đặt sẽ không nhất thiết có nghĩa là các thành phần interop cũng được cài đặt. Câu hỏi là wheter hoặc không phải là hội đồng interop có thể được phát hiện và không làm thế nào để thêm chúng vào prereqs cài đặt. Hội đồng có thể được phát hiện, sử dụng sự phản chiếu. – Kris