NPOI追加内容到xlsx报错,用Epplus往excle xlsx追加数据
问题的现象就是,只要不修改xlsx,一直写入或者再次写入xlsx,追加内容都是不会有问题的。但是只要你修改了xlsx,用excle2010或者2007修改了xlsx的内容里面的列宽,或者行高,或者进行其他的操作。再次用NPOI往这个xlsx里面追加内容的时候,就会损坏这个xlsx文件。也就是说,NPOI在读取xlsx,如果这个xlsx不是由xlsx原始生成的,或者是原本是NPOI生成的,但是用户中途进行了修改,哪怕是改动了一丁点儿,比如列宽,行高,那么再次写入的时候xlsx就被写坏了,无法用EXCLE打开,打开会提示当前文件含有格式不正确的数据。
总结一句话:读写高级版本的xlsx不要使用NPOI, 而要使用EPPLUS。血的教训。被坑了半天时间。
如果是网站生成数据格式,供用户下载,用下面代码,NPOI没有问题,如果是反复读写的场景,甚至还有用户修改这个excle文件的话,比如电脑端NPOI对这个文件读写,用户在手机端修改同一个文件,建议用EPPLUS.下面是NPOI追加数据的代码。
public static IWorkbook LoadWorkbook(string filePath)
{
IWorkbook workbook;
using (var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) //读入excel模板
{
if (filePath.EndsWith("xlsx"))
{
return workbook = new XSSFWorkbook(fileStream);
}
else
{
return workbook = new HSSFWorkbook(fileStream);
} }
}
private void SaveToExcle()
{
try
{
string currentPath = Environment.CurrentDirectory;
IWorkbook workbook = LoadWorkbook(currentPath + "\\1.xlsx"); ISheet sheet = workbook.GetSheetAt(); //获取工作表
IRow row = sheet.GetRow(); //得到表头 using (FileStream fout = new FileStream(currentPath + "\\1.xlsx", FileMode.Open, FileAccess.Write, FileShare.ReadWrite))
{
row = sheet.CreateRow((sheet.LastRowNum + )); //在工作表中添加一行
ICell cell1 = row.CreateCell();
cell1.SetCellValue(label_enghlis.Text); //赋值 ICell cell2 = row.CreateCell();
cell2.SetCellValue(textBox1.Text); //赋值 ICell cell3 = row.CreateCell();
cell3.SetCellValue(label_Rank.Text); //赋值
fout.Flush();
workbook.Write(fout); } workbook = null;
textBox1.Text = string.Empty;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
} }
以上只要你用excle2007或者excle2010修改excle就问题。
下面是用的EPPLUS,初始化,创建一个xlsx文件,并且初始化,给sheet名字,表头标题赋值。

