如何在C#中访问Excel数据

时间:2014-12-08 04:34:48

标签: c# sql excel

我正在尝试从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语句中获得的信息。

2 个答案:

答案 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一样。

Documentation