关于Npoi+excel文件读取,修改文件内容的处理方式
因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓
// 要操作的excel文件路径
string fileName = Server.MapPath("~/Content/test.xlsx");
if (!System.IO.File.Exists(fileName)) return Content("文件不存在!");
IWorkbook workbook; //把文件内容导入到工作薄当中,然后关闭文件
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite); workbook = WorkbookFactory.Create(fs);
fs.Close();//编辑工作薄当中内容
ISheet sheet = workbook.GetSheetAt(); //workbook.GetSheetAt(0).GetRow(0).Cells[0].SetCellValue("TestCell");
for (int i = ; i <= sheet.LastRowNum; i++)
{
foreach (ICell cell in sheet.GetRow(i).Cells)
{
cell.SetCellType(cell.CellType);
if (cell.CellType == CellType.Numeric)
{
if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
{
cell.SetCellValue(cell.DateCellValue.ToString());
}
else//其他数字类型
{
cell.SetCellValue(cell.NumericCellValue.ToString());
}
}
else
{
cell.SetCellValue(cell.StringCellValue.ToString());
}
}
if (i != )
{
ICell firstCell = sheet.GetRow(i).Cells[];
firstCell.SetCellType(firstCell.CellType);
var cellValue = firstCell.StringCellValue.ToDecimal().ToString();
firstCell.SetCellValue(cellValue);
}
} //把编辑过后的工作薄重新保存为excel文件
FileStream fs2 = System.IO.File.Create(fileName);
workbook.Write(fs2);
fs2.Close();
return Content("操作成功!!" + DateTime.Now);
读取文件内容更新文件状态
// 要操作的excel文件路径
string fileName = Server.MapPath("~/Content/test.xlsx");
if (!System.IO.File.Exists(fileName)) return Content("文件不存在,请检查路径及文件名称是否正确!");
//IWorkbook workbook;
//把文件内容导入到工作薄当中,然后关闭文件
//FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite);
//workbook = WorkbookFactory.Create(fs);
//fs.Close();//编辑工作薄当中内容
//如果是xls,使用HSSFWorkbook;如果是xlsx,使用XSSFWorkbook
XSSFWorkbook xssFWorkbook;
using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
{
xssFWorkbook = new XSSFWorkbook(file);
} ISheet sheet = xssFWorkbook.GetSheetAt();
var userList = GetUserLists(sheet);
var userNames = userList.Select(u =>
{
return u.UserName.Replace(u.UserName, $"'{u.UserName}'");
});
var companyNames = userList.Select(u =>
{
return u.CompanyName.Replace(u.CompanyName, $"'{u.CompanyName}'");
}); var userIdCards = userList.Select((u, i) =>
{
return $" SELECT '{u.UserName}' AS UserName,'{u.CompanyName}' AS CompanyName,'{u.LegalPersonIdNumber}' AS LegalPersonIdNumber ";
});
var dataList = AsyncHelper.RunSync(() => _userIdFileAppService.RunSearchAndUpdateData(
new UserIdentityCardInput
{
UserNameString = string.Join(",", userNames),
CompanyNameString = string.Join(",", companyNames),
UserIdCardString = string.Format(@"SELECT * INTO #tbUserIdCardTable FROM ( {0} ) a;", string.Join(" UNION ", userIdCards))
}
));
for (int i = ; i <= sheet.LastRowNum; i++)
{
if (i != )
{
var userName = sheet.GetRow(i).Cells[].ToString();
var companyName = sheet.GetRow(i).Cells[].ToString();
//添加列
ICell lastCell = sheet.GetRow(i).CreateCell();
lastCell.SetCellType(lastCell.CellType);
ICellStyle newStyle = xssFWorkbook.CreateCellStyle();
//XSSFCellStyle styleTemp = ((XSSFCellStyle)newStyle);
//HSSFPalette palette = xssFWorkbook.GetCustomPalette(); if (dataList.Find(a => a.UserName == userName && a.CompanyName == companyName) != null)
{
lastCell.SetCellValue("已更新");
//Color c = Color.FromArgb(98, 185, 106);
//palette.SetColorAtIndex((short)9, c.R, c.G, c.B);
//var color = palette.FindColor(c.R, c.G, c.B);
//newStyle.FillPattern = FillPattern.SolidForeground;
//newStyle.FillForegroundColor = color.Indexed; XSSFColor color = new XSSFColor();
color.SetRgb(new byte[] { , , });
newStyle.FillPattern = FillPattern.SolidForeground;
newStyle.FillForegroundColor = ;
}
else
{
lastCell.SetCellValue("未更新");
//创建字体
XSSFFont ffont = (XSSFFont)xssFWorkbook.CreateFont();
XSSFColor color = new XSSFColor();
color.SetRgb(new byte[] { , , });
//给字体设置颜色
ffont.Color = color.Indexed;
//给样式添加字体
newStyle.SetFont(ffont); newStyle.FillPattern = FillPattern.SolidForeground;
newStyle.FillForegroundColor = ; }
lastCell.CellStyle = newStyle;
}
} //把编辑过后的工作薄重新保存为excel文件
FileStream fs2 = System.IO.File.Create(fileName);
xssFWorkbook.Write(fs2);
fs2.Close();
return Content("操作成功!!" + DateTime.Now);
关于Npoi+excel文件读取,修改文件内容的处理方式的更多相关文章
- [转帖]创建文件或修改文件时间 touch
Linux命令(五)创建文件或修改文件时间 touch https://www.cnblogs.com/ay-a/p/7900274.html touch -t .x86_64.rpm 记得 wind ...
- 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置
下载文件时-修改文件名字 1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...
- python文件操作-修改文件中的内容
一.文件读写有缓冲区 fw = open('nhy','w') fw.write('sdfsdf') fw.flush()# 把缓冲区里面的数据立即写到磁盘上 fw.close() 二.with的用法 ...
- java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Excel VBA批量修改文件夹下的文件名
今天,有同事提出想批量修改文件名,规则比较简单,在第五位后加“-”即可, 上网没找到相关工具,就自己做了个excel,用宏代码修改. 代码如下: Private Sub CommandButton1_ ...
- Linux命令(五)创建文件或修改文件时间 touch
Linux中 touch 命令可以改变文档或目录时间, 包括存取时间或更改时间, 也可以用于创建新文件. 命令格式: touch [选项] [参数] 选项: -a 只更改文件的读取时间. -m ...
- touch:创建文件及修改文件时间戳
touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数). Linux 系统中 ...
- 解决Requests中文乱码【有用】,读取htm文件 读取txt文件报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 0
打开这个网址https://blog.csdn.net/chaowanghn/article/details/54889835 python在open读取txt文件时,出现UnicodeDecodeE ...
- springMVC下载文件前修改文件名字
很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了. 但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名 ...
- poi读取Excel模板并修改模板内容与动态的增加行
有时候我们可能遇到相当复杂的excel,比如表头的合并等操作,一种简单的方式就是直接代码合并(浪费时间),另一种就是写好模板,动态的向模板中增加行和修改指定单元格数据. 1.一个简单的根据模板shee ...
随机推荐
- Easily use UUIDs in Laravel
Easily use UUIDs in Laravel Wilbur PoweryOct 29 '18 Updated on Oct 30, 2018 ・1 min read #php #larav ...
- 多线程 submit与execute区别
(1)可以接受的任务类型 submit: execute: 可以看出: execute只能接受Runnable类型的任务 submit不管是Runnable还是Callable类型的任务都可以接受,但 ...
- P4779 【模板】单源最短路径(标准版)题解
原题链接 https://www.luogu.org/problemnew/show/P4779 若还未食用弱化版的同学请先做这个qwq https://www.luogu.org/problemne ...
- Django Admin中增加导出Excel功能
参考: https://www.cnblogs.com/yoyo008/p/9232805.html 在使用Django Admin时, 对于列表我们有时需要提供数据导出功能, 如下图: 在Djang ...
- 【java设计模式】-03抽象工厂模式
抽象工厂 简述 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.在抽象工厂模式中,接口是负责创建一个相关对象的工厂 ...
- Java中基本数据类型
在数据类型中,最常用也是最基础的数据类型,被称作基本数据类型.可以使用这些类型的值来代表一些简单的状态. Java 语言的基本数据类型总共有以下8 种,下面是按照用途划分出的4 个类别: 定点类型: ...
- 【分类模型评判指标 一】混淆矩阵(Confusion Matrix)
转自:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839 略有改动,仅供个人学习使用 简介 混淆矩阵是ROC曲线绘制的基础 ...
- python struct的使用例子
import struct i = 1024 # s0为一个字符串,长度为4,即占四个字节,这样方便传输与保存二进制数据. s0 = struct.pack(">I", i) ...
- Leetcode题目75.颜色分类(双指针-中等)
题目描述: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白 ...
- HearthBuddy中_settings.txt的更详细参数解释
https://tieba.baidu.com/p/5275382967 默认的配置不是很合理,花了点时间读了下silverfish(也就是兄弟用的AI)的代码后也尝试修改了些参数,有没有效果仁者见仁 ...