参考文章:原文链接: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 修改指定单元格的样式 或者行样式的更多相关文章

  1. NPOI 修改指定单元格字体颜色

    //创建一个字体颜色 IFont font = hssfworkbook.CreateFont(); //红色 font.Color = HSSFColor.Red.Index; //样式 ICell ...

  2. vue 利用xlsx、xlsx-style、file-saver实现前端导出excel表格 (包括设置单元格居中、边框等样式) antdesignvue、elementui、vxetable 等都适用

    我用的方法是在表格的根组件外层赋一个div用来导出整个表格,所以antdesignvue.elementui.vxetable 或者原生的table写法应该全都适用,此处我用的框架为antdesign ...

  3. NPOI 在指定单元格导入导出图片

    NPOI 在指定单元格导入导出图片 Intro 我维护了一个 NPOI 的扩展,主要用来导入导出 Excel 数据,最近有网友提出了导入 Excel 的时候解析图片的需求,于是就有了本文的探索 导入E ...

  4. 填报表导出excel非可写单元格锁定问题

     问题描述: 填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对 ...

  5. 疑难杂症 | Excel VBA锁定指定单元格区域

    背景:锁定EXCEL表头 一.手动操作流程 其基本逻辑并不赋值,手动操作流程是: 1.取消所有单元格的"锁定"格式 CTRL+A,选中全部的单元格→单击右键→设置单元格格式→保护→ ...

  6. NPOI导出Excel文件,对单元格的一些设置

    HSSFWorkbook book = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); ISheet sheet = book.Cr ...

  7. 使用poi导出Excel,并设定单元格内容类型,抛出异常

    本例子使用的是HSSF,为Excel2003提供处理方案. 设定为输入类型为数值 import org.apache.poi.hssf.usermodel.DVConstraint; import o ...

  8. ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作

    1. 使用NPOI读取及生成excel表. (1)导出Click事件: 获取DataTable; 给文件加文件名: string xlsxName = "xxx_" + DateT ...

  9. C#修改 Excel指定单元格的值

    /// <summary> /// 将指定字符串写入指定单元格中 /// </summary> /// <param name="data">要 ...

  10. NPOI插入图片到excel指定单元格

    先看效果图 下载NPOI组件(2.0以上支持.xlsx和.xls的excel,2.0以下只支持.xls) NPOI下载官网http://npoi.codeplex.com 下载解压,里面有个dotne ...

随机推荐

  1. python爬虫-request模块

    1. requests 中的请求方法 HTTP 请求方法: requests.get(url, params=None, **kwargs) # GET 请求 requests.post(url, d ...

  2. Nuxt3 的生命周期和钩子函数(七)

    title: Nuxt3 的生命周期和钩子函数(七) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:文章阐述了Nuxt ...

  3. 一个难忘的json反序列化问题

    前言 最近我在做知识星球中的商品秒杀系统,昨天遇到了一个诡异的json反序列化问题,感觉挺有意思的,现在拿出来跟大家一起分享一下,希望对你会有所帮助. 案发现场 我最近在做知识星球中的商品秒杀系统,写 ...

  4. WPF实现TextBlock呼吸灯效果

    实现代码 <TextBlock Text="录像中" FontSize="48" Foreground="#ED4646" Horiz ...

  5. leetcode简单(数组、字符串):[219, 268, 349, 414, 485, 541, 557, 821, 925, 977]

    目录 219. 存在重复元素 268. 丢失的数字 349. 两个数组的交集 414. 第三大的数 485. 最大连续 1 的个数 541. 反转字符串 II 557. 反转字符串中的单词 III 8 ...

  6. [oeasy]python0129_unicode_中文字符序号_十三道大辙_字符编码解码_eval_火星文

    unicode 中文字符分类 回忆上次内容 字符集 从博多码 到 ascii 再到 iso-8859 系列 各自割据   如何把世界上各种字符统进行编码 unicode顺势而生不断进化 不过字符总量超 ...

  7. [oeasy]python0013_ASCII码表_英文字符编码_键盘字符

    ​ ASCII 码表 回忆上次内容 ​ord(c)​​和​​chr(i)​ 这是俩函数 这俩函数是一对,相反相成的⚖️ ​​ord​​ 通过 ​​字符​​ 找到对应的 ​​数字​​ ​​chr​​ 通 ...

  8. 「模拟赛」暑期集训CSP提高模拟4(7.21)

    很祭的一次比赛,啥也不会. 题目列表: A.White and Black B.White and White C.Black and Black D.Black and White A.White ...

  9. 使用with 还是 join

    用分解关联查询的方式查询具有以下优势:多次单表查询,让缓存的效率更高:许多应用程序可以方便地缓存单表查询对应的结果对象.对 MYSQL 的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询 ...

  10. 对比python学julia(第三章:游戏编程)--(第四节)捕鱼达人(5)

    4.3.    编程实现 (续上) 3. 实现射击捕鱼 在第 3 个阶段,将按照"编程思路"中介绍的射击捕鱼的算法进行编程,实现让玩家操控大炮射击捕鱼.在"bydr&qu ...