2009-03-13 32 views
8

Tôi cần lấy dữ liệu từ một xls, tôi cũng cần người dùng có thể thay đổi vị trí của tệp. Vì vậy, một OleDbConnection có vẻ như là một khởi đầu tốt, và nó đã được cho đến khi các tế bào sáp nhập đầu tiên.Mở bảng tính Excel 2003 bằng C#. Không thể tìm thấy ISAM có thể cài đặt. Ngoại lệ

này làm việc cho tất cả ngoại trừ các tế bào sáp nhập:

OleDbCommand cmd = new OleDbCommand(); 
cmd.Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:\test.xls;Extended Properties=Excel 8.0;"); 
cmd.CommandText = "SELECT * FROM [Sheet$]"; 
cmd.Connection.Open(); 

tôi thấy rằng điều này sẽ cho phép truy cập vào các tế bào sáp nhập:

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;"); 

Nhưng sau đó tôi nhận được một không thể tìm thấy cài đặt ISAM ngoại lệ trên cmd.conn.open();

Tôi làm theo các lời khuyên ở đây: http://support.microsoft.com/kb/209805

Và ở đây: Error: "Could Not Find Installable ISAM"

Không may mắn.

Tôi đang mở các cách khác để lấy dữ liệu từ các xls. Hoặc thậm chí nếu có một lệnh tôi có thể chạy trên các xls để loại bỏ các tế bào được phép có thể hoạt động.

Trả lời

15

Tôi nghĩ rằng nó chỉ là bởi vì bạn phải gửi kèm theo Properties Extended trong dấu ngoặc kép nếu bạn có nhiều hơn một

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"); 

Hoặc nếu dấu nháy đơn không làm việc (bạn sẽ có được ý tưởng)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";"); 

Mặc dù ví dụ của bạn không hiển thị, lỗi này cũng có thể do khoảng trắng trong đường dẫn tệp gây ra. Trong trường hợp đó bạn sẽ cần phải quấn đường dẫn tập tin trong dấu ngoặc kép là tốt.

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";... 
+0

Ai nghĩ về cú pháp khủng khiếp này? – configurator

+0

Tôi phải thay đổi một chút: OleDbConnection (@ "Nhà cung cấp = Microsoft.Jet.OLEDB.4.0; Nguồn dữ liệu = F: \ test.xls; Thuộc tính mở rộng = 'Excel 8.0; HDR = NO; IMEX = 1 '"); – NitroxDM

+0

Cảm ơn rất nhiều vì câu trả lời này. –

2

Giả sử yêu cầu hệ thống của bạn bao gồm lắp đặt Excel, bạn có thể sử dụng Excel Object Library

Excel.Sheets sheets = m_Excel.Worksheets; 
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1); 
Excel.Range range = worksheet.get_Range("A1", "E1".ToString()); 

, vv

Xem thêm VSTO

-1

là một hoàng bảng tính miễn phí thành phần cho .NET và nên làm mọi thứ bạn muốn cho 32 bit và 64 bit .NET không phụ thuộc vào Excel (hoặc bất kỳ thứ gì khác một .NET 2.0+).

Bạn có thể xem các mẫu ASP.NET trực tiếp here và tải xuống bản dùng thử miễn phí here nếu bạn muốn tự mình thử.

Disclaimer: Tôi sở hữu SpreadsheetGear LLC

1

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

Tôi có vấn đề này. chỉ vì báo giá

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'"; 
Các vấn đề liên quan