分享
 
 
 

导出

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

Excel导出Excel导出的意义因为在项目中有些报表数据客户需要导出功能,那么导出为Excel就十分有必要了,可是有些客户的机器上并没有安装Excel或者安装的版本参差不一。

那么我们在这样的情况下应该应该怎么做呢?最简单的方法就是引用Excel相关的Com组件就行了,可是这种情况只能在安装了Excel的用户适用,

对于没有安装Excel的用户不能强制用户安装吧。那么我们只能将眼光瞄向第三方的类库了,能用的Excel操作导出类库大致有这么三个

NPOIExcelReporaspose.cells

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

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

View Code

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

1publicclassNPOIExportExclHelper2{3///<summary>4///创建一个Excel5///Yakecan6///</summary>7///<returns>返回一个空表格</returns>8publicHSSFWorkbook InitializeWorkBook()9{10HSSFWorkbook workBook =newHSSFWorkbook();11DocumentSummaryInformation dsi =PropertySetFactory.CreateDocumentSummaryInformation();12SummaryInformation si =PropertySetFactory.CreateSummaryInformation();1314dsi.Company ="河南xx软件科技有限公司";15dsi.Manager ="OfficeWord2003/2007";1617si.Author ="www.henanluheng.com";18si.Subject ="信息导出";19si.Title ="系统报表";2021workBook.DocumentSummaryInformation =dsi;22workBook.SummaryInformation =si;2324returnworkBook;25}262728///<summary>29///把指定的DataTable导出Excel30///Yakecan31///</summary>32///<param name="dt">数据源</param>33///<param name="path">导出的路径(包含文件的名称及后缀名)</param>34///<param name="tittle">Sheet的名称</param>35publicvoidExport(DataTable dt,stringpath,stringtittle)36{37HSSFWorkbook workbook =InitializeWorkBook();38ISheet sheet1 =workbook.CreateSheet(tittle);3940IRow titleRow = sheet1.CreateRow(0);41titleRow.Height = (short)20*25;4243ICellStyle titleStyle =workbook.CreateCellStyle();44titleStyle.Alignment =HorizontalAlignment.Center;45titleStyle.VerticalAlignment =VerticalAlignment.Center;46IFont font =workbook.CreateFont();47font.FontName ="宋体";48font.FontHeightInPoints = (short)16;49titleStyle.SetFont(font);5051NPOI.SS.Util.CellRangeAddress region =newNPOI.SS.Util.CellRangeAddress(0,0,0, dt.Columns.Count);52sheet1.AddMergedRegion(region);//添加合并区域5354ICell titleCell = titleRow.CreateCell(0);55titleCell.CellStyle =titleStyle;56titleCell.SetCellValue(tittle);575859IRow headerRow = sheet1.CreateRow(1);60ICellStyle headerStyle =workbook.CreateCellStyle();61headerStyle.Alignment =HorizontalAlignment.Center;62headerStyle.VerticalAlignment =VerticalAlignment.Center;63headerStyle.BorderBottom =BorderStyle.Thin;64headerStyle.BorderLeft =BorderStyle.Thin;65headerStyle.BorderRight =BorderStyle.Thin;66headerStyle.BorderTop =BorderStyle.Thin;67IFont titleFont =workbook.CreateFont();68titleFont.FontHeightInPoints = (short)11;69titleFont.FontName ="宋体";70headerStyle.SetFont(titleFont);7172headerRow.CreateCell(0).SetCellValue("序号");73headerRow.GetCell(0).CellStyle =headerStyle;7475for(inti =0; i < dt.Columns.Count; i++)76{77headerRow.CreateCell(i +1).SetCellValue(dt.Columns[i].ColumnName);78headerRow.GetCell(i +1).CellStyle =headerStyle;79sheet1.SetColumnWidth(i,256*18);80}8182ICellStyle bodyStyle =workbook.CreateCellStyle();83bodyStyle.BorderBottom =BorderStyle.Thin;84bodyStyle.BorderLeft =BorderStyle.Thin;85bodyStyle.BorderRight =BorderStyle.Thin;86bodyStyle.BorderTop =BorderStyle.Thin;87for(intr =0; r < dt.Rows.Count; r++)88{89IRow bodyRow = sheet1.CreateRow(r +2);90bodyRow.CreateCell(0).SetCellValue(r +1);91bodyRow.GetCell(0).CellStyle =bodyStyle;92bodyRow.GetCell(0).CellStyle.Alignment =HorizontalAlignment.Center;9394for(intc =0; c < dt.Columns.Count; c++)95{96bodyRow.CreateCell(c +1).SetCellValue(dt.Rows[r][c].ToString());97bodyRow.GetCell(c +1).CellStyle =bodyStyle;98}99}100101sheet1.CreateFreezePane(1,2);102103FileStream fs =newFileStream(path, FileMode.Create);104workbook.Write(fs);105fs.Flush();106fs.Position =0;107sheet1 =null;108headerRow =null;109workbook =null;110//OutPutExcelStreamOnClient(ms, xlsName);111fs.Dispose();112}113114115}

View Code

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

1SaveFileDialog savedialog =ShowExportExcelDoalog();2savedialog.FileName ="这是我的测试数据";3if(savedialog.ShowDialog() ==DialogResult.OK)4{5NPOIExportExclHelper excelHelper =newNPOIExportExclHelper();6excelHelper.Export(dt, savedialog.FileName,"这是我的测试数据");7}

OK,这是我们导出的效果图,自动为我们加上了序号这一列,不过整体来说导出的功能还是没有任何问题。不过还是有一点瑕疵,数据的列名还是英文,解决方法也很简单只要我们设置数据源的dt的列头名设置为中国文就行了,dt.Columns["Name"].ColumnName = "姓名"; 设置完成再导出就没问题了。对于我们直男程序员来说这样大致差不多也就完成了任务,可是这样的效果对于真正的生产环境来说还是不行的,因为有些客户还要求导出的Excel要有格式,比如标题高亮啊、数据行每行颜色的高亮。这些怎么办呢,这就用到接下来的方法了。

使用ExcelReport和模板导出使用模板导出Excel可以实现Excel的数据和样式的分离,虽然NPOI也可以导出的时候设置样式但是代码比较繁琐。

ExcelReport是博客园的一个大神韩兆新捣鼓出来的一个小工具。在QQ群中作者对于使用者遇到的问题和意见还是反馈的很积极的,这点要给作者点个赞的。关于这个控件的具体详细方法还请大家参考作者的一系列博客,下面只是给你导出的最基本的代码。

首先是我们的模板格式

导出代码如下

1SaveFileDialog saveFileDlg =newSaveFileDialog();2saveFileDlg.Filter ="Excel 2003文件|*.xls|Excel 2007文件|*.xlsx";34if(DialogResult.OK.Equals(saveFileDlg.ShowDialog()))5{6//实例化一个参数容器,并加载模板填充规则文件78ParameterCollection collection =newParameterCollection();910collection.Load(@"Templete\excelreport.xml");11//实例化一个元素格式化器列表1213List<ElementFormatter> formatters =newList<ElementFormatter>();1415formatters.Add(newCellFormatter(collection["Sheet1","time"],"第一次"));//添加一个单元格格式化器16//添加一个Table格式化器17formatters.Add(newTableFormatter<Student>(collection["Sheet1","Name"].X, list,18newTableColumnInfo<Student>(collection["Sheet1","Name"].Y, t =>t.Name),19newTableColumnInfo<Student>(collection["Sheet1","Team"].Y, t =>t.Team))20);2122//导出文件到本地23ExportHelper.ExportToLocal(@"Templete\excelreport.xls", saveFileDlg.FileName,24newSheetFormatterContainer("Sheet1", formatters));

使用aspose.cells和模板导出Aspose是一个非常强大的“收费控件”,我们要用到的是aspose.cells,这个控件的使用不需要引用其他别的控件,其次代码也非常简单。具体的使用方法参考Aspose.Cells 根据Excel模板导出数据统计

模板如下

1WorkbookDesigner designer =newWorkbookDesigner();2//Server.MapPath("./")3stringpath = System.AppDomain.CurrentDomain.BaseDirectory +"/Templete/aspose.xls";4designer.Open(path);5designer.SetDataSource(dt);6designer.Process();7//Save the excel file8stringfileToSave = System.AppDomain.CurrentDomain.BaseDirectory +"Templete/JH_ManageExcel.xls";9if(File.Exists(fileToSave))10{11File.Delete(fileToSave);12}1314designer.Save(fileToSave, FileFormatType.Excel2003);15//打开Excel文件16Process.Start(fileToSave);

总结

本文只是简单的介绍几种Excel的导出方法,并没有具体的深入研究。这三种方式各有各的特点,第一种方法比较通用,适合那些需要多种导出且对导出的样式没有要求的项目,后边两种适合那些对导出数据有样式需求的项目。第二种方式所用的类库开源、免费但是代码比较繁琐,且还需要生成Xml的配置文件使起来还是比较麻烦,第三种使用起来最好、最简便,不过需要收费。如果用在商业项目中还是需要斟酌的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有