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 ...
随机推荐
- Spring的三种依赖注入的方式
1.什么是依赖注入 依赖注入(Dependency Injection,简称DI),是IOC的一种别称,用来减少对象间的依赖关系. 提起依赖注入,就少不了IOC. IOC(Inversion of C ...
- Linux Mint操作系统安装
1,Linux 发行版 什么是Linux 发行版呢?这要从Linux 来源说起.Unix操作系统后期,开始收费和商业闭源了.一个叫Richard Stallman 的人就发起 GNU 计划,想模仿U ...
- 谈谈你对 keep-alive 的了解?
在做电商有关的项目中,当我们第一次进入列表页需要请求一下数据,当我从列表页进入详情页,详情页不缓存也需要请求下数据,然后返回列表页,这时候我们使用keep-alive来缓存组件,防止二次渲染,这样会大 ...
- SpringBoot 处理xss攻击
添加依赖 <!-- xss跨站脚本攻击 --> <dependency> <groupId>net.dreamlu</groupId> <arti ...
- Http基础协议
浏览器请求方法 http1.0定义了三种: GET: 向服务器获取资源,比如常见的查询请求 POST: 向服务器提交数据而发送的请求 Head: 和get类似,返回的响应中没有具体的内容,用于获取报头 ...
- Java 反射获取对象里的值
最近在负责邮件服务,里面会涉及到很多Email模板,这里我使用到了java的模板引擎:jetbrick-template,需要使用Map集合一个个往里面设置值,然后调用模板方法,进行替换.实体类一个个 ...
- 渐变边框文字效果?CSS 轻松拿捏!
今天,有个群友问了我这么一个问题,如果不想切图,是否有办法实现带渐变边框的字体效果?如下所示: 本文,就将尝试一下,在 CSS 中,我们可以如何尽可能的实现这种渐变边框字体效果. 元素叠加 首先,比较 ...
- Windows11下使用VcXsrv+xfce4实现图形化窗口
通过 sudo apt-get install xfce4-terminal sudo apt-get install xfce4 sudo service dbus restart 来安装所需要的软 ...
- 靶机: hard_socnet2
靶机: hard_socnet2 准备 靶机:https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova MD5 验证: 9d6bed1 ...
- 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包
本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...