NPOI 设置导出的excel内容样式
导出excel时,有时要根据需要加上一些样式,以上几种样式是我在项目中用到的
一、给单元格加背景色只需两步:一是创建单元格背景景色对象;二是给单元格绑定样式
//创建单元格背景颜色对象
HSSFPalette palette = wb.GetCustomPalette(); //调色板实例 palette.SetColorAtIndex(HSSFColor.Orange.Index, (byte), (byte), (byte));
HSSFColor hssFColor = palette.FindColor((byte), (byte), (byte)); ICellStyle cellStyleGround = wb.CreateCellStyle(); cellStyleGround.FillPattern = FillPattern.SolidForeground; //老版本可能这样写FillPatternType.SOLID_FOREGROUND;
cellStyleGround.SetFont(cs_content_Font);
cellStyleGround.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cellStyleGround.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
cellStyleGround.FillForegroundColor = hssFColor.Indexed;
//给单元格绑定样式
cell.CellStyle = cellStyleGround;
二、给单元格内的字加上样式
//创建工作簿
HSSFWorkbook wb = new HSSFWorkbook();
//创建工作表
HSSFSheet sheet = wb.createSheet();
//为工作表添加行
HSSFRow row = sheet.createRow();
//添加单元格
HSSFCell cell = row.createCell();
//创建字体
HSSFFont ftRed = wb.createFont();
ftRed.setStrikeout(true);
ftRed.setColor(HSSFColor.RED.index);
HSSFFont ftBlue = wb.createFont();
ftBlue.setColor(HSSFColor.BLUE.index);
//往单元格中写入的内容,并使用ft格式化"second"单词
String[] subStr = {
"first", "second"
};
String sText = subStr[] + "," + subStr[];
HSSFRichTextString textString = new HSSFRichTextString(sText);
textString.applyFont(
sText.indexOf(subStr[]),
sText.indexOf(subStr[]) + subStr[].length(),
ftRed
);
textString.applyFont(
sText.indexOf(subStr[]),
sText.indexOf(subStr[]) + subStr[].length(),
ftBlue
);
cell.setCellValue(textString);
三、附项目中用到的代码
private void ExportAllPlan(HttpContext context)
{
string title = DateTime.Now.AddYears().Year.ToString() + "年度领导人员因公出国(境)计划表";
HSSFWorkbook wb = new HSSFWorkbook();//创建工作薄
HSSFSheet sheet = (HSSFSheet)wb.CreateSheet(title); //创建工作表 //设置列头样式
HSSFCellStyle cs_Title = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式
cs_Title.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cs_Title.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
HSSFFont cs_Title_Font = (HSSFFont)wb.CreateFont(); //创建字体
cs_Title_Font.FontHeightInPoints = ; //字体大小
cs_Title_Font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
cs_Title.SetFont(cs_Title_Font); //将字体绑定到样式
//设置列宽
for (int i = ; i < ; i++)
{
sheet.SetColumnWidth(i, * );
} //创建列头1行
HSSFRow row_Title_One = (HSSFRow)sheet.CreateRow();
string[] titleStr_One = { title, "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" };
//设置列头样式
HSSFCellStyle cs_Title_one = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式
cs_Title_one.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cs_Title_one.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
HSSFFont cs_Title_Font_one = (HSSFFont)wb.CreateFont(); //创建字体
cs_Title_Font_one.FontHeightInPoints = ; //字体大小
cs_Title_Font_one.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
cs_Title_one.SetFont(cs_Title_Font_one); //将字体绑定到样式 for (int i = ; i < titleStr_One.Length; i++)
{
HSSFCell cell_Title = (HSSFCell)row_Title_One.CreateCell(i); //创建单元格
row_Title_One.Height = *;
cell_Title.CellStyle = cs_Title_one; //将样式绑定到单元格
cell_Title.SetCellValue(titleStr_One[i]);
}
//合并
sheet.AddMergedRegion(new CellRangeAddress(, , , )); //创建列头2行
HSSFRow row_Title_Two = (HSSFRow)sheet.CreateRow();
string[] titleStr_Two = { "分类", "单位名称", "上年计划总数", "上年执行计划数", "上年计划外团组数", "今年申报总数", "压缩调整总数", "取消总数", "计划明细", "", "", "", "", "", "", "", "", "", "合作交流处意见", "俄罗斯处意见", "美洲亚太处意见", "西亚非洲处意见" }; //填充列头内容
for (int i = ; i < titleStr_Two.Length; i++)
{
HSSFCell cell_Title = (HSSFCell)row_Title_Two.CreateCell(i); //创建单元格
cell_Title.CellStyle = cs_Title; //将样式绑定到单元格
cell_Title.SetCellValue(titleStr_Two[i]);
}
//合并
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , )); sheet.AddMergedRegion(new CellRangeAddress(, , , )); sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
sheet.AddMergedRegion(new CellRangeAddress(, , , ));
//创建列头3行
HSSFRow row_Title_Three = (HSSFRow)sheet.CreateRow();
string[] titleStr_Three = { "", "", "", "", "", "", "", "", "序号", "姓名", "职务", "任务名称", "前往国家", "启程时间(月)", "任务类别", "必要性说明", "备注", "处理意见", "", "", "", "" }; //填充列头内容
for (int i = ; i < titleStr_Three.Length; i++)
{
HSSFCell cell_Title = (HSSFCell)row_Title_Three.CreateCell(i); //创建单元格
cell_Title.CellStyle = cs_Title; //将样式绑定到单元格
cell_Title.SetCellValue(titleStr_Three[i]);
} try
{
//设置单元格内容样式
HSSFCellStyle cs_content = (HSSFCellStyle)wb.CreateCellStyle(); //创建列头样式
cs_content.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cs_content.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
HSSFFont cs_content_Font = (HSSFFont)wb.CreateFont(); //创建字体
cs_content_Font.FontHeightInPoints = ; //字体大小
cs_content.SetFont(cs_content_Font); //将字体绑定到样式 //创建单元格背景颜色对象
HSSFPalette palette = wb.GetCustomPalette(); //调色板实例 palette.SetColorAtIndex(HSSFColor.Orange.Index, (byte), (byte), (byte));
HSSFColor hssFColor = palette.FindColor((byte), (byte), (byte)); ICellStyle cellStyleGround = wb.CreateCellStyle(); cellStyleGround.FillPattern = FillPattern.SolidForeground; //老版本可能这样写FillPatternType.SOLID_FOREGROUND;
cellStyleGround.SetFont(cs_content_Font);
cellStyleGround.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center; //水平居中
cellStyleGround.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center; //垂直居中
cellStyleGround.FillForegroundColor = hssFColor.Indexed; //获取计划数据
List<PlanToReport> plans = PlanToReportService.GetPlanByYear(DateTime.Now.AddYears().Year.ToString());
//出国处导出的大表中,只导出提交给出国处处长及以后流程的计划,提交给出国处处长之前的计划不导出
for (int i = ; i < plans.Count; i++)
{
StateMachineWorkflowInstance workflow = WorkflowRuntime.Current.GetRoot("PLANAPPLY", plans[i].ID);
string currState = workflow.CurrentState.Name;
string[] NoCanExportExcelPlan = ConfigurationManager.AppSettings["NoCanExportExcelPlanState"].Split(',');
for (int j = ; j < NoCanExportExcelPlan.Length; j++)
{
if (currState.Trim() == NoCanExportExcelPlan[j].Trim())
{
plans.RemoveAt(i);
continue;
}
} }
plans.Sort(new PlanToReportComparer());
int unitCategoryfistRow = ;
int planDiffRow = ;
int unitDiffRow = ;
int resultDifRow = ;
string tempCategory = string.Empty;
string tempUnitInfo = string.Empty;
string tempApprovalResult = string.Empty;
int colmNo = ;
for (int k = ; k < plans.Count; k++)
{
PlanToReport plan = plans[k];
UnitInfoBase unit = OilDigital.CGGL.BLL.UnitService.GetUnitByCode(plan.PlanUnitCode);
string[] planStr = { unit.Category.Name, unit.Name, plan.LastYearPlanSum.ToString(), plan.LastYearCarryOut.ToString(), plan.LastYearUnplanned.ToString(), PlanToReportService.GetPersonInPlan(plan.ID).Count.ToString(), plan.CompressTotal.ToString(), plan.CancelTotal.ToString() }; List<PlanPerson> persons = PlanToReportService.GetPersonInPlan(plan.ID);
persons.Sort(new PlanPersonComparer());
int indexNo = ; for (int i = ; i < persons.Count; i++)
{
PlanPersonApprovalService pps = new PlanPersonApprovalService();
// 取消审批
bool isDelete = pps.GetPlanPersonApprovalByIdAndType(persons[i].ID, "deletePerson") !=null;
//审批国家
PlanPersonApproval approvalCountry = pps.GetPlanPersonApprovalByIdAndType(persons[i].ID,"country");
bool hasAppCountry = approvalCountry != null;
//审批人员
PlanPersonApproval approvalPerson = pps.GetPlanPersonApprovalByIdAndType(persons[i].ID, "person");
bool hasAppPerson = approvalPerson != null; string[] personStr = { indexNo.ToString(), persons[i].Name, persons[i].Position, persons[i].JobName, persons[i].CountryName, persons[i].StartDate, persons[i].MissionType.ToString(), persons[i].Explain, persons[i].Remark, persons[i].ApprovalResults };
HSSFRow row = (HSSFRow)sheet.CreateRow(i + unitCategoryfistRow);
bool isMergedplan = false;
bool isMergedunit = false;
bool isMergedApprovalResult = false;
for (int j = ; j < ; j++)
{
HSSFCell cell = (HSSFCell)row.CreateCell(j);
cell.CellStyle = cs_content;
/*
* 导出数据时总体说明:
*填充数据8-16为人员数据,0-7和17-22为计划数据
*合并处理规则是:如果当前行和上一行不相同就合并上一行所有相同的,并对最后一行数据时行特殊处理。
*/
//1、填充计划数据
if (j >= && j <= )
{ //填充第一行时用计划数据 cell.SetCellValue(planStr[j]);
if (j == )
{
if (colmNo != && !tempCategory.Equals(planStr[j]))
{
sheet.AddMergedRegion(new CellRangeAddress(planDiffRow, colmNo - , j, j));
isMergedplan = true;
}
if (k == plans.Count - && i == persons.Count - )
{
sheet.AddMergedRegion(new CellRangeAddress(planDiffRow, colmNo, j, j));
isMergedplan = true;
}
}
if (j > )
{
if (colmNo != && !tempUnitInfo.Equals(planStr[]))
{
sheet.AddMergedRegion(new CellRangeAddress(unitDiffRow, colmNo - , j, j));
isMergedunit = true;
}
if (k == plans.Count - && i == persons.Count - )
{
sheet.AddMergedRegion(new CellRangeAddress(unitDiffRow, colmNo, j, j));
isMergedunit = true;
}
} }
//2、填充人员数据
else if (j >= && j <= )
{
if (j == )
{
cell.SetCellValue(new MissionTypeService().GetById(int.Parse(personStr[j - ])).Name);
}
else if (j == && hasAppCountry)
{
cell.SetCellValue(FmatterCellValue(persons[i], wb, "country"));
}
else if (j == && hasAppPerson)
{
cell.SetCellValue(FmatterCellValue(persons[i], wb, "person"));
}
else if (j == )
{
string cellval = persons[i].ApprovalResults;
if (!string.IsNullOrEmpty(persons[i].ApprovalResults))
{
cellval = persons[i].ApprovalResults.IndexOf("选0") > ? "合并" : persons[i].ApprovalResults;
} cell.SetCellValue(cellval);
// if (colmNo != 3 && !tempApprovalResult.Equals(new PlanProcess().GetFmatterApprovalResult(persons[i])) && !string.IsNullOrEmpty(new PlanProcess().GetFmatterApprovalResult(persons[i])))
if (colmNo != && !tempApprovalResult.Equals(new PlanProcess().GetFmatterApprovalResult(persons[i])))
{
sheet.AddMergedRegion(new CellRangeAddress(resultDifRow, colmNo - , j, j));
isMergedApprovalResult = true;
}
if (k == plans.Count - && i == persons.Count - )
{
sheet.AddMergedRegion(new CellRangeAddress(resultDifRow, colmNo, j, j));
isMergedApprovalResult = true;
}
if (!string.IsNullOrEmpty(persons[i].ApprovalResults))
{
cell.CellStyle = cellStyleGround;
}
// cell.SetCellValue(new PlanProcess().GetFmatterApprovalResult(persons[i]));
}
else
{
cell.SetCellValue(personStr[j - ]);
}
if (isDelete && j != )
{
cell.CellStyle = cellStyleGround;
} }
//3、填充意见数据
else
{
cell.SetCellValue("");
if (j > && tempUnitInfo.Equals(planStr[]))
{
sheet.AddMergedRegion(new CellRangeAddress(i + unitCategoryfistRow - , i + unitCategoryfistRow, j, j));
}
} }
if (isMergedplan) planDiffRow = colmNo;
if (isMergedunit) unitDiffRow = colmNo;
if (isMergedApprovalResult) resultDifRow = colmNo;
tempCategory = planStr[];
tempUnitInfo = planStr[];
tempApprovalResult = new PlanProcess().GetFmatterApprovalResult(persons[i]);
indexNo++;
colmNo++;
}
unitCategoryfistRow += persons.Count;
} }
catch (Exception ex)
{ throw new Exception("导出计划出错,原因:" + ex.Message);
} HttpResponse httpResponse = HttpContext.Current.Response;
httpResponse.Clear();
httpResponse.Buffer = true;
httpResponse.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(title + ".xls"));
httpResponse.ContentEncoding = Encoding.UTF8;
httpResponse.ContentType = "application/vnd.ms-excel; charset=UTF-8";
wb.Write(httpResponse.OutputStream);
httpResponse.End();
} //
private HSSFRichTextString FmatterCellValue(PlanPerson p, HSSFWorkbook wb, string FmatterType)
{
PlanPersonApproval approval = new PlanPersonApprovalService().GetPlanPersonApprovalByIdAndType(p.ID, FmatterType); StringBuilder countryName = new StringBuilder();
string[] selectCountry = approval.ApprovalResult.Split('、');
string[] allCountry = null;
if (FmatterType == "country")
{
allCountry = p.CountryName.Split('、');
}
if (FmatterType == "person")
{
allCountry = p.Name.Split('、');
} string needDeleteCountry = string.Empty;
for (int i = ; i < allCountry.Length; i++)
{
bool flag = true;
for (int j = ; j < selectCountry.Length; j++)
{
if (allCountry[i].Trim() == selectCountry[j].Trim())
{
flag = false;
}
}
if (flag)
{
if (string.IsNullOrEmpty(needDeleteCountry))
{
needDeleteCountry = allCountry[i];
}
else
{
needDeleteCountry += "、" + allCountry[i];
} }
}
String[] subStr = {
approval.ApprovalResult, needDeleteCountry
}; //创建字体
HSSFFont ftRed = (HSSFFont)wb.CreateFont();
ftRed.IsStrikeout=true;
ftRed.Color=HSSFColor.Red.Index;
ftRed.FontHeightInPoints = ;
String sText = subStr[] + "、" + subStr[];
HSSFRichTextString textString = new HSSFRichTextString(sText); textString.ApplyFont(
sText.IndexOf(subStr[]),
sText.IndexOf(subStr[]) + subStr[].Length,
ftRed
);
return textString;
}
NPOI 设置导出的excel内容样式的更多相关文章
- 设置导出的excel数据
/** * 设置导出的excel数据 * @param type $objPHPExcel * @param type $colModel * @param type $grid */public f ...
- c#使用NPOI快速导出到Excel
接上篇博文<C#快速导出到excel>:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI. 参考:https://www.cnblogs.com/lazyneal/ ...
- 表格导出到excel的样式消失该如何修改
工作中遇到一需求,要将后台的表格导出到excel后的表格样式该如何修改呢? 其实表格导出首先需要了解两个插件:jquery.table2excel.js和tableExport.js 1.第一步,写一 ...
- c#.net 使用NPOI导入导出标准Excel (asp.net winform csharp)
尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...
- ASP.NET- 使用NPOI导入导出标准Excel
尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...
- 使用NPOI导入导出标准Excel
尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...
- 使用NPOI快速导出导入Excel
这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...
- 使用POI设置导出的EXCEL锁定指定的单元格
注:要锁定单元格需先为此表单设置保护密码,设置之后此表单默认为所有单元格锁定,可使用setLocked(false)为指定单元格设置不锁定. sheet.protectSheet("&quo ...
- 工作总结 npoi 模板 导出公式 excel
Apache POI(5):公式(formula) Apache POI(5):公式(formula) 2016年08月01日 17:44:49 阅读数:1145 package com.hthk ...
随机推荐
- [python] [转]如何自动生成和安装requirements.txt依赖
[转]如何自动生成和安装requirements.txt依赖 在查看别人的Python项目时,经常会看到一个requirements.txt文件,里面记录了当前程序的所有依赖包及其精确版本号.这个文件 ...
- Linux 部署.Net Core 项目
前面也有说到,我学习Linux 主要因为要学习一下部署.NET CORE项目到Linux 系统,这里就记录一下部署的详细步骤吧. 主要需要安装以下几个工具 1..NET CORE SDK 2.Jexu ...
- 使用docker部署java项目
在接触了docker后,干什么都想用docker来弄.最近刚做完毕业设计,本来是说将项目简单在本地部署就行了,结果老师说如果部署在服务器的话有加加分,于是果断用docker来搞,多加点分. java项 ...
- 理解图像Garbor和HOG特征的提取方法及实例应用
前言:今天接触到了这两个特征,看了课本和博客后很蒙蔽,没有理解这两个特征,本篇博客的目的是只是参考其他的博客总结这两个特征,如果未来能研究和工作领域是这方面的话再回来自己研学,如有错误也欢迎指出. G ...
- python设计模式-适配器
定义: 将一个接口转换为客户希望的另一个接口,该模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式又叫变压器模式,也叫包装模式(Wrapper),它的核心思想是将一个对象经过包装 ...
- [arc082f]Sandglass 递推
Description 有一个沙漏由两个上下相通玻璃球A和B构成,这两个玻璃球都含有一定量的沙子,我们暂且假定AB中位于上方的玻璃球的为U,下方的玻璃球为L,则除非U中没有沙子,否则每秒钟都会有1克沙 ...
- UIView之setNeedsDisplay与drawRect 和 setNeedsLayout与layoutSubViews
1.UIView的setNeedsDisplay和setNeedsLayout方法 首先两个方法都是异步执行的.而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到 UI ...
- Python3之collections模块
简介 collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple namedtuple 是一个函数,它用来创建一个自定义的元组对象,并且规定了元组元素的个数 ...
- 在使用Vue搭建前端服务器时,路由出现#号的解决办法
路由模式解析 这里要讲vue-router的路由模式,首先要了解的一点就是路由是由多个URL组成的,使用不同的URL可以相应的导航到不同的位置.如果有进行过服务器开发或者对http协议有所了解就会知道 ...
- c#中的引用类型和值类型
一,c#中的值类型和引用类型 众所周知在c#中有两种基本类型,它们分别是值类型和引用类型:而每种类型都可以细分为如下类型: 什么是值类型和引用类型 什么是值类型: 进一步研究文档,你会发现所有的结构都 ...