效果图:

代码: 

/// <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文档(简单样式)的更多相关文章

  1. 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 ...

  2. 后台生成EXCEL文档,自定义列

    后台生成EXCEL文档,自定义列 //response输出流处理 //设置编码.类型.文件名 getResponse().reset(); getResponse().setCharacterEnco ...

  3. php用PHPExcel库生成Excel文档的例子

    <?php require_once '../libs/PHPWord/PHPWord.php'; require_once '../libs/PHPWord/PHPWord/IOFactory ...

  4. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

      POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...

  5. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  6. 【转】ExcelHelper类,用npoi读取Excel文档

    //------------------------------------------------------------------------------------- // All Right ...

  7. java生成excel文档

    要做一个后台自动化,要先预先生成一份文档,以下内容生成了文档 首先下载jxl.jar包,下载地址:http://download.csdn.net/detail/prstaxy/4469935 1.生 ...

  8. Python openpyxl : Excel 文档简单操作

    安装方法 使用 pip 或通过专门python IDE(如pyCharm)进行安装 其中pip安装方法,命令行输入:  pip install openpyxl 基本使用 第一步先是要导入 openp ...

  9. java、ruby、python、php等如何生成excel文档?

    excel在我们日常工作生活中会经常用到,通常我们都是用office软件去编写文档.但是对于格式一致的excel文档,如果还是使用人工完成,那绝不是我们软件工程师的姿态了~ 下面我就介绍一种方法,不需 ...

随机推荐

  1. Winform Chart

    Chart图表解释说明: 第一步:使用VS创建Winform项目: 第二步:工具箱中拖入Chart控件: 第三步:所有控件拖入其他控件如下图所示: using System; using System ...

  2. 在CAD二次开发中使用状态条按钮

    Pane pane = new Pane(); pane.Enabled = true; pane.Text = "状态条按钮"; pane.ToolTipText = " ...

  3. Eclipse安装Markdown插件

    Markdown Editor 安装Markdown插件可以实现 .md 和 .txt 文件的 Markdown 语法高亮,并提供 HTML 预览. 因为之前没有安装过别的插件,eclipse上安装插 ...

  4. vue之v-if和v-show

    v-if v-if主要用来进行条件渲染. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. reids(缓存,reids下载,安装 测试)

    什么是缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快得多,故缓存的作用 ...

  6. IDC:时钟系统

    ylbtech-IDC:时钟系统 主要应用于要求有统一时间进行生产,调度的单位如:电力,机场.轻轨.地铁.体育场馆.酒店.医院.部队.油田.水利工程等领域.大区域时钟系统主要由母钟和多台子钟构成. 1 ...

  7. [译] OpenStack Ocata 版本中的 53 个新功能盘点

    原文链接:https://www.mirantis.com/blog/53-new-things-to-look-for-in-openstack-ocata/ 原文作者:Nick Chase, Ra ...

  8. visual studio中新建和使用dll

    本文的目的是 创建一个最小化的dll并使用它 环境:win7 + vs2012 一个VS的解决方案(sln)下面可以有多个项目(project),所以这里新建一个解决方案,然后下面创建两个项目. 新建 ...

  9. 关于display:inline-block的文章

    在淘宝UED博客里看到一篇关于display:inline-block的文章,有点啰嗦,反正我没看完,但是里面有些观点还是写得挺好的,直接贴地址mark一下.   文章地址:http://ued.ta ...

  10. [UE4]UniformGirdPanel