用c#读取excel文件

我正在尝试阅读使用C#的一些合并单元格的Excel工作表,如下所示:

Day |1 |2 ------------------------------------ Month|CA |CATTC | CA |CATTC ------------------------------------ 1 |100 |20 | 250 |120 5 |100 |30 | 202 |140 12 |130 |260 | 255 |130 

我的目标是把它存储在一个表中

 Month|CA |CATTC | Day ------------------------------------ 1 |100 |20 | 1 5 |100 |30 | 1 12 |130 |260 | 1 1 |250 |120 | 2 5 |202 |140 | 2 12 |255 |130 | 2 

要阅读它,请尝试一个代码c#

  private void Output_Excel_File( string inputFileLocation) { DataSet ds = Get_Spreadsheet_Data(inputFileLocation, "Dashboard Statistics"); if (ds.Tables.Count > 0) { foreach (DataTable dt in ds.Tables) { int row = 0; foreach (DataRow dr in dt.Rows) { int col = 0; foreach (DataColumn dc in dt.Columns) { //do something col++; } row++; } } } } 

我没有算出如何继续代码。任何帮助将是最感激的。

您可以使用interop,但需要在运行该工具的计算机上安装Excel。

您必须参考Office或Excel,然后使用这些使用。

 using Microsoft.Office.Core; using Excel = Microsoft.Office.Interop.Excel; 

然后你可以读取和写入它。

  Excel.Application xlsApp = new Excel.Application(); Excel._Workbook wrk = xlsApp.Workbooks.Open(@"C:\test.xlsx", 0, true, 5, Missing.Value, Missing.Value, true, Excel.XlPlatform.xlWindows, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); int j=1; while (j < 100) { xlsApp.Cells[j, 1] = j; j = j + 1; } xlsApp.Visible = true; 

或者你可以使用EPPlus。 这是我使用的。 http://epplus.codeplex.com/它是免费的,你不需要在工作站上使用excel&#x3002;

下载它。 引用该DLL。 使用这些使用

 using OfficeOpenXml; using OfficeOpenXml.Style; 

从单元格中读取。

  FileInfo AddressList = new FileInfo("c:\temp\test.xlsx"); using (ExcelPackage package = new ExcelPackage(AddressList)) { // Get the work book in the file ExcelWorkbook workBook = package.Workbook; if (workBook != null) { if (workBook.Worksheets.Count > 0) { // Get the first worksheet //ExcelWorksheet Worksheet = workBook.Worksheets.First(); var worksheet = package.Workbook.Worksheets[1]; if (worksheet.Cells["A1"].Value.ToString() != "Address") { MessageBox.Show("The cell A1 should say Address. Aborting."); return; } // This is a safe way to make sure a null cell will not cause you an error. string callValue = worksheet.Cells["E2"].Value == null ? string.Empty : worksheet.Cells["E2"].Value.ToString(); if (string.IsNullOrEmpty(strTerminal.Trim()) == false) { MessageBox.Show(callValue.ToString()); } } } package.Dispose(); } 

或写信给它,如。

  FileInfo AddressList = new FileInfo("c:\\temp\\test.xlsx"); using (ExcelPackage package = new ExcelPackage(AddressList)) { // Get the work book in the file ExcelWorkbook workBook = package.Workbook; if (workBook != null) { if (workBook.Worksheets.Count > 0) { // Get the first worksheet var worksheet = package.Workbook.Worksheets[1]; worksheet.Cells["D2"].Value = "Some other string"; worksheet.Cells["E2"].Value = "Some string"; } } try { package.Save(); } catch (Exception ex) { //MessageBox.Show("Error saving the spreadsheet. " + ex); MessageBox.Show("Error saving the spreadsheet. Do you have it open?"); return; } } 

我通常创build一个adodblogging集,并在电子表格中读取我需要的数据。 然后它可以用于任何庄园分析,显示给用户,或以您需要的格式输出。

为此,您可以添加对adodb的引用。 添加使用

 using ADODB; 

根据您的代码的范围,声明一个logging集

 private ADODB.Recordset rsAddress = new ADODB.Recordset(); 

再次取决于你的范围,在适当的地方build立logging集字段。

 rsAddress.Fields.Append("Row", DataTypeEnum.adInteger); rsAddress.Fields.Append("Address", DataTypeEnum.adVarChar, 75); rsAddress.Fields.Append("CustomerNumber", DataTypeEnum.adVarChar, 75); rsAddress.Open(); 

然后,当您从Excel中读取值时,您可以将logging(行)添加到您的logging集中。 这里是一些代码,我通过循环使用电子表格的“使用范围”,并将数据保存到logging集。

 //Find the "real" last used row. var rowRun = worksheet.Dimension.End.Row; while (rowRun >= 1) { var range = worksheet.Cells[rowRun, 1, rowRun, worksheet.Dimension.End.Column]; if (range.Any(c => !string.IsNullOrEmpty(c.Text))) { break; } rowRun--; } // Loop through the worksheet and record the values we need. //var start = worksheet.Dimension.Start; for (int row = 2; row <= rowRun; row++) { //Check if we already have the current address string strHouseAddress = worksheet.Cells["A" + row.ToString()].Value == null ? string.Empty : worksheet.Cells["A" + row.ToString()].Value.ToString(); rsAddress.Filter = ""; rsAddress.Filter = "Address='" + strHouseAddress.Trim() + "'"; if (rsAddress.RecordCount == 0) { //Record this address rsAddress.Filter = ""; rsAddress.AddNew(); rsAddress.Fields["Row"].Value = row; try { if (string.IsNullOrEmpty(strHouseAddress.Trim()) == false) { rsAddress.Fields["Address"].Value = strHouseAddress.Trim(); } else { rsAddress.Fields["Address"].Value = "0 MISSING ST"; MessageBox.Show("Missing address at row " + row.ToString() + ". Fix the spreadsheet and reload."); } string strTerminal = worksheet.Cells["E" + row.ToString()].Value == null ? string.Empty : worksheet.Cells["E" + row.ToString()].Value.ToString(); if (string.IsNullOrEmpty(strTerminal.Trim()) == false) { rsAddress.Fields["CustomerNumber"].Value = strTerminal.Trim(); } rsAddress.Update(); } catch { MessageBox.Show("Error reading data from column A on row " + row.ToString()); } } else { MessageBox.Show("Duplicate address found on the Address list and row " + row.ToString() + "."); } } 

然后你可以遍历你创build的logging。

 rsAddress.MoveFirst(); for (; !rsAddress.EOF; rsAddress.MoveNext()) { if ( rsAddress.Fields["CustomerNumber"].Value = "SomeValue"){ //Do something } }