在用java poi 3.8操作excel的时候,在打开一个已有excel文件时,有时候会报错:

org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: Initialisation of record 0x1D left  bytes remaining still to be read.
at org.apache.poi.hssf.record.RecordInputStream.hasNextRecord(RecordInputStream.java:)
at org.apache.poi.hssf.record.RecordFactoryInputStream.nextRecord(RecordFactoryInputStream.java:)
at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:)
  ....

网上搜索了一下,可能是excel版本比较老,或者excel控件生产的excel文件的头部和poi控件不一致。

一种办法是手动打开excel文件,然后保存或另存为。

因为要用程序处理,中间加一个手动的步骤比较烦,所以在网上找到另一个办法:先保存为csv文件,然后读取csv文件;

脚本代码如下:

if WScript.Arguments.Count <  Then
WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
Wscript.Quit
End If csv_format = Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item())
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item()) Dim oExcel
Set oExcel = CreateObject("Excel.Application") Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file) oBook.SaveAs dest_file, csv_format oBook.Close False
oExcel.Quit

windows cmd命令行直接运行即可。

java中使用Runtime.getRuntime().exec(String execString)函数。

但是需要注意,执行cmd命令时,命令execString要加上前缀“cmd /c ”。

最好先执行一遍删除语句,确保要生成的csv文件没有存在。

LeftoverDataException.的更多相关文章

  1. LeftoverDataException,依赖包,apache license 2.0

    1. poi3.9 LeftoverDataException org.apache.poi.hssf.record.RecordInputStream$LeftoverDataException: ...

随机推荐

  1. 网页设计、java、Andorid资源清单整理

    多学多练做笔记很重要. 赤裸裸的干货非鸡汤 网页设计的主要技术:    Html,    Js,    Css,    Ps       HTML/HTML5     网页的基础Html必须知道的.但 ...

  2. 图片过大导致OOM

    原文:http://www.codeceo.com/article/android-load-image-oom.html 一.分析 在加载图片过程中出现的OOM的几种情况: 1. 加载的图片过大 2 ...

  3. WampServe修改默认网站目录的方法(转)

    1wamp简介 WampServe集成了Apache.MySQL.PHP.phpmyadmin,支持Apache的mod_rewrite,PHP扩展.Apache模块只需要在菜单“开启/关闭”上点点就 ...

  4. Android 学习第3课,小例子

    package temperature.convert; import java.util.Scanner; public class Converter { public static void m ...

  5. webpack脚手架搭建(简单版)

    运行命令 安装依赖:npm install 运行项目:npm start 大致流程 npm init:新建 package.json 将需要的依赖模块加入 dependencies(生产环境) 和 d ...

  6. js常用字符串方法汇总

    concat()将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world"; var c = a. ...

  7. 利用pip8.1.2 安装django1.9.7

    把python2升级到python3之后,利用pip安装django1.9.7时报错: DistributionNotFound: The 'pip==7.1.0' distribution was ...

  8. Opencv基本数据结构

    Opencv的数据结构:CvPoint系列.CvSize系列 .CvSize.CvRect.CvScalar.CvAr 大多数据结构都在cxtypes.h这个头文件里定义 1.CvPoint系列:   ...

  9. Extjs控制面板组件

    (1)aoolyTo:(id) renderTo:(id)呈现在哪个html里面,同上  id最好用"" contentEI:() 呈现哪个html元素里面,把eI内的内容呈现 ( ...

  10. C#中get和set的写法

    class program{ private string name; public string XXXXXX{ get{return name;} set{name=value;} } } 在C# ...