C#NPoi,将多个表数据导出到同一个ECXCL
遇到一个项目,将三个表的数据导出到同一表的同一SHeet页,测试了N多方法未能实现,最后三个表添加到同一dataset,然后导出,遇到问题,CreateRow和GetRow的不同,将代码贴出,欢迎大神们指导
public static bool GridToExcels(List<DataTable> dts, string strExcelFileName, int indexType){int iRowIndex;bool BSave = false;try{HSSFWorkbook workbook = new HSSFWorkbook();//DataSet set = new DataSet();DataTable dt = dts[0];//DataTable dt1 = dts[1];//DataTable dt2 = dts[2];ISheet sheet = workbook.CreateSheet("三固定表");//创建sheet页ICellStyle HeadercellStyle = workbook.CreateCellStyle();//表格格式HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;HeadercellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//字体NPOI.SS.UserModel.IFont headerfont = workbook.CreateFont();headerfont.Boldweight = (short)FontBoldWeight.Bold;HeadercellStyle.SetFont(headerfont);foreach (DataTable dt in dts){CellRangeAddress region = new CellRangeAddress(0, 0, 3, 4);//合并单元格CellRangeAddress region1 = new CellRangeAddress(0, 0, 5, 6);CellRangeAddress region2 = new CellRangeAddress(0, 0, 7, 8);CellRangeAddress region3 = new CellRangeAddress(0, 0, 9, 10);sheet.AddMergedRegion(region);sheet.AddMergedRegion(region1);sheet.AddMergedRegion(region2);sheet.AddMergedRegion(region3);IRow headerRow = sheet.CreateRow(2);IRow row1 = sheet.CreateRow(0);//创建第一行ICell cell0 = row1.CreateCell(0);//创建第一行第一列cell0.SetCellValue("时间");cell0.CellStyle = HeadercellStyle;ICell cell1 = row1.CreateCell(1);//创建第一行第二列cell1.SetCellValue("号");cell1.CellStyle = HeadercellStyle;ICell cell2 = row1.CreateCell(3);//创建第一行第三列cell2.SetCellValue("第一岗");cell2.CellStyle = HeadercellStyle;ICell cell3 = row1.CreateCell(5);//创建第一行第四列cell3.SetCellValue("第二岗");cell3.CellStyle = HeadercellStyle;ICell cell4 = row1.CreateCell(7);//创建第一行第五列cell4.SetCellValue("第三岗");cell4.CellStyle = HeadercellStyle;ICell cell5 = row1.CreateCell(9);//创建第一行第六列cell5.SetCellValue("第四岗");cell5.CellStyle = HeadercellStyle;//创建第二行IRow row2 = sheet.CreateRow(1);//创建第一行ICell cell10 = row2.CreateCell(0);//创建第一行第一列cell10.SetCellValue("week");cell10.CellStyle = HeadercellStyle;ICell cell11 = row2.CreateCell(1);//创建第一行第二列cell11.SetCellValue("roomID");cell11.CellStyle = HeadercellStyle;ICell cell12 = row2.CreateCell(3);//创建第一行第三列cell12.SetCellValue("06:00");ICell cell22 = row2.CreateCell(4);//创建第一行第三列cell22.SetCellValue("08:00");cell22.CellStyle = HeadercellStyle;ICell cell13 = row2.CreateCell(5);//创建第一行第四列cell13.SetCellValue("08:00");cell13.CellStyle = HeadercellStyle;ICell cell23 = row2.CreateCell(6);//创建第一行第四列cell23.SetCellValue("21:00");cell23.CellStyle = HeadercellStyle;ICell cell14 = row2.CreateCell(7);//创建第一行第五列cell14.SetCellValue("01:00");cell14.CellStyle = HeadercellStyle;ICell cell24 = row2.CreateCell(8);//创建第一行第五列cell24.SetCellValue("04:00");cell24.CellStyle = HeadercellStyle;ICell cell15 = row2.CreateCell(9);//创建第一行第六列cell15.SetCellValue("04:00");cell15.CellStyle = HeadercellStyle;ICell cell25 = row2.CreateCell(10);//创建第一行第六列cell25.SetCellValue("06:00");cell25.CellStyle = HeadercellStyle;int icolIndex = 0; if (dt.TableName == "值班表"){ICellStyle cellStyle = workbook.CreateCellStyle();//为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text来看cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;NPOI.SS.UserModel.IFont cellfont = workbook.CreateFont();cellfont.Boldweight = (short)FontBoldWeight.Normal;cellStyle.SetFont(cellfont);int iRowIndex1 = 1;//新建150行,while(iRowIndex1< 150){IRow DataRow = sheet.CreateRow(iRowIndex1);iRowIndex1++;}if (indexType == 1){//建立内容行iRowIndex = 3;//第三行int iCellIndex = 0;//;第0列foreach (DataRow Rowitem in dt.Rows){IRow DataRow = sheet.GetRow(iRowIndex);foreach (DataColumn Colitem in dt.Columns){ICell cell = DataRow.CreateCell(iCellIndex);cell.SetCellValue(Rowitem[Colitem].ToString());cell.CellStyle = cellStyle;iCellIndex++;}iCellIndex = 0;iRowIndex++;}for (int i = 0; i < icolIndex; i++){sheet.AutoSizeColumn(i);}}}else if (dt.TableName == "值日表"){ICellStyle cellStyle = workbook.CreateCellStyle();if (indexType == 1){//建立内容行iRowIndex = 3;int iCellIndex2 = 12;foreach (DataRow Rowitem in dt.Rows){IRow DataRow = sheet.GetRow(iRowIndex);foreach (DataColumn Colitem in dt.Columns){ICell cell = DataRow.CreateCell(iCellIndex2);cell.SetCellValue(Rowitem[Colitem].ToString());cell.CellStyle = cellStyle;iCellIndex2++;}iCellIndex2 = 12;iRowIndex++;}//自适应列宽for (int i = 0; i < icolIndex; i++){sheet.AutoSizeColumn(i);}}} else if (dt.TableName == "床位表"){ICellStyle cellStyle = workbook.CreateCellStyle();if (indexType == 1){//建立内容行iRowIndex = 3;int iCellIndex2 = 17;foreach (DataRow Rowitem in dt.Rows){IRow DataRow = sheet.GetRow(iRowIndex);foreach (DataColumn Colitem in dt.Columns){ICell cell = DataRow.CreateCell(iCellIndex2);cell.SetCellValue(Rowitem[Colitem].ToString());cell.CellStyle = cellStyle;iCellIndex2++;}iCellIndex2 = 17;iRowIndex++;}//自适应列宽for (int i = 0; i < icolIndex; i++){sheet.AutoSizeColumn(i);}}}FileStream file = new FileStream(strExcelFileName, FileMode.OpenOrCreate);workbook.Write(file);file.Flush();file.Close();BSave = true;}}catch (Exception ex){throw new Exception(ex.Message);}return BSave;}
C#NPoi,将多个表数据导出到同一个ECXCL相关推荐
- oracle 导出数据 utl,【原创】利用utl_file包进行表数据导出
利用utl_file包进行表数据导出 2013/11/12 一.概述 工作中需要将许多表的数据导出到一份excel中,虽然PL/SQL自带有导出的功能,但是导出后需要进行手动的汇总到一张excel中, ...
- Pl/sql 如何将oracle的表数据导出成excel文件?
oracle将表数据导出成excel文件的方法 1)在SQL窗体上,查询需要导出的数据 --查询数据条件--select MID,CODE,NAME from Dxc_Goods_Cate where ...
- DBeaver表结构、表数据导出到excel
DBeaver表结构.表数据导出到excel DBeaver表结构到excel 表数据导出到excel DBeaver表结构到excel 右键复制高级信息 新建excel 粘贴 表数据导出到excel ...
- oracle表数据导出成unl文件,oracle的文本导入、导出技巧
[IT168 服务器学院]在使用oracle时,总觉得oracle的导入,导出没有informix的load,unload好用,没办法,只能参照网上朋友的思路和informix的实现,写了几个脚本,希 ...
- 若依框架主子表数据导出问题
一.使用若依框架导出主子表数据因为返回的数据中含有子表的集合信息,导致excel表格中多出一行标题. 二.在Controller层写入导出的方法 三.这边返回的数据是主表的数据,主表数据的实体类中含 ...
- JeecgBoot 单表数据导出多sheet实例
现在要导出格式如下: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FvUS8Uav-1615193518632)(images/sheet1.png)] 实体如下: ...
- SQLServer2008将表数据导出的方法
1.选择对应数据库右击 2.选择任务---生成脚本 3.在弹出的界面中,点2次"下一步"进入如图界面中,把"编写数据的脚步"置为true. 4.下面傻瓜式操作 ...
- Oracle将数据库中的表数据导入到另一个数据库中
因为工作需要,把Oracle数据库1中的表数据导入到相同数据结构的数据库2表中,下面将数据库1简称为DB1,数据库2简称为DB2,刚开始的时候我只是简单的将DB1的表数据导出成sql脚本,然后导入到D ...
- oracle两个表数据比较,oracle数据库两表数据比较
1 引言 在程序设计的过程中,往往会遇到两个记录集的比较.如华东电网PMS接口中实现传递一天中变更(新增.修改.删除)的数据.实现的方式有多种,如编程存储过程返回游标,在存储过程中对两批数据进行比较等 ...
最新文章
- 安装Android SDK需要选择哪些,开始为Android开发,我应该选择安装哪些SDK?
- SQL Server 索引和表体系结构(聚集索引)
- k8s使用glusterfs存储报错type 'features/utime'
- (2)搞一搞 seata 之 Spring Cloud 整合
- 连接相机无法识别_车牌识别一体机在汽修门店安装中要注意的事项
- 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
- 如何解决华为手机“杀后台”严重的情况呢?
- android反编译之获得res下的xml配置文件及图片等资源
- python入门基础知识实例-Python入门基础知识实例,
- AD17入门简单教程(一)
- matlab鲍威尔方法求函数,基于MATLAB的鲍威尔法求极值问题.doc
- 时间序列谐波分析(HANTS)的MATLAB实现
- K650C I7 D4 黑苹果折腾记录
- 走出校门,工作4个月的工作感想
- python生成DataMatrix码(DataMatrix)
- 微信小程序可以打开公众号文章
- IOS 5 拦截手机短信(需越狱)
- 计算机cat的应用,计算机辅助系统
- mysql eof_EOF随记
- Yilia使用搜狐畅言配置
热门文章
- 使用Docker部署MySQL(数据持久化),将mysql的数据映射到本机磁盘
- 整体大于部分_“整体大于部分”的人生,温柔或是永恒
- 1325: 深入浅出学算法020-阶乘和(sum)
- android手机使用ipods2,airpods2 安卓使用体验
- 美国科学院院士张首晟:摩尔定律即将失效,人工智能怎么化解这个尴尬? | 2017 IT领袖峰会...
- 《月亮与六便士》-- 威廉·萨默塞特·毛姆
- CIA(中情局)如何玩转社交媒体?
- Mybatis框架结构概览
- 什么是机器视觉检测?视觉检测技术的应用与优势?
- 什么叫pmt测试分析_使用OriginLab进行PMT能谱分析