2015-04-25 12 views
9

Tôi đã sử dụng thư viện Microsoft.Office.Interop.Excel để mở Excel, làm mới một số truy vấn và lưu. Vấn đề tôi đang chạy là điều này sẽ chỉ hoạt động nếu mỗi máy tính có cùng một thư viện Excel như được chọn trong dự án được cài đặt trên PC.Cách Nhanh nhất Để Mở Excel

Tôi thấy rằng NPOI có thể http://npoi.codeplex.com/documentation đọc và ghi dữ liệu vào Excel, nhưng còn một nhiệm vụ đơn giản hơn về mở/làm mới/lưu, NPOI có thể xử lý việc này không?

Nếu bạn sử dụng cú pháp này có vẻ như tôi có thể mở tệp Excel của tôi, nhưng còn về các truy vấn làm mới và lưu?

using NPOI.HSSF.UserModel; 
using NPOI.SS.UserModel; 

private void button1_Click(object sender, EventArgs e) 
{ 
    HSSFWorkbook hssfwb; 
    using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read)) 
    { 
     hssfwb= new HSSFWorkbook(file); 
    } 
+0

tôi không thể nói chuyện với NPOI, nhưng một số phiên bản Office độc ​​lập có thể đạt được bằng cách nhúng các loại interop COM vào lắp ráp của bạn. Để biết chi tiết, hãy xem https://msdn.microsoft.com/en-us/library/ee317478.aspx. – cokeman19

Trả lời

0

Bằng 'làm mới truy vấn' Tôi giả sử bạn có nghĩa là tệp Excel được liên kết với một số nguồn dữ liệu và bạn muốn cập nhật nội dung của tệp Excel với dữ liệu hiện tại từ nguồn dữ liệu đó.

Nếu bạn muốn điều đó là "tự động" (nghĩa là bạn không tự viết mã để tự cập nhật), thì tôi nghĩ Excel là cách duy nhất để thực hiện. Tôi khá chắc chắn rằng một cái gì đó như NPOI (hoặc EPPlus, hoặc ClosedXML) sẽ không làm điều đó. Tuy nhiên, bạn có thể sử dụng các thư viện đó để tự chèn các giá trị vào bảng tính, nếu bạn có thể dễ dàng truy vấn nguồn dữ liệu.

Vì bạn đang nói về nhiều máy tính, tôi cho rằng bạn đang tạo một trình bổ sung hoặc EXE được triển khai cho nhiều người dùng khác nhau. Trong trường hợp đó, bạn có thể muốn xây dựng dựa trên phiên bản Excel được hỗ trợ thấp nhất mà bạn có thể. Nói cách khác, bạn muốn (nói) Excel 2003 hoặc 2007 trên máy phát triển của bạn. (Bạn sẽ làm cho cuộc sống của bạn dễ dàng hơn nhiều nếu bạn có thể thả hỗ trợ cho năm 2003).

Nếu bạn xây dựng dựa trên Excel 200x, thì nó sẽ chạy tốt trên các phiên bản sau. Đó không phải là trường hợp theo cách khác. Lưu ý rằng bạn không muốn có nhiều phiên bản trên máy phát triển của mình.

+0

Với tham chiếu COM, bạn chỉ có thể có 1 tham chiếu được cài đặt tại một thời điểm. Vì vậy, tôi đã không thể tìm thấy một cách để xây dựng cho năm 2003 và có nó mở 2007 hoặc ngược lại. Do đó tôi nhìn vào một trong các .dll khác có thể. – MasterOfStupidQuestions

+0

Có, nhưng các thành phần COM có xu hướng tương thích ngược, do đó nếu bạn đã tham chiếu phiên bản 1.x và người dùng có phiên bản 2.x, thì nó vẫn hoạt động. –

+0

Không theo kinh nghiệm của tôi. Ví dụ, nếu tôi sử dụng Microsoft Excel 12.0 đối tượng thư viện và tạo ra Excel như vậy, nếu người dùng không có Excel 2007 được cài đặt nó sẽ lỗi cú pháp mỗi lần. công cộng tĩnh Excel.Application oXL; oXL = new Excel.Application(); oXL.Visible = true; oXL.DisplayAlerts = false; oXL.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityLow; – MasterOfStupidQuestions

1

Bạn có thể sử dụng OLEDB bộ chuyển đổi cũng

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + excelfilepath+ "; Extended Properties = \"Excel 8.0;HDR=NO;IMEX=1\";"); /*for office 2007 connection*/ 
conn.Open(); 
    string strQuery = "SELECT * FROM [" + Table + "]"; 
    System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn); 
System.Data.DataTable ExcelToDataTable = new System.Data.DataTable(); 
adapter.Fill(ExcelToDataTable); 
Các vấn đề liên quan