添加NPOI的引用,主意一点的是,ForceFormulaRecalculation是强制要求Excel在打开时重新计算的属性,示例代码如下:
FileStream file = new FileStream(@"template/book1.xls", FileMode.Open,FileAccess.Read); HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); HSSFSheet sheet1 = hssfworkbook.GetSheet("Sheet1"); sheet1.GetRow(1).GetCell(1).SetCellValue(200200); sheet1.GetRow(2).GetCell(1).SetCellValue(300); sheet1.GetRow(3).GetCell(1).SetCellValue(500050); sheet1.GetRow(4).GetCell(1).SetCellValue(8000); sheet1.GetRow(5).GetCell(1).SetCellValue(110); sheet1.GetRow(6).GetCell(1).SetCellValue(100); sheet1.GetRow(7).GetCell(1).SetCellValue(200); sheet1.GetRow(8).GetCell(1).SetCellValue(210); sheet1.GetRow(9).GetCell(1).SetCellValue(2300); sheet1.GetRow(10).GetCell(1).SetCellValue(240); sheet1.GetRow(11).GetCell(1).SetCellValue(180123); sheet1.GetRow(12).GetCell(1).SetCellValue(150); //Force excel to recalculate all the formula while open sheet1.ForceFormulaRecalculation = true; FileStream file = new FileStream(@"test.xls", FileMode.Create); hssfworkbook.Write(file); file.Close();
用NPOI吧,具体用法你网上找下,源码明天去公司才有。。。
明天可以给我看一下源码吗 跪求
@小易哥: npoi.codeplex.com 下载下来里面就有的。
@小易哥:
楼下已经给了示例,就那样直接拿过去用就是了。
方法不错,可以学习一下
100多列,要是像上面的代码一样一一列出来,会搞死的,不管是使用Npoi 还是 MS Excel。如果顺序有变怎么办?如果字段有增减怎么办?建议搞一个配置文件,配置那个字段对应哪列。根据配置来输出就可以了。
我不怎么会用XML 那位大侠可以指点一二不 跪求源代码
@小易哥: 如果对XML操作不熟悉,其实也可以在数据库建立一张字典表啊,假设你针对你的模版建立如下的字典表:
那如下就是在Web上根据模版生成Excel的函数:
Function ExportDataToExcel(ByVal mPage As Page) As String Dim xls As Excel.Application xls = New Excel.Application '保存的名称和路径 Dim filePath As String = "downfile/建设用地统计报表" & "_" & GetFileNow() & ".xls" Dim ds, ds_dict As DataSet Dim dr, dr_dict As DataRow Try Dim i As Long Dim j As Long Dim rowId As Long 'Excel中行id xls.Workbooks.Open(mPage.MapPath("template/建设用地统计报表.xls")) '打开模版 xls.ActiveWorkbook.SaveAs(mPage.MapPath(filePath)) '保存到想保存的路径 xls.ActiveWorkbook.Sheets("一览表").Select() '选中即将要输出数据的sheet ds_dict = mconn.ExecuteGet("select * from t_export_dict order by id") '参数表 ds = mconn.ExecuteGet("select * from t_gdxm order by qd_rq desc") '数据表 rowId = 2 '从第二行开始输出 For i = 0 To ds.Tables(0).Rows.Count - 1 dr = ds.Tables(0).Rows(i) For j = 0 To ds_dict.Tables(0).Rows.Count - 1 dr_dict = ds_dict.Tables(0).Rows(j) 'xls.Range("A1").Value = "合同编号" '在excel中可以通过 xls.Range("A1").Value="abc" 的方式给 A列第1行 的单元格赋值 xls.Range(dr_dict.Item("excel_col_name").ToString() & rowId.ToString()).Value = dr.Item(dr_dict.Item("field_name").ToString()).ToString Next rowId += 1 '移动到Excel下一行 Next xls.Range("A1").Select() '重新选择第一个单元格 xls.ActiveWorkbook.Save() '保存 Catch ex As Exception Finally xls.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xls) xls = Nothing System.GC.Collect() End Try Return filePath End Function
如此在数据库中配好列对应的字段即可。
需要添加 ms office library的引用。