2012-12-24 17 views
21

Tôi cố gắng để làm theo hướng dẫn How to open an Excel file in C#, tức là bổ sung thêm một tài liệu tham khảo trên Com tab để Microsoft Office 14.0 Object Library và cố gắng để biên dịch mã:Microsoft.Office.Interop.Excel.ApplicationClass không có constructor định nghĩa

using Excel = Microsoft.Office.Interop.Excel; 
//... 
Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 

xlApp = new Excel.ApplicationClass();//error here 
//... 

và phải đối mặt với một biên dịch lỗi thời gian, nói rằng

Không có hàm tạo nào được định nghĩa cho Loại Microsoft.Office.Interop.Excel.ApplicationClass.

Tôi đang thiếu gì?

Trả lời

38

Hãy thử điều này:

Excel._Application xlApp = new Excel.Application(); 
+0

Đó là nó. Cảm ơn bạn rất nhiều – horgh

+0

Vâng, Office 14 + VS 2010 đã làm việc với .NET 3.5 và ApplicationClass. Bây giờ với VS 2012, Office 14 chỉ được nhận dạng bằng .NET 4 và tôi gặp lỗi tương tự mà bạn đang gặp phải. – Pedro77

3

Sử dụng sau đây để mở nó:

xlApp = CreateObject("Excel.Application"); 

CreateObject tạo và trả về một tham chiếu đến một đối tượng COM. Tài liệu có thể được tìm thấy ở đây:

http://msdn.microsoft.com/en-us/library/7t9k08y5%28v=vs.71%29.aspx

+0

'CreateObject' là gì? – horgh

+0

Chỉ cần thêm một tham chiếu đến tài liệu. Tôi đã không thử một phương pháp tương tự như một trong những bạn đã cố gắng, do đó, không chắc chắn nếu nó hoạt động hay không, nhưng tôi chỉ cần kiểm tra một dự án VB.NET gần đây tôi đã viết rằng công trình và đó là cách tôi đã đi về nó. – PeterJ

+0

+1: Vlad Spreys đưa ra câu trả lời tôi cần. Tuy nhiên cảm ơn bạn. – horgh

3

Nếu bạn đang sử dụng C# 4.0 (NET 4) bạn có thể đi với cú pháp dễ dàng hơn nhiều

var app = new Application(); 

var workbook = app.Workbooks.Open("test.xls"); 

Liên quan đến var: nó làm cho bạn dễ dàng hơn công việc cuz C# quyết định loại để chọn và đi cho. Nếu bạn quan tâm, bạn có thể đọc về độngvarkiểu.

Hãy nhớ rằng interop trước C# 4.0 hoàn toàn là một hiện tượng khác và cách C# được sử dụng để xử lý các đối tượng Microsoft.

chỉ để bạn biết sự khác biệt, đây là cách bạn nên mã hóa nó trước C# 4.0 để nói với tài liệu Word.

object fileName = @"WordFile.docx"; 
object missing = System.Reflection.Missing.Value; 
object readOnly = true; 
var doc = wordApp.Documents.Open(ref fileName, ref missing, ref readOnly, 
ref missing, ref missing, ref missing, ref missing, ref missing, 
ref missing, ref missing, ref missing); 
+1

cũng mô tả lý do tại sao nên sử dụng ** Application() ** thay vì ** ApplicationClass() ** tại đây [link] (http: //blogs.msdn. com/b/ptorr/archive/2004/02/05/67872.aspx) – Mehrad