C# 导出Excel NPOI 修改指定单元格的样式 或者行样式
参考文章:原文链接:https://blog.csdn.net/chensirbbk/article/details/52189985
#region 2.NPOI读取Excel 验证Excel数据的有效性(非空) 并修改指定单元格样式
IWorkbook workbook = null;
ISheet sheet = null;
ArrayList questionRowIndex = new ArrayList();/*收集出现问题行的索引*/ using (FileStream fs = System.IO.File.Open(readExcelPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
#region 选择解析方式
if (dataLog.ExcelName.IndexOf(".xlsx") > 0)
{
workbook = new XSSFWorkbook(fs);
}
else if (dataLog.ExcelName.IndexOf(".xls") > 0)
{
workbook = new HSSFWorkbook(fs);
}
#endregion #region 核验数值列数据是否为空 并记录为空索引行 修改Excel指定索引行后重新保存 sheet = workbook.GetSheetAt(0);/*指定数据格式只读取索引值为0的第一个sheet*/
IRow row = null;
for (int j = 1; j < sheet.PhysicalNumberOfRows && sheet.GetRow(j) != null; j++)/*j=1 从索引的第一行开始过滤掉表头*/
{
row = sheet.GetRow(j);
if (string.IsNullOrWhiteSpace(row.GetCell(5).ToString()))/*验证数值非空*/
{
questionRowIndex.Add(j); /*修改样式关键代码*/
ICellStyle style = workbook.CreateCellStyle();
style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index;
style.FillPattern = FillPattern.SolidForeground;
style.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index; /*修改指定单元格样式 如果要修改行样式则需要将row.Cells.Count循环出来,挨个设置!*/ row.Cells[5].CellStyle = style; //for(int i=0;i<row.Cells.Count;i++) //{
// row.Cells[i].CellStyle = style; //} /*重新修改文件指定单元格样式*/
FileStream fs1 =
System.IO.File.OpenWrite(readExcelPath);
workbook.Write(fs1);
fs1.Close();
}
}
#endregion
}
实践代码:
private byte[] GetMonthBudgetInfoReport(List<MonthBudgetResponse> list)
{
try
{ string modelExlPath = Directory.GetCurrentDirectory() + "\\Template\\Equipment\\EquipmentMonthBudget.xlsx";
if (System.IO.File.Exists(modelExlPath) == false)//模板不存在
{
modelExlPath = AppContext.BaseDirectory + "Template\\Equipment\\EquipmentMonthBudget.xlsx";
if (System.IO.File.Exists(modelExlPath) == false)//模板不存在
{
throw new FriendlyException("未找到模板");
}
}
IWorkbook workBook = null;
using (FileStream file = new FileStream(modelExlPath, FileMode.Open, FileAccess.Read))
{
workBook = new XSSFWorkbook(file);
file.Close();
} XSSFSheet sheet = (XSSFSheet)workBook.GetSheetAt(0); //特定单元格样式 右对齐
ICellStyle cellstyle = workBook.CreateCellStyle();
cellstyle.Alignment = HorizontalAlignment.Right;
cellstyle.BorderTop = BorderStyle.Thin;
cellstyle.BorderBottom = BorderStyle.Thin;
cellstyle.BorderLeft = BorderStyle.Thin;
cellstyle.BorderRight = BorderStyle.Thin; //设置所有单元格统一的样式 添加边框线
ICellStyle allcellstyle = workBook.CreateCellStyle();
allcellstyle.BorderTop = BorderStyle.Thin;
allcellstyle.BorderBottom = BorderStyle.Thin;
allcellstyle.BorderLeft = BorderStyle.Thin;
allcellstyle.BorderRight = BorderStyle.Thin; var rowIndex = 1;
var cellIndex = 0;
if (list != null && list.Count > 0)
{
list.ForEach(x =>
{
IRow row = sheet.CreateRow(rowIndex);
row.HeightInPoints = 10 * 2;
row.CreateCell(cellIndex++).SetCellValue(x.ProjectName);
row.CreateCell(cellIndex++).SetCellValue(x.BudgetMonth.Value.ToString("yyyy-MM"));
row.CreateCell(cellIndex++).SetCellValue(x.TotalBuildAera.ToString());
row.CreateCell(cellIndex++).SetCellValue(x.BuildAera.ToString());
row.CreateCell(cellIndex++).SetCellValue(String.Format("{0:N2}", x.TotalBudget.Value));
row.CreateCell(cellIndex++).SetCellValue(String.Format("{0:N2}", x.MonthBudget.Value)); rowIndex++;
cellIndex = 0;
});
} #region 设置单元格样式
//行
for (int i = 1; i <= list.Count; i++)
{
//列
for (int j = 0; j < 6; j++)
{ sheet.GetRow(i).Cells[j].CellStyle = allcellstyle;
}
} //设置单元格样式
for (int i = 1; i <= list.Count; i++)
{
sheet.GetRow(i).Cells[2].CellStyle = cellstyle;
sheet.GetRow(i).Cells[3].CellStyle = cellstyle;
sheet.GetRow(i).Cells[4].CellStyle = cellstyle;
sheet.GetRow(i).Cells[5].CellStyle = cellstyle;
} #endregion MemoryStream ms = new MemoryStream();
workBook.Write(ms);
return ms.ToArray(); }
catch (Exception ex)
{
throw new FriendlyException("导出数据失败");
}
}
https://blog.csdn.net/qq_39541254/article/details/107935095
C# 导出Excel NPOI 修改指定单元格的样式 或者行样式的更多相关文章
- NPOI 修改指定单元格字体颜色
//创建一个字体颜色 IFont font = hssfworkbook.CreateFont(); //红色 font.Color = HSSFColor.Red.Index; //样式 ICell ...
- vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用
我用的方法是在表格的根组件外层赋一个div用来导出整个表格,所以antdesignvue.elementui.vxetable 或者原生的table写法应该全都适用,此处我用的框架为antdesign ...
- NPOI 在指定单元格导入导出图片
NPOI 在指定单元格导入导出图片 Intro 我维护了一个 NPOI 的扩展,主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求,于是就有了本文的探索 导入E ...
- 填报表导出excel非可写单元格锁定问题
问题描述: 填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对 ...
- 疑难杂症 | Excel VBA锁定指定单元格区域
背景:锁定EXCEL表头 一.手动操作流程 其基本逻辑并不赋值,手动操作流程是: 1.取消所有单元格的"锁定"格式 CTRL+A,选中全部的单元格→单击右键→设置单元格格式→保护→ ...
- NPOI导出Excel文件,对单元格的一些设置
HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...
- 使用poi导出Excel,并设定单元格内容类型,抛出异常
本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...
- ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作
1. 使用NPOI读取及生成excel表. (1)导出Click事件: 获取DataTable; 给文件加文件名: string xlsxName = "xxx_" + DateT ...
- C#修改 Excel指定单元格的值
/// <summary> /// 将指定字符串写入指定单元格中 /// </summary> /// <param name="data">要 ...
- NPOI插入图片到excel指定单元格
先看效果图 下载NPOI组件(2.0以上支持.xlsx和.xls的excel,2.0以下只支持.xls) NPOI下载官网http://npoi.codeplex.com 下载解压,里面有个dotne ...
随机推荐
- get基于报错的sql注入
get基于报错的sql注入发现 Less1: sqli-labs第一关提示说在网页上输入id,也就是?id=1. 但这个?是什么意思,它表示index.php?也就是默认页面.然后?id=1就是把id ...
- ubuntu16.04个性化配置
前言 记录一下个人配置,方便后续参考 正文 配置用户sudo免密权限 只建议在个人测试环境这么配置,否则最好root还是需要用密码确认一下 sudo su echo "你的用户名 ALL=( ...
- Mac下安装Redis,附可视化工具Medis
导读 我之前写过很多相关的redis的博文,有时候,为了开发,还得去虚拟机上搭建一个redis,感觉太麻烦了,为了做个demo,直接在自己mac本上安装一个即可. Redis 从入门到精通:点我直达 ...
- yb课堂实战之轮播图接口引入本地缓存 《二十一》
轮播图接口引入缓存 CacheKeyManager.java package net.ybclass.online_ybclass.config; /** * 缓存key管理类 */ public c ...
- MongoDB安装、基础操作和聚合实例详解
虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换. MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在ma ...
- vue2.x版本升级2.7版本
2022年7月1日,vue正式迎来2.7版本,代号:"Naruto".支持 Composition API + <script setup> .原文链接 也就是说,你可 ...
- 测试人必会 K8S 操作之 Dashboard
在云计算和微服务架构的时代,Kubernetes (K8S) 已成为管理容器化应用的标准.然而,对于许多新手来说,K8S 的操作和管理常常显得复杂而神秘.特别是,当你第一次接触 K8S Dashboa ...
- 解决方案 | Adobe Acrobat XI Pro 右键菜单“在Acrobat中合并文件”丢失的最佳修复方法
1.问题 Adobe Acrobat XI Pro右键菜单"转换为Adobe PDF"与"在Acrobat中合并文件" 不见了. 2.解决方案 桌面左下角搜索& ...
- 在该serializer中使用source参数指定序列化时使用的字段的choices选项
在序列化中获取time_unit字段的中文名称,你可以使用choices选项中定义的第二个值,即元组中的第二个元素.你可以通过定义一个serializer,然后在该serializer中使用sourc ...
- 软件设计 软件设计模式之SOLID原则
软件设计模式之SOLID原则 By:授客 QQ:1033553122 #单一职责原则(SRP) 定义:任何一个软件模块都只对某一类行为者负责 说明:这里"软件模块",在大部分情况下 ...