Excel导出的意义

因为在项目中有些报表数据客户需要导出功能,那么导出为Excel就十分有必要了,可是有些客户的机器上并没有安装Excel或者安装的版本参差不一。
那么我们在这样的情况下应该应该怎么做呢?最简单的方法就是引用Excel相关的Com组件就行了,可是这种情况只能在安装了Excel的用户适用,
对于没有安装Excel的用户不能强制用户安装吧。那么我们只能将眼光瞄向第三方的类库了,能用的Excel操作导出类库大致有这么三个
  1. NPOI
  2. ExcelRepor
  3. 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 = "www.henanluheng.com";
 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 name="dt">数据源</param>
 33         /// <param name="path">导出的路径(包含文件的名称及后缀名)</param>
 34         /// <param name="tittle">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

相关文章: