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 ...
随机推荐
- arm linux 移植 curl
背景 libcurl是一个跨平台的开源网络协议库,支持http, https, rtsp等多种协议 .libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, ...
- Log4Net配置详解及输出自定义消息类示例
1.简单使用实例 1.1 添加log4net.dll的引用. 在NuGet程序包中搜索log4net并添加,此次我所用版本为2.0.17.如下图: 1.2 添加配置文件 右键项目,添加新建项, ...
- AT_abc317_f 题解
调了一小时结果发现爆 long long 了. 考虑数位 dp,具体来说,设计状态 \(dp_{i,r_1,r_2,r_3,mx_1,mx_2,mx3_,c_1,c_2,c_3}\) 表示当前考虑到第 ...
- 韦东山freeRTOS系列教程之【第八章】事件组(event group)
目录 系列教程总目录 概述 8.1 事件组概念与操作 8.1.1 事件组的概念 8.1.2 事件组的操作 8.2 事件组函数 8.2.1 创建 8.2.2 删除 8.2.3 设置事件 8.2.4 等待 ...
- ubuntu podman相关
前言 记录podman的安装.配置以及一些常用操作,会不定时更新: 正文 1. podman 安装以及配置 ubuntu 安装 podman sudo apt update sudo apt inst ...
- Oracle ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
转载☞:https://blog.csdn.net/qq_25221835/article/details/82762416 ROW_NUMBER 语法 语法格式:row_number() over( ...
- 算法金 | 来了,pandas 2.0
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 210+/10000,内含 Pandas 是一个强大的数据分析库,广泛应用于科学 ...
- 深入理解 React 的 useSyncExternalStore Hook
深入理解 React 的 useSyncExternalStore Hook 大家好,今天我们来聊聊 React 18 引入的一个新 Hook:useSyncExternalStore.这个 Hook ...
- leetcode简单(矩阵):[566, 766, 832, 867, 999, 1030, 1261, 1275, 1337, 1351]
目录 566. 重塑矩阵 766. 托普利茨矩阵 832. 翻转图像 867. 转置矩阵 999. 可以被一步捕获的棋子数 1030. 距离顺序排列矩阵单元格 1260. 二维网格迁移 1275. 找 ...
- 可视化—AntV G6实现节点连线及展开收缩分组
AntV 是蚂蚁金服全新一代数据可视化解决方案,主要包含数据驱动的高交互可视化图形语法G2,专注解决流程与关系分析的图表库 G6.适于对性能.体积.扩展性要求严苛的场景. demo使用数字模拟真实的节 ...