关于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 ... 
随机推荐
- Centos7 Memcached 安装
			1.Linux系统安装memcached,首先要先安装libevent库. yum install libevent libevent-devel 2.安装memcached yum install ... 
- Codeforces Round #591 (Div. 2, based on Technocup 2020 Elimination Round 1) C. Save the Nature
			链接: https://codeforces.com/contest/1241/problem/C 题意: You are an environmental activist at heart but ... 
- 立即执行函数与For. . .in语句
			㈠立即执行函数 ⑴定义:在函数定义完,立即被调用,这样的函数叫做立即执行函数 ⑵语法:函数对象() ⑶注意:立即执行函数往往只会执行一次 ⑷示例1: (function(){ alert(" ... 
- webuploader+上传文件夹
			在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ... 
- C++关键字——register
			register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度.例如下面的内存块拷贝代码, #ifdef NOSTRUCTASSIGN mem ... 
- CSP-S 模拟53 题解
			题解: T1 u: 一看到修改这么多,但询问其实只有一个不难想到差分,但是他这个形状可以说很不规则,于是我们想到分别维护竖着的和斜着的差分,然后最后合并即可. 考场上瞎调了一波系数莫名AC,其实是维护 ... 
- 【集训队作业2018】line
			DP方程十分简单,考虑前对后贡献即可. \(f_i = \min_{l_i \leq j < i} \left\{ f_j + \left(\max_{j < k \leq i} \lef ... 
- Java 面试题 四
			1.序列化 File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ ... 
- 7.12T1序列
			1.序列 [问题描述] Hzy 得到了一个字符串,这个字符串只有’A’,’G’,’C’,’T’这四种字符,她发现这个 序列中连续 k 个字符可以形成一种新的字符序列,她称这种序列为 Hzy 序列,她现 ... 
- [C语言]结构体初始化的不同方法
			结构体的定义 struct Test{ int first; double second; }Sample; 方法一 定义时直接赋值 Sample s(1, 1.00); 缺点:必须匹配变量顺序,不能 ... 
