当前位置:首页 > Windows程序 > 正文

C#导出Excel那些事

2021-03-29 Windows程序

Excel导出 Excel导出的意义 因为在项目中有些报表数据客户需要导出功能,那么导出为Excel就十分有必要了,可是有些客户的机器上并没有安装Excel或者安装的版本参差不一。
那么我们在这样的情况下应该应该怎么做呢?最简单的方法就是引用Excel相关的Com组件就行了,可是这种情况只能在安装了Excel的用户适用,,
对于没有安装Excel的用户不能强制用户安装吧。那么我们只能将眼光瞄向第三方的类库了,能用的Excel操作导出类库大致有这么三个

NPOI

ExcelRepor

aspose.cells

好的,废话不多说,接下来就将这几种导出方法一一道来:首先我们模拟一个数据源

1 private DataTable dt = new DataTable(); 2 3 /// <summary> 4 /// 装载数据 5 /// </summary> 6 private void Inidata() 7 { 8 dt.TableName = "student"; 9 dt.Columns.Add("Name", typeof(string)); 10 dt.Columns.Add("Team", typeof(string)); 11 DataRow dr = dt.NewRow(); 12 DataRow dr1 = dt.NewRow(); 13 dr["Name"] = "科比"; 14 dr["Team"] = "湖人"; 15 dt.Rows.Add(dr); 16 dr1["Name"] = "詹姆斯"; 17 dr1["Team"] = "骑士"; 18 dt.Rows.Add(dr1); 19 list.Add(new Student { Name = "科比", Team = "湖人" }); 20 list.Add(new Student { Name = "詹姆斯", Team = "骑士" }); 21 }

View Code

使用NPOI导出 NPOI 是 POI 项目的 .NET 版本。具体的信息请自行百度。下边是我们公司用的一个NPOI到处的Helper中的片段

1 public class NPOIExportExclHelper 2 { 3 /// <summary> 4 /// 创建一个Excel 5 /// Yakecan 6 /// </summary> 7 /// <returns>返回一个空表格</returns> 8 public HSSFWorkbook InitializeWorkBook() 9 { 10 HSSFWorkbook workBook = new HSSFWorkbook(); 11 DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation(); 12 SummaryInformation si = PropertySetFactory.CreateSummaryInformation(); 13 14 dsi.Company = "河南xx软件科技有限公司"; 15 dsi.Manager = "Office Word 2003/2007"; 16 17 si.Author = ""; 18 si.Subject = "信息导出"; 19 si.Title = "系统报表"; 20 21 workBook.DocumentSummaryInformation = dsi; 22 workBook.SummaryInformation = si; 23 24 return workBook; 25 } 26 27 28 /// <summary> 29 /// 把指定的DataTable导出Excel 30 /// Yakecan 31 /// </summary> 32 /// <param>数据源</param> 33 /// <param>导出的路径(包含文件的名称及后缀名)</param> 34 /// <param>Sheet的名称</param> 35 public void Export(DataTable dt, string path, string tittle) 36 { 37 HSSFWorkbook workbook = InitializeWorkBook(); 38 ISheet sheet1 = workbook.CreateSheet(tittle); 39 40 IRow titleRow = sheet1.CreateRow(0); 41 titleRow.Height = (short)20 * 25; 42 43 ICellStyle titleStyle = workbook.CreateCellStyle(); 44 titleStyle.Alignment = HorizontalAlignment.Center; 45 titleStyle.VerticalAlignment = VerticalAlignment.Center; 46 IFont font = workbook.CreateFont(); 47 font.FontName = "宋体"; 48 font.FontHeightInPoints = (short)16; 49 titleStyle.SetFont(font); 50 51 NPOI.SS.Util.CellRangeAddress region = new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count); 52 sheet1.AddMergedRegion(region); // 添加合并区域 53 54 ICell titleCell = titleRow.CreateCell(0); 55 titleCell.CellStyle = titleStyle; 56 titleCell.SetCellValue(tittle); 57 58 59 IRow headerRow = sheet1.CreateRow(1); 60 ICellStyle headerStyle = workbook.CreateCellStyle(); 61 headerStyle.Alignment = HorizontalAlignment.Center; 62 headerStyle.VerticalAlignment = VerticalAlignment.Center; 63 headerStyle.BorderBottom = BorderStyle.Thin; 64 headerStyle.BorderLeft = BorderStyle.Thin; 65 headerStyle.BorderRight = BorderStyle.Thin; 66 headerStyle.BorderTop = BorderStyle.Thin; 67 IFont titleFont = workbook.CreateFont(); 68 titleFont.FontHeightInPoints = (short)11; 69 titleFont.FontName = "宋体"; 70 headerStyle.SetFont(titleFont); 71 72 headerRow.CreateCell(0).SetCellValue("序号"); 73 headerRow.GetCell(0).CellStyle = headerStyle; 74 75 for (int i = 0; i < dt.Columns.Count; i++) 76 { 77 headerRow.CreateCell(i + 1).SetCellValue(dt.Columns[i].ColumnName); 78 headerRow.GetCell(i + 1).CellStyle = headerStyle; 79 sheet1.SetColumnWidth(i, 256 * 18); 80 } 81 82 ICellStyle bodyStyle = workbook.CreateCellStyle(); 83 bodyStyle.BorderBottom = BorderStyle.Thin; 84 bodyStyle.BorderLeft = BorderStyle.Thin; 85 bodyStyle.BorderRight = BorderStyle.Thin; 86 bodyStyle.BorderTop = BorderStyle.Thin; 87 for (int r = 0; r < dt.Rows.Count; r++) 88 { 89 IRow bodyRow = sheet1.CreateRow(r + 2); 90 bodyRow.CreateCell(0).SetCellValue(r + 1); 91 bodyRow.GetCell(0).CellStyle = bodyStyle; 92 bodyRow.GetCell(0).CellStyle.Alignment = HorizontalAlignment.Center; 93 94 for (int c = 0; c < dt.Columns.Count; c++) 95 { 96 bodyRow.CreateCell(c + 1).SetCellValue(dt.Rows[r][c].ToString()); 97 bodyRow.GetCell(c + 1).CellStyle = bodyStyle; 98 } 99 } 100 101 sheet1.CreateFreezePane(1, 2); 102 103 FileStream fs = new FileStream(path, FileMode.Create); 104 workbook.Write(fs); 105 fs.Flush(); 106 fs.Position = 0; 107 sheet1 = null; 108 headerRow = null; 109 workbook = null; 110 //OutPutExcelStreamOnClient(ms, xlsName); 111 fs.Dispose(); 112 } 113 114 115 }

View Code

好了,接下来让我们来使用一下这个导出的功能,导出代码如下,这些没什么技术含量,F5启动程序查看导出的效果

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69958.html