npoi下excel虽然搞定了,但是很多看不懂是什么作用

-一个大坑 2017-08-14 10:38:22

//thName table列名; excelName excel存取路径; key 单号在第几列
public void ExportExcel(DataTable dt, string thName, string excelName, int key)
{
string[] thNameArr = thName.Split(',');//我传的table列名
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet(); //上面两个都不知道作用,看下面感觉sheet是列
IRow dataRow = sheet.CreateRow(0); //excel0行

//设置单元格的样式:水平对齐居中
ICellStyle style = workbook.CreateCellStyle();
style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;

//填充表头
for (int i = 0; i < dt.Columns.Count; i++)
{
dataRow.CreateCell(i).SetCellValue(thNameArr[i].ToString());
// dataRow 0行;CreateCell(i) i列;SetCellValue 赋值
}

//填充内容
for (int i = 0; i < dt.Rows.Count; i++)
{
dataRow = sheet.CreateRow(i + 1); 去掉表头行
for (int j = 0; j < dt.Columns.Count; j++)
{
ICell icell = dataRow.CreateCell(j);//单元格
icell.SetCellValue(dt.Rows[i][j].ToString()); //单元格赋值
icell.CellStyle = style; //单元格样式,表头单独样式怎么写?
if (i + 1 != dt.Rows.Count && key != 999) //合并的条件
{
if (dt.Rows[i][key].ToString() == dt.Rows[i + 1][key].ToString() && dt.Rows[i][j].ToString() == dt.Rows[i + 1][j].ToString())
{
//CellRangeAddress(合并单元格)四个参数为:起始行,结束行,起始列,结束列
sheet.AddMergedRegion(new CellRangeAddress(i + 1, i + 2, j, j));
}
}
}
}

//列宽自适应,只对英文和数字有效
for (int i = 0; i <= dt.Rows.Count; i++)
{
sheet.AutoSizeColumn(i);
}

//保存
using (FileStream fs = new FileStream(excelName, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
fs.Dispose(); //关闭文档
}
//FileMode.Create, FileAccess.Write 这两个参数是什么

}
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-一个大坑 2017-08-14
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
首先要对excel有个基本认识,比如:一个excel(工作簿)里面有sheet(默认3张),每个sheet里面有column(列)、row(行)、数据。 FileMode.Create 创建excel, FileAccess.Write 写excel. 你看不懂,说明你对编程的基础掌握的还不够,多看API文档,多写代码测试。
以前基本都是扩展些页面,好多方法别人读写好了,直接引用。这次开发新系统才自己写excel相关的
全栈极简 2017-08-14
  • 打赏
  • 举报
回复
首先要对excel有个基本认识,比如:一个excel(工作簿)里面有sheet(默认3张),每个sheet里面有column(列)、row(行)、数据。 FileMode.Create 创建excel, FileAccess.Write 写excel. 你看不懂,说明你对编程的基础掌握的还不够,多看API文档,多写代码测试。
-一个大坑 2017-08-14
  • 打赏
  • 举报
回复
引用 4 楼 zbdzjx 的回复:
整个Excel档是HSSFWorkbook。 打开Excel,默认里面会有三个Sheet,每个都是ISheet 。 icell.CellStyle = style; //单元格样式,表头单独样式怎么写? 新建一个ICellStyle,设定好样式,在填充表头时,设定这个样式。 //FileMode.Create, FileAccess.Write 这两个参数是什么 这个网上查FileStream的用法。
结合你和1#的,这个简单的excel已经懂了。麻烦的以后找时间试试
zbdzjx 2017-08-14
  • 打赏
  • 举报
回复
整个Excel档是HSSFWorkbook。 打开Excel,默认里面会有三个Sheet,每个都是ISheet 。 icell.CellStyle = style; //单元格样式,表头单独样式怎么写? 新建一个ICellStyle,设定好样式,在填充表头时,设定这个样式。 //FileMode.Create, FileAccess.Write 这两个参数是什么 这个网上查FileStream的用法。
夏天的枫 2017-08-14
  • 打赏
  • 举报
回复
正如版主所说,先得明白一个excel是由什么东西组成的,然后再结合“自己操作Excel”的经验来开发,就要容易些。 最容易犯错的就是合并单元格。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