winform初始化,在根目录创建xlsx文件。需要Nuget引入Epplus。using OfficeOpenXml;
下面是winform初始化,用Epplus组件在根目录建立xlsx文件。
if (!File.Exists(currentPath + "\\1.xlsx")) //不存在则创建
{
FileInfo newFile = new FileInfo(currentPath + @"\1.xlsx");
using (ExcelPackage package = new ExcelPackage(newFile))
{
// add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("单词本");
//Add the headers
worksheet.Cells[1, 1].Value = "单词";
worksheet.Cells[1, 2].Value = "词义";
worksheet.Cells[1, 3].Value = "词频";
package.Save();
}
}
下面是Epplus追加数据到xlsx的代码:
private void SaveToXlsX()
{
try
{
string currentPath = Environment.CurrentDirectory;
// ok, we can run the real code of the sample now
if (File.Exists(currentPath + "\\1.xlsx")) //如果存在则直接打开
{
FileInfo newFile = new FileInfo(currentPath + @"\1.xlsx");
using (ExcelPackage package = new ExcelPackage(newFile))
{
// add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
//获得最后一行,这里其实获取的是总行数,追加数据的话,需要+1
int lastRow = worksheet.Dimension.End.Row;
worksheet.Cells[lastRow+1, 1].Value = label_enghlis.Text;
worksheet.Cells[lastRow+1, 2].Value = textBox1.Text;
worksheet.Cells[lastRow+1, 3].Value = label_Rank.Text;
package.Save();
}
}
textBox1.Text = string.Empty;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
真正往xlsx追加数据。


excel07以上的版本支持最大行数104 8576行 ,百万行数据。如果是用追加的方式可能会更好。
NPOI追加内容到xlsx报错,用Epplus往excle xlsx追加数据的更多相关文章
- 【poi xlsx报错】使用POI创建xlsx无法打开
如果使用的XSSFWorkbook创建的xls,打开的时候会有这样的提示: 这样 XSSFWorkbook 和HSSFWorkbook的区别. HSSF - 提供读写Microsoft Excel X ...
- jQuery Post 提交内容中有标签报错
Post编辑一点内容要传后台数据库: var html = editor2.html() console.log(encodeURIComponent(html)); //console.log(&q ...
- svn提交代码时不要提交bulid里的内容,会报错
- 【docker】 追加端口映射时 报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
解决办法: vi /etc/sysctl.conf 添加如下代码: net.ipv4.ip_forward= 重启network服务 systemctl restart network 查看: sys ...
- 在用EF新增对象存贮至数据库时汪报错,但数据库里没有新增数据
大致的问题是这样的: 原来一直用存贮数据的方法是用的是:DBContext.AddToXXXX(),这个方法.在写代码的时候看到VS提示这个方法已失效,推荐使用DBContext.XXXX.AddOb ...
- phpexcel导入xlsx文件报错xlsx is not recognised as an OLE file 怎么办
最初的做法 代码如下 1 include 'classes/PHPExcel/IOFactory.php'; 2 $inputFileName = $target; 3 $objReader = n ...
- 夺命雷公狗---DEDECMS----4快速入门之栏目页报错之快速解决
我们dedecms是分3级或者3层的,如下图所示: 点击“玄幻小说”后发现出了错,如下图所示: 我们的dedecms是分3层的,他们分别是: 网站首页 网站的栏目页面(多级)--->栏目页面是需 ...
- masterha_check_repl报错汇总
[root@DBMysql ~]#masterha_check_repl --conf=/etc/masterha/app1.cnf 导致如下报错的原因主要有两类: 1.mysql的安装时用源码安装, ...
- redis 写入的时候报错
redis 写入报错 1)报错内容 Exception in thread "main" redis.clients.jedis.exceptions.JedisDataExcep ...
随机推荐
- 1.HTML小结
HTML 基本文档 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 阿里云服务器Linux常用命令
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- Nodejs 如何制作命令行工具
# 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦![options ...
- Java入门到精通——框架篇之Hadoop概述
一.Hadoop来历 Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明了倒排索引算法,通过加入了Map ...
- 关于 C# 中接口的一些小结
< 关于 C# 中“接口”的一些小结 > 对于 C# 这样的不支持多重继承的语言,很好的体现的层次性,但是有些时候多重继承的确有一些用武之地. 比如,在 Stream 类 . 图形设备 ...
- 性能优化小Tips
Performance Tips 这篇文章主要是介绍了一些小细节的优化技巧,当这些小技巧综合使用起来的时候,对于整个App的性能提升还是有作用的,只是不能较大幅度的提升性能而已.选择合适的算法与数据结 ...
- CSS样式编写案例
1.制作如图三角形效果: 步骤一:将右侧盒子设置为相对定位 步骤二:在右侧盒子里面新建个子盒子,设置宽高相等,为正方形,绝对定位 步骤三:将绝对定位的盒子用CSS3旋转属性旋转 2.制定如图的序列号 ...
- 在linux环境下搭建java web测试环境(非常详细!)
一.项目必备软件及基本思路 项目必备:虚拟机:VMware Workstation (已安装linux的 CentOS6.5版本) 项目:java web项目 (必须在本地部署编译后选择项目的webR ...
- Windows C/C++ 内存泄露检测
#pragma once #define _CRTDBG_MAP_ALLOC #include<crtdbg.h> #include<stdlib.h> #include< ...
- Mantis查看问题列表的列名修改_"P","#"两列
在使用mantis的时候,点击菜单上的“查看问题”进去,就会罗列出当前的bug列表,可是列表的标题上存在着“P”和“#”的显示,个人觉得这两列在这里完全没有意义,或者说现有的显示使人觉得疑惑,究竟代表 ...