C# NPOI生成Excel文档(简单样式)
效果图:
代码:
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="DeptId"></param>
[HttpPost]
public void ExportToExcel(int DeptId,List<FM_CostApply> CostApplyList, int beginYear, int beginMonth, int endYear, int endMonth)
{
foreach (var Item in CostApplyList)
{
CostApplyItem.AddRange(Item.FM_CostApplyItem);
}
var Project = CostApplyItem.GroupBy(a => a.FM_Project.ProjectName).ToList();
//创建工作簿
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
string[] headName = { "年度", "月", "日", "申请类型", "新科目名称", "部门名称", "项目名称", "凭证号", "摘要", "金额" };
string[] ColumnName = { "Year", "Month", "Day", "Type", "SubJectName", "DeptName", "ProjectName", "CardNum", "Summary", "Cost" };
//创建Sheet页
if (Project.Count > )
{
foreach (var proc in Project)
{
//该项目下申请的所有的科目
var SubjectName = CostApplyItem.Where(a => a.FM_Project.ProjectName == proc.Key).GroupBy(a => a.FM_SecondSubject.SubjectName).ToList();
try
{
//创建Sheet页
ISheet sheet = hssfworkbook.CreateSheet(proc.Key); //获取项目下的费用明细
List<CostApplyExcel> model = GetCostApply(proc.Key, CostApplyList); var Dic = model.GroupBy(a => a.SubJectName).ToDictionary(w => w.Key, r => r.ToList()); //集合转换为DataTable
DataTable dt = ConvtToDataTable.ToDataTable<CostApplyExcel>(model); int RowIndex = ; #region 如果为第一行
IRow IRow = sheet.CreateRow();
for (int h = ; h < ; h++)
{
ICell Icell = IRow.CreateCell(h);
Icell.SetCellValue(BeginDate.ToString("yyyy.MM") + "-" + EndDate.ToString("yyyy.MM") + " " + proc.Key + "项目汇总表"); ICellStyle style = hssfworkbook.CreateCellStyle();
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.CENTER;
//新建一个字体样式对象
IFont font = hssfworkbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = ;
//设置字体加粗样式
font.Boldweight = (short)FontBoldWeight.BOLD;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//将新的样式赋给单元格
Icell.CellStyle = style;
//合并单元格
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
}
#endregion #region 表头
IRow Irows2 = sheet.CreateRow();
for (int j = ; j < ; j++)
{
ICell Icell2 = Irows2.CreateCell(j);
ICellStyle Istyle2 = hssfworkbook.CreateCellStyle();
//设置边框
Istyle2.BorderTop = BorderStyle.THIN;
Istyle2.BorderBottom = BorderStyle.THIN;
Istyle2.BorderLeft = BorderStyle.THIN;
Istyle2.BorderRight = BorderStyle.THIN;
//设置单元格的样式:水平对齐居中
Istyle2.Alignment = HorizontalAlignment.CENTER;
//新建一个字体样式对象
IFont Ifont2 = hssfworkbook.CreateFont();
Ifont2.FontName = "宋体";
Ifont2.FontHeightInPoints = ;
//设置字体加粗样式
Ifont2.Boldweight = (short)FontBoldWeight.BOLD;
//使用SetFont方法将字体样式添加到单元格样式中
Istyle2.SetFont(Ifont2);
//将新的样式赋给单元格
Icell2.CellStyle = Istyle2;
Icell2.SetCellValue(headName[j]);
}
#endregion foreach (var DicItem in Dic)
{
int SumStartRows = RowIndex + ; //求和的开始行
//集合转换为DataTable
DataTable table = ConvtToDataTable.ToDataTable<CostApplyExcel>(DicItem.Value);
for (int i = ; i <= DicItem.Value.Count; i++)
{
IRow row = sheet.CreateRow(RowIndex); if (i == DicItem.Value.Count)
{
for (int j = ; j < ; j++)
{
if (j == )
{
#region 汇总求和文字
ICell cell = row.CreateCell(j); DataRow TableRow = table.Rows[i - ];
string subName = TableRow[].ToString(); ICellStyle style = hssfworkbook.CreateCellStyle();
//设置边框
style.BorderTop = BorderStyle.THIN;
style.BorderBottom = BorderStyle.THIN;
style.BorderLeft = BorderStyle.THIN;
style.BorderRight = BorderStyle.THIN;
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.CENTER;
//新建一个字体样式对象
IFont font = hssfworkbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = ;
//设置字体加粗样式
font.Boldweight = (short)FontBoldWeight.BOLD;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//将新的样式赋给单元格
cell.CellStyle = style;
cell.SetCellValue(subName + " 汇总");
#endregion
}
else if (j == ) //合计
{
#region 汇总求和公式插入
ICell cell = row.CreateCell(j);
ICellStyle style = hssfworkbook.CreateCellStyle();
//设置边框
style.BorderTop = BorderStyle.THIN;
style.BorderBottom = BorderStyle.THIN;
style.BorderLeft = BorderStyle.THIN;
style.BorderRight = BorderStyle.THIN;
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.CENTER;
//新建一个字体样式对象
IFont font = hssfworkbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = ;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//将新的样式赋给单元格
cell.CellStyle = style; string format = "sum(";
for (int s = SumStartRows; s < (DicItem.Value.Count + SumStartRows); s++)
{
format += ("J" + s + ",");
}
format += ")"; cell.SetCellFormula(format); #endregion 汇总求和
}
else
{
#region 汇总求和-普通单元格
ICell cell = row.CreateCell(j);
ICellStyle style = hssfworkbook.CreateCellStyle();
//设置边框
style.BorderTop = BorderStyle.THIN;
style.BorderBottom = BorderStyle.THIN;
style.BorderLeft = BorderStyle.THIN;
style.BorderRight = BorderStyle.THIN;
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.CENTER;
//新建一个字体样式对象
IFont font = hssfworkbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = ;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//将新的样式赋给单元格
cell.CellStyle = style;
#endregion
}
}
}
else if (i < DicItem.Value.Count)
{
#region 插入值
DataRow TableRow = table.Rows[i];
for (int j = ; j < ; j++)
{
ICell cell = row.CreateCell(j);
ICellStyle style = hssfworkbook.CreateCellStyle();
//设置边框
style.BorderTop = BorderStyle.THIN;
style.BorderBottom = BorderStyle.THIN;
style.BorderLeft = BorderStyle.THIN;
style.BorderRight = BorderStyle.THIN;
//设置单元格的样式:水平对齐居中
style.Alignment = HorizontalAlignment.CENTER;
//设置单元格属性为文本
style.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
//新建一个字体样式对象
IFont font = hssfworkbook.CreateFont();
font.FontName = "宋体";
font.FontHeightInPoints = ;
//使用SetFont方法将字体样式添加到单元格样式中
style.SetFont(font);
//将新的样式赋给单元格
cell.CellStyle = style;
string val = TableRow[ColumnName[j]].ToString();
if (j == )
{
double cost = double.Parse(val);
cell.SetCellValue(cost);
}
else
{
cell.SetCellValue(val);
}
}
#endregion
}
RowIndex++;
}
}
for (int h = ; h < ; h++)
{
sheet.AutoSizeColumn(h); //会按照值的长短 自动调节列的大小
}
}
catch (Exception ex) { }
}
}
else
{
//创建Sheet页
ISheet sheet = hssfworkbook.CreateSheet();
}
string Path = Server.MapPath("~/upload/财务导出");
if (!System.IO.Directory.Exists(Path))
System.IO.Directory.CreateDirectory(Path);
string fileName = DateTime.Now.ToFileTime() + ".xls";
using (FileStream file = new FileStream(Path + "\\" + fileName, FileMode.Create))
{
hssfworkbook.Write(file); //创建test.xls文件。
file.Close();
result = ConfigurationManager.AppSettings["Websitet"] + "upload/财务导出/" + fileName;
}
HttpContext context = System.Web.HttpContext.Current;
context.Response.Write(result);
context.Response.End();
}
C# NPOI生成Excel文档(简单样式)的更多相关文章
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
结合上一篇文章 NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...
- 后台生成EXCEL文档,自定义列
后台生成EXCEL文档,自定义列 //response输出流处理 //设置编码.类型.文件名 getResponse().reset(); getResponse().setCharacterEnco ...
- php用PHPExcel库生成Excel文档的例子
<?php require_once '../libs/PHPWord/PHPWord.php'; require_once '../libs/PHPWord/PHPWord/IOFactory ...
- POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)
POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- 【转】ExcelHelper类,用npoi读取Excel文档
//------------------------------------------------------------------------------------- // All Right ...
- java生成excel文档
要做一个后台自动化,要先预先生成一份文档,以下内容生成了文档 首先下载jxl.jar包,下载地址:http://download.csdn.net/detail/prstaxy/4469935 1.生 ...
- Python openpyxl : Excel 文档简单操作
安装方法 使用 pip 或通过专门python IDE(如pyCharm)进行安装 其中pip安装方法,命令行输入: pip install openpyxl 基本使用 第一步先是要导入 openp ...
- java、ruby、python、php等如何生成excel文档?
excel在我们日常工作生活中会经常用到,通常我们都是用office软件去编写文档.但是对于格式一致的excel文档,如果还是使用人工完成,那绝不是我们软件工程师的姿态了~ 下面我就介绍一种方法,不需 ...
随机推荐
- 【巷子】---react-redux---【react】
一.Redux与组件 react-redux是一个第三方插件使我们在react上更方便的来使用redux这个数据架构 React-Redux提供connect方法,用于从UI组件生成容器组件,conn ...
- android利用provider查询同一个数据库中没有对外暴露出来的表
[原创]转载请加本篇博客地址http://www.cnblogs.com/scarecrow-blog/p/6266042.html 个人感觉这是android provider 的一个漏洞, 废话少 ...
- 实现java随机数Random的几招
一,在java.util这个包里面提供了一个Random的类,我们可以新建一个Random的对象来产生随机数,可以产生随机整数.随机float.随机double,随机long,这个也是我们经常用的一个 ...
- 玄学曲线并不玄 教你如何看懂GPU呈现
红色代表了“执行时间”,它指的是Android渲染引擎执行盒子中这些绘制命令的时间,假如当前界面的视图越多,那么红色便会“跳”得越高.实际使用中,比如我们平时刷淘宝App时遇到出现多张缩略图需要加载时 ...
- Hadoop 新增删除节点
1 新增Data节点 1.1 修改/etc/hosts,增加datanode的ip 1.2 在新增加的节点启动服务 hadoop-daemon.sh start datanode yarn-daemo ...
- [UE4]统一颜色
这里说的统一颜色,说的是每个玩家看到另外的一个玩家的颜色都是一致的,而不是同一个队伍相同的颜色. 一.同样的在ShooterPlayerState中添加一个变量Color(队伍颜色),设置为可复制. ...
- [UE4]把枪打飞addImpulse
一.武器如果没有开启模拟物理,会漂浮在空中 二.武器开启模拟物理,运行游戏的时候就会掉到地上了.之所以要加“Delay”延迟,是因为创建武器在先(没有持有人),持有武器动作在后,加上“delay”延迟 ...
- Android Gradle插件(plugin)版本(version)与Gradle、SDK Build Tools版本关系
具体关系如下图: 比如,Android Studio 2.0发布,其中有个新功能“Instant Run”,需要Android Gradle Plugin版本2.0.0以上,那么我们项目的.gradl ...
- Jensen不等式
- JS一个算法题
题目:实现超出整数存储范围的两个大整数想加function(a,b).注意:参数a和b以及函数返回值都是字符串. 目的:考算法, 基本逻辑. 我实现的基本思路是: ①两个数字字符串长度补成一样,用字符 ...