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 ...
随机推荐
- How to design a product table for many kinds of product where each product has many parameters
https://stackoverflow.com/questions/695752/how-to-design-a-product-table-for-many-kinds-of-product-w ...
- c#中关于协变性和逆变性(又叫抗变)帮助理解
今天回忆了之前看的<深入理解C#>这本书中的泛型章节,其中对泛型的可变性的理解.泛型可变性分两种:协变和逆变.逆变也又称为抗变. 怎么理解这两个名词的意思: ①:协变即为在泛型接口类型中使 ...
- HTML5 开发APP 第一章
当今天下,移动端基本上是安卓和苹果的天下,基本上没微软什么事,作为微软忠实的支持者,也要顺势而变. 但安卓和IOS 开发是两个完全不同的世界,有没有一种技术,开发完以后可以运行在任意终端呢,答案是有 ...
- html5 表格标签 table tr td
最重要的三个 <table> 表格声明标签 属性: boarder 边框粗细 style 可配合css 使用 <tr> 行标签 table row ...
- HashMap源码解析 非原创
Stack过时的类,使用Deque重新实现. HashCode和equals的关系 HashCode为hash码,用于散列数组中的存储时HashMap进行散列映射. equals方法适用于比较两个对象 ...
- 【转】WinForm多线程学习文档
源地址:https://www.cnblogs.com/jianglai11/articles/1708330.html 想学习更多,看<Windows 核心编程>
- leecode刷题(15)-- 验证回文字符串
leecode刷题(15)-- 验证回文字符串 验证回文字符串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 ...
- BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)
传送门 完了今天才知道原来线段树的动态开点和主席树是不一样的啊 我们先考虑没有宗教信仰的限制,那么就是一个很明显的树剖+线段树,路径查询最大值以及路径和 然后有了宗教信仰的限制该怎么做呢? 先考虑暴力 ...
- 浅谈Android选项卡(一)
选项卡,这样UI设计在很多方面都存在,window,web,ios,Android. 选项卡的主要作用,不用多介绍,可以在有线的空间内,显示出更多内容,同时也是操作起来也很方便.
- POJ3074 Sudoku
POJ3074 Sudoku 与POJ2676相比,这一题搜索时每一步都找到最好确定的点进行枚举 对于每行.每列.每个九宫格,都分别用一个9位二进制数保存还有那些数还可以填 对于每个位置,将其所在行. ...