问题的现象就是,只要不修改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追加数据的更多相关文章

  1. 【poi xlsx报错】使用POI创建xlsx无法打开

    如果使用的XSSFWorkbook创建的xls,打开的时候会有这样的提示: 这样 XSSFWorkbook 和HSSFWorkbook的区别. HSSF - 提供读写Microsoft Excel X ...

  2. jQuery Post 提交内容中有标签报错

    Post编辑一点内容要传后台数据库: var html = editor2.html() console.log(encodeURIComponent(html)); //console.log(&q ...

  3. svn提交代码时不要提交bulid里的内容,会报错

  4. 【docker】 追加端口映射时 报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

    解决办法: vi /etc/sysctl.conf 添加如下代码: net.ipv4.ip_forward= 重启network服务 systemctl restart network 查看: sys ...

  5. 在用EF新增对象存贮至数据库时汪报错,但数据库里没有新增数据

    大致的问题是这样的: 原来一直用存贮数据的方法是用的是:DBContext.AddToXXXX(),这个方法.在写代码的时候看到VS提示这个方法已失效,推荐使用DBContext.XXXX.AddOb ...

  6. phpexcel导入xlsx文件报错xlsx is not recognised as an OLE file 怎么办

    最初的做法  代码如下 1 include 'classes/PHPExcel/IOFactory.php'; 2 $inputFileName = $target; 3 $objReader = n ...

  7. 夺命雷公狗---DEDECMS----4快速入门之栏目页报错之快速解决

    我们dedecms是分3级或者3层的,如下图所示: 点击“玄幻小说”后发现出了错,如下图所示: 我们的dedecms是分3层的,他们分别是: 网站首页 网站的栏目页面(多级)--->栏目页面是需 ...

  8. masterha_check_repl报错汇总

    [root@DBMysql ~]#masterha_check_repl --conf=/etc/masterha/app1.cnf 导致如下报错的原因主要有两类: 1.mysql的安装时用源码安装, ...

  9. redis 写入的时候报错

    redis 写入报错 1)报错内容 Exception in thread "main" redis.clients.jedis.exceptions.JedisDataExcep ...

随机推荐

  1. em和px区别

    附:(http://www.cnblogs.com/leejersey/p/3662612.html) em单位说明 1em指的是一个字体的大小,它会继承父级元素的字体大小,因此并不是一个固定的值.任 ...

  2. ASP.NET MVC4 with MySQL: Configuration Error (MySql.Web.v20)

    今天在浏览ASP.NET项目时,提示如下错误: Could not load file or assembly ‘MySql.Web.v20, Version=6.9.4.0, Culture=neu ...

  3. FileHelpers 用法 z

    用FileHelplers导出csv数据: [DelimitedRecord(",")] [IgnoreEmptyLines()] [ConditionalRecord(Recor ...

  4. NO.002-2018.02.07《越人歌》先秦:佚名

    参考之后略有修改,疑问点“不訾诟耻”释义 越人歌原文.翻译及赏析_古诗文网 蒙羞被好兮不訾诟耻_释义_吴江诗词网   越人歌 先秦:佚名 今夕何夕兮,搴舟中流.今晚是怎样的晚上啊河中漫游.搴(qiān ...

  5. 每天一个linux命令:df 命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  6. 特殊权限的介绍 SGID SUID SBIT

    Set UID 当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID.那么这个特殊权限的 ...

  7. Django:模板系统

    一,常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二,常量 {{ 变量名 }} 变量名由字母数字和下划线组成. 点(.)在模板语言中有特殊 ...

  8. Gym - 101334E 多叉树遍历

    题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯: 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点 ...

  9. 2017.9.2Java中的自定义类型的定义及使用&&自定义类的内存图

    今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...

  10. P2979 [USACO10JAN]奶酪塔Cheese Towers

    P2979 [USACO10JAN]奶酪塔Cheese Towers 背包dp 不过多了一个大奶酪可以压扁其他奶酪的 一开始写了个暴力82分.贪心的选择 然后发现,有如下两种规律 要么最优都是小奶酪, ...