c#winfrom 将datagridview中的数据通过npoi 2.2.0版本导出到excel,可以合并单元格。注意红色框部分。

可以用的话,分数不是问题。
不一定要npoi 2.2.0版本,只要可以实现导出为像这个图片这种格式 ,就可以。522830653艾特qq点com

NPOI1.0就带有合并单元格功能,但是使用起来比微软的dll要麻烦一些,

//设置一个合并单元格区域,使用上下左右定义CellRangeAddress区域
//CellRangeAddress四个参数为:起始行,结束行,起始列,结束列
sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 10));

 

你第一行的表头,就可以写成,

sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 26)); //标示从A1到Z1合并

然后赋值给A1(合并后的单元格是按照起始单元格的坐标来的,)

sheet.GetRow(0).GetCell(0).SetCellValue(" XXX统计表");

 最后设置居中


ICellStyle cellstyle = hssfworkbook.CreateCellStyle();//设置垂直居中格式

cellstyle.VerticalAlignment = VerticalAlignment.Center;//垂直居中

sheet.GetRow(0).GetCell(0).CellStyle = cellstyle;

追问

那批次编号 和制表日期呢 还有合计呢 大神?

追答

批次编号 指标日期都是独立的单元格啊!
你直接按照这个格式写到第二行的 A B单元格里就可以了啊。

“合计”这两个字是合并单元格,你按照上面给你的方法写一下合并,然后把string赋进去不就完了么?
至于算数,
你反正是有数据源的 用linq的Sum()去求,然后赋值也可以,
或者直接在那一行加上函数也是可以的啊,
函数是Cell.SetCellFormula(); 就可以了啊

追问

报这个错误 怎么弄啊?  解决了这个错误

现在执行到这里的时候报错

追答

首字母大写试试, 我的npoi是2.0的 可能函数名称不大一样。
肯定是有这个单元格样式的。

追问

再帮我看看这个问题咯,

断点设这里

即时窗口:值都追踪到了啊

为什么表格里面还是每行最后一列有数据呢?

追答

你这写法我也是看的蒙圈

for(int i =0 ;i<list.count;i++)  //这是EXCEL一行对应数组的一行
{
     var row  = mysheet.CreateRow(i) ; //EXCEL里创建一行,, 这函数名已经很直白了
     for(int j =0;j< list[i].items.count;j++) //一行里每个单元格,对应类型里的每个ITEM。
     {
           var cell = row.CreateCell(j);
      }
}

你的代码写的是: 先找你数据源的第一行的第一个,然后新建EXCEL里的一行,

找到第一行第二个,然后新建EXCEL一行,  你这遍历每个值的时候都新建一行,肯定把赋值的都给覆盖掉了啊,

就好比你int a = 1;

然后你后面每次都给a赋值,  a肯定保存不了之前的值啊。

追问

大神,如何分别设置每个数值列的求和公式?像我上面全是使用SUM(E3:E6)。怎么判断是从G几到G几,H几到H几?还有如何判断是G,H还是J呢?因为有的字段不是decimal类型,就不用求和。一共三个问题,再次感谢大神,好事做到底吧

追答

在for循坏外,单独Createrow,然后挨个写公式,
列名 挨个写,没办法自动的,需求要了你就求,不需要就跳过。
行数根据你数据源的数量去算,

温馨提示:答案为网友推荐,仅供参考
相似回答