大数据插入Excel报错处理
2016-01-07 21:22
375 查看
发现问题:
最近运行程序时,发现了一个问题,就是在导出excel时,报了一下错误
分析问题:
原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5。然后百度了下,发现这个版本的NPOI只支持office2003,二office2003最多支持65536行,找到问题,下面就开始处理问题
解决问题:
从NPOI考虑:继续用这个版本的动态库,只是在插入数据的时候,加个判断,如果数据条数大于65536时,就在创建一个sheet
从office考虑:考虑使用跟高的Office,发现NPOI的2.1.3支持更高版本的office
我的处理方式:
方式一:不换动态库,还是老古董
成果图
方式二:我就用新东西
成果图:
最后,感谢面向对象,感谢里氏替换原则,理由如下
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
最近运行程序时,发现了一个问题,就是在导出excel时,报了一下错误
分析问题:
原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5。然后百度了下,发现这个版本的NPOI只支持office2003,二office2003最多支持65536行,找到问题,下面就开始处理问题
解决问题:
从NPOI考虑:继续用这个版本的动态库,只是在插入数据的时候,加个判断,如果数据条数大于65536时,就在创建一个sheet
从office考虑:考虑使用跟高的Office,发现NPOI的2.1.3支持更高版本的office
我的处理方式:
方式一:不换动态库,还是老古董
static void Main(string[] args) { IWorkbook wk=new HSSFWorkbook(); ISheet sheet = wk.CreateSheet("StudentK"); ISheet sheet2 = wk.CreateSheet("TeacherL"); Stopwatch sw =new Stopwatch(); sw.Start(); for (int i = 0; i < 75535; i++) { if (i<=65535) { IRow row = sheet.CreateRow(i); row.CreateCell(0).SetCellValue("Kimisme"); row.CreateCell(1).SetCellValue(i.ToString()); row.CreateCell(2).SetCellValue(DateTime.Now.ToString("s")); } else if (i > 65535) { IRow row = sheet2.CreateRow(i-65536); row.CreateCell(0).SetCellValue("Kimisme"); row.CreateCell(1).SetCellValue(i.ToString()); row.CreateCell(2).SetCellValue(DateTime.Now.ToString("s")); } } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); sw.Restart(); using (FileStream writer =File.OpenWrite("老古董.xls")) { wk.Write(writer); } Console.WriteLine(sw.ElapsedMilliseconds); Console.WriteLine("ok"); Console.ReadKey(); }
成果图
方式二:我就用新东西
static void Main(string[] args) { //改动的地方有两处,这是第一处 IWorkbook wk = new XSSFWorkbook(); ISheet sheet = wk.CreateSheet("FrientS"); Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 75535; i++) { IRow row = sheet.CreateRow(i); row.CreateCell(0).SetCellValue("Kimisme"); row.CreateCell(1).SetCellValue(i.ToString()); row.CreateCell(2).SetCellValue(DateTime.Now.ToString("s")); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); sw.Restart(); //这是第二处 using (FileStream writer = File.OpenWrite("新事物.xlsx")) { wk.Write(writer); } Console.WriteLine(sw.ElapsedMilliseconds); Console.WriteLine("ok"); Console.ReadKey(); }
成果图:
最后,感谢面向对象,感谢里氏替换原则,理由如下
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx
相关文章推荐
- 大数据盘点之Spark篇201512
- rails中的健壮参数
- (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)
- jedis高版本的JedisPoolConfig没有maxActive和maxWait
- 杭电1022——Train Problem I(栈的应用)
- IoC容器和 Dependency Injection模式 Inversion of Control Containers and the Dependency Injection pattern
- LeetCode Permutaions II
- SVN Checkout Failed的解决办法
- 腾讯数十亿广告的秘密武器:利用大数据实时精准推荐
- ubuntu 使用Perl NET::SMTP 发送Email auth 失败
- pthread_cond_wait
- There is no default constructor available in xxx错误引发
- 应用Btrfs管理磁盘,应用mdadm管理磁盘(softraid),使用raid卡管理磁盘
- 大数据时代的技术hive:hive的数据类型和数据模型
- 服务启动报错
- 大数据时代的技术hive:hive介绍
- Binder&AIDL
- like 大数据字段 查询慢
- rails权限管理—devise+cancan+rolify
- 我想做一条机器狗