如何将数据追加到excel文件

designation table: deg_no deg_name 1 XYZ 2 ABC 3 pqs 4 qwe 5 tyu 6 pqr 7 lkj 8 you 9 zzz 10 xxx ds = cls.ReturnDataSet("RetriveData_Alias1", new SqlParameter("@Field", "deg_no"), new SqlParameter("@TblNm", "designation")); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { DataSet ds1 = new DataSet(); ds1 = cls.ReturnDataSet("RetriveData_Alias1", new SqlParameter("@Field", "user_id,user_name"), new SqlParameter("@TblNm", "User_details"), new SqlParameter("@WhereClause", "where deg_no ='" + ds.Tables[0].Rows[i]["deg_no"].ToString() + "' ")); } 

这个for循环将运行,直到deg_no = 10,并给出了所有的用户细节,它给出了完美的输出,因为我想输出。

但我想把这些数据写入excel文件:user_details.xls

假设当我= 1时,那么它会给你

 user_id user_name deg_no 1 xyz 1 

和我= 2

 user_id user_name deg_no 2 pqr 3 

等等…

但没有每次创build新文件。

假设在第一个循环中它将插入user_id = 1的logging,然后在第二个循环中将user_id = 2的细节追加到同一个文件中而不创build新文件。

我怎样才能做到这一点?

如果要从数据库数据生成 Excel文件,报告解决scheme是最灵活的方法。 另一方面,如果您想将数据添加到已存在的文件中,则可以使用Open XML SDK或更高级别的库(如EPPlus)来操作Excel文件。 EPPlus作为NuGet软件包提供,因此您可以轻松将其添加到您的项目中。

EPPlus的项目网站包含各种样本。 创build一个Excel工作表可以像下面这样简单:

  FileInfo newFile = new FileInfo(outputDir.FullName + @"\sample6.xlsx"); ExcelPackage pck = new ExcelPackage(newFile); //Add the Content sheet var ws = pck.Workbook.Worksheets.Add("Content"); ws.Cells["B1"].Value = "Name"; ws.Cells["C1"].Value = "Size"; ws.Cells["D1"].Value = "Created"; ws.Cells["E1"].Value = "Last modified"; 

EPPlus还允许您使用LINQ查询Excel表格,甚至直接将IEnumerable集合转换为Excel表格:

 ws.Cells["A1"].LoadFromCollection(myList, true); 

这将填充myList中的对象的属性值的表。

EPPlus也有从DataTables和DataReaders读取的方法。 这样就可以像读取数据一样读取数据集,然后将每个Datatable添加到相应位置的表单中,例如:

 ws.Cells["A1"].LoadFromDataTable(ds1.Tables[0], true); ... ws.Cells["A30"].LoadFromDataTable(ds1.Tables[0], true); 

通过这种方式,您可以使用EPPlus在不想使用完整的报告解决scheme时生成快速和脏的Excel报告。

您需要阅读有关ASP.Net报告查看器控制

愿这帮助你

ASP.Net报表查看器控件教程用例子

或者你可以使用

使用C#.Net从Datatable导出到EXCEL

或者您需要Office Interop作为参考,然后再进行编码

 using Microsoft.Office.Interop.Excel; public void DataSetsToExcel(List<DataSet> dataSets, string fileName) { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Workbook xlWorkbook = xlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Sheets xlSheets = null; Worksheet xlWorksheet = null; foreach (DataSet dataSet in dataSets) { System.Data.DataTable dataTable = dataSet.Tables[0]; int rowNo = dataTable.Rows.Count; int columnNo = dataTable.Columns.Count; int colIndex = 0; //Create Excel Sheets xlSheets = xlWorkbook.Sheets; xlWorksheet = (Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing); xlWorksheet.Name = dataSet.DataSetName; //Generate Field Names foreach (DataColumn dataColumn in dataTable.Columns) { colIndex++; xlApp.Cells[1, colIndex] = dataColumn.ColumnName; } object[,] objData = new object[rowNo, columnNo]; //Convert DataSet to Cell Data for (int row = 0; row < rowNo; row++) { for (int col = 0; col < columnNo; col++) { objData[row, col] = dataTable.Rows[row][col]; } } //Add the Data Range range = xlWorksheet.Range[xlApp.Cells[2, 1], xlApp.Cells[rowNo + 1, columnNo]]; range.Value2 = objData; //Format Data Type of Columns colIndex = 0; foreach (DataColumn dataColumn in dataTable.Columns) { colIndex++; string format = "@"; switch (dataColumn.DataType.Name) { case "Boolean": break; case "Byte": break; case "Char": break; case "DateTime": format = "dd/mm/yyyy"; break; case "Decimal": format = "$* #,##0.00;[Red]-$* #,##0.00"; break; case "Double": break; case "Int16": format = "0"; break; case "Int32": format = "0"; break; case "Int64": format = "0"; break; case "SByte": break; case "Single": break; case "TimeSpan": break; case "UInt16": break; case "UInt32": break; case "UInt64": break; default: //String break; } //Format the Column accodring to Data Type xlWorksheet.Range[xlApp.Cells[2, colIndex], xlApp.Cells[rowNo + 1, colIndex]].NumberFormat = format; } } //Remove the Default Worksheet ((Worksheet)xlApp.ActiveWorkbook.Sheets[xlApp.ActiveWorkbook.Sheets.Count]).Delete(); //Save xlWorkbook.SaveAs(fileName, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, XlSaveAsAccessMode.xlNoChange, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); xlWorkbook.Close(); xlApp.Quit(); GC.Collect(); } 

请注意您必须命名您的数据集,这将是Excel中的工作表的名称。

 DataSet dataSet1 = new DataSet("My Data Set 1"); dataAdapter1.Fill(dataSet1); DataSet dataSet2 = new DataSet("My Data Set 2"); dataAdapter1.Fill(dataSet2); DataSet dataSet3 = new DataSet("My Data Set 3"); dataAdapter1.Fill(dataSet3); List<DataSet> dataSets = new List<DataSet>(); dataSets.Add(dataSet1); dataSets.Add(dataSet2); dataSets.Add(dataSet3); DataSetsToExcel(dataSets, "{Your File Name}") 

添加Office Interop作为参考

遵循以下步骤:

 On the Project menu, click Add Reference. On the COM tab, locate Microsoft Excel Object Library, and then click Select. In Visual Studio 2010, locate Microsoft Excel --.- Object Library on the COM tab. Click OK in the Add References dialog box to accept your selections. If you are prompted to generate wrappers for the libraries that you selected, click “Yes”.