因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓


 // 要操作的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文件读取,修改文件内容的处理方式的更多相关文章

  1. [转帖]创建文件或修改文件时间 touch

    Linux命令(五)创建文件或修改文件时间 touch https://www.cnblogs.com/ay-a/p/7900274.html touch -t .x86_64.rpm 记得 wind ...

  2. 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置

    下载文件时-修改文件名字   1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...

  3. python文件操作-修改文件中的内容

    一.文件读写有缓冲区 fw = open('nhy','w') fw.write('sdfsdf') fw.flush()# 把缓冲区里面的数据立即写到磁盘上 fw.close() 二.with的用法 ...

  4. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  5. Excel VBA批量修改文件夹下的文件名

    今天,有同事提出想批量修改文件名,规则比较简单,在第五位后加“-”即可, 上网没找到相关工具,就自己做了个excel,用宏代码修改. 代码如下: Private Sub CommandButton1_ ...

  6. Linux命令(五)创建文件或修改文件时间 touch

    Linux中 touch 命令可以改变文档或目录时间, 包括存取时间或更改时间, 也可以用于创建新文件. 命令格式: touch [选项] [参数] 选项: -a   只更改文件的读取时间. -m   ...

  7. touch:创建文件及修改文件时间戳

    touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数). Linux 系统中 ...

  8. 解决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 ...

  9. springMVC下载文件前修改文件名字

    很多时候,为了方便,下载文件其实就直接写了一个文件在服务器上面的路径,然后直接点击一个这个地址,浏览器就自然而然的开始下载了. 但是这次项目需要在文件下载之前修改文件的名字,也就是说,服务器上文件的名 ...

  10. poi读取Excel模板并修改模板内容与动态的增加行

    有时候我们可能遇到相当复杂的excel,比如表头的合并等操作,一种简单的方式就是直接代码合并(浪费时间),另一种就是写好模板,动态的向模板中增加行和修改指定单元格数据. 1.一个简单的根据模板shee ...

随机推荐

  1. sqlite3-python

    官网资料 https://sqlite.org/lang_createtable.html 操作参考: https://www.runoob.com/sqlite/sqlite-insert.html ...

  2. Java开发中使用事务

    一.      XML,使用tx标签配置拦截器实现事务 二.      Annotation方式 一.XML,使用tx标签配置拦截器实现事务 中主要配置中是tx:advice和aop:config两个 ...

  3. springboot 生产环境与开发环境配置

    通过修改yml文件里的active属性,prod(生产环境) 与 dev (开发环境)

  4. python 生成金字塔

    num = eval(input("请输入一个整数:")) , num + ): , -): print(" ", end="\t") , ...

  5. 一 、Linux基础命令及使用帮助

    linux的哲学思想: 一切皆文件: 把几乎所有资源,包括硬件设备都组织为文件系统 由众多单一目的小程序组成:一个程序只实现一个功能,而且要做好 组合小程序完成复杂任务 尽量避免跟用户交互 目的:实现 ...

  6. 最近公共祖先lca模板

    void dfs(int x,int root){//预处理fa和dep数组 fa[x][0]=root; dep[x]=dep[root]+1; for(int i=1;(1<<i)&l ...

  7. MongDB的DateZone

    先理解:Date本身是没有格式的,只是一个毫秒数,要显示成某种格式就一定是字符串 https://github.com/ewcmsfree/ewcms/wiki/Help-mongo-java-dri ...

  8. Kbengine游戏引擎-【4】demo-kbengine_unity3d_demo 在容器docker上安装测试

    git地址:https://github.com/kbengine/kbengine_unity3d_demo Demo中文地址:https://github.com/kbengine/kbengin ...

  9. VSCode查询快捷键对应功能技巧

  10. 语法错误 : 缺少“;”(在“<”的前面)

    该错误有可能是由错误所指行“<”附近的某个类型忘记#include <>所造成的