在windows下跑程序,没有任何问题,导入并入库成功,当把程序发布到linux服务器,然后页面d导入时,后天就报这个错,开发时没法重现异常,请高手指教
/**
* 根据excel里面的内容读取配置信息
* @param is 输入流
* @return 配置信息list
*/
public List<ProjectConfig> getExcelInfo(InputStream is) {
List<ProjectConfig> projectConfigList = null;
try {
//创建Workbook
Workbook wb = WorkbookFactory.create(is);
//读取Excel里面客户的信息
projectConfigList = readExcelValue(wb);
} catch (IOException e) {
e.printStackTrace();
}catch (InvalidFormatException e) {
return projectConfigList;
看异常应该是文件格式有问题。有时候Excel能打开的文件不一定就是excel文件,也可能是dbf文件之类的,excel也可以打开它,所有根据excel是否可以打开一个文件的方法来判断是否是一个office格式的文件不太准确
参考:
https://stackoverflow.com/questions/29894185/your-inputstream-was-neither-an-ole2-stream-nor-an-ooxml-stream-while-reading
https://stackoverflow.com/questions/23246850/your-inputstream-was-neither-an-ole2-stream-nor-an-ooxml-stream
未找到解决方案,请明示
有时候一些库需要本地安装office的,如果本地安装了没问题,但是你linux服务器上没有安装。所以会出这种问题。
提供一个思路,如果是这样,就得换一个库来读取excel了
linux上需要安装office?有对应的版本要求吗
@青松世界: 安装不了,但是有些库不需要安装office就能导出或者读取excel
文件不是xlsx文件,也就是你用excel也打不开这个文件
可以打开,linux服务器上的文件ftp取到本地看过,可以打开
使用spring mvc 上传文件,POI 在linux 64位下解析不了excel2007文件,而win7 32位下没问题,但使用wps创建的excel都没问题。比较下上传前后文件头是否会变,导致POI识别不了。把文件转换成最新版本的.xlsx文件也许没有问题,老版.xls可能会有问题
poi不是纯java编写的吗?
我在代码层兼容 2003 和2007两个版本。
public List<ProjectConfig> getExcelInfo(boolean isExcel2003 ,InputStream in) {
List<ProjectConfig> projectConfigList = new ArrayList<>();
try {
//创建Workbook
Workbook wb = null;
if(isExcel2003){
wb = new HSSFWorkbook(in);
}else{
wb = new XSSFWorkbook(in);
}
//读取Excel里面客户的信息
projectConfigList = readExcelValue(wb);
} catch (IOException e) {
e.printStackTrace();
}
本地测试在:win7+64位+jdk1.8 可以正常读,创建workbook时 .xlsx 和.xls两种类型都正常
部署到linux +64位+jdk1.8 创建workbook时 .xlsx 和.xls两种类型都会报错