我正在尝试从C#中的Excel访问数据。理想情况下,我想将数据放入列表或系列集合中。我正在使用本教程 - http://www.aspsnippets.com/Articles/Read-Excel-file-using-OLEDB-Data-Provider-in-C-Net.aspx。
这非常有帮助,但我认为他错过了数据适配器部分。这是我按照他的例子得到的代码。
string connectionString = null;
connectionString = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = P:\\Visual Studio 2012\\Projects\\SmartSheetAPI\\SmartSheetAPI\\bin\\Debug\\OUTPUT.xls; Extended Properties = 'excel 12.0 Xml; HDR=YES; IMEX=1;';";
//Establish Connection
string dataSource = "P:\\Visual Studio 2012\\Projects\\SmartSheetAPI\\SmartSheetAPI\\bin\\Debug\\OUTPUT.xls;";
string excelConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + dataSource + " Extended Properties='Excel 8.0; HDR=Yes'";
OleDbConnection connExcel = new OleDbConnection(connectionString);
OleDbCommand cmdExcel = new OleDbCommand();
cmdExcel.Connection = connExcel;
//Accessing Sheets
connExcel.Open();
DataTable dtExcelSchema;
dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
connExcel.Close();
//access excel Sheets (tables in database)
DataSet dataset = new DataSet();
string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
da.SelectCommand = cmdExcel;
da.Fill(dataset);
connExcel.Close();
如果查看底部三行,您会注意到他使用da.SelectCommand和da.Fill来填充数据集。但我认为这需要一个数据适配器,而他在他的例子中没有这个。我尝试过创建一个dataadapter,如下所示:
SqlDataAdapter dataadapter = new SqlDataAdapter();
但我得到一个错误说明:无法将类型'System.Data.OleDb.OleDbCommand'隐式转换为System.Data.SqlClient.SqlCommand'。
我知道它正在使用select语句。有人可以帮助我我基本上只是希望能够访问我在select语句中获得的信息。
答案 0 :(得分:2)
使用Oledb连接访问excel数据总是令人头疼。您可以尝试使用第三方控件,例如Aspose。使用非常简单。在添加控件的引用后,您可以尝试以下代码你的项目。
//Creating a file stream containing the Excel file to be opened
FileStream fstream = new FileStream("C:\\book1.xls", FileMode.Open);
//Instantiating a Workbook object
//Opening the Excel file through the file stream
Workbook workbook = new Workbook(fstream);
//Accessing the first worksheet in the Excel file
Worksheet worksheet = workbook.Worksheets[0];
//Exporting the contents of 7 rows and 2 columns starting from 1st cell to DataTable
DataTable dataTable = worksheet.Cells.ExportDataTable(0, 0, 7, 2, true);
//Binding the DataTable with DataGrid
dataGrid1.DataSource = dataTable;
//Closing the file stream to free all resources
fstream.Close();
答案 1 :(得分:1)
您需要OleDBDataAdapter
,而不是SqlDataAdapter
。所以,这样做:
OleDBDataAdapter da = new OleDBDataAdapter(cmdExcel);
da.Fill(dataset);
Excel是一个OLEDB数据源,因此您应该使用的类通常会以OleDb
为前缀,就像数据库连接和操作的前缀为Sql
一样。