java poi读取xls数据是出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java poi读取xls数据是出错相关的知识,希望对你有一定的参考价值。

InputStream inp;
inp = new FileInputStream("D:/2.xlsx");
Workbook wb = WorkbookFactory.create(inp); --到这报错
Sheet sheets = wb.getSheetAt(0);
错误提示(Could not initialize class org.apache.poi.POIXMLDocument)

参考技术A public class test
public static void main(String[] args) throws IOException, SQLException
try
File f = new File("c:\\sid列表.xls");
InputStream input = new FileInputStream(f);
POIFSFileSystem fs = new POIFSFileSystem(input);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
int rowNum = sheet.getLastRowNum();
FileWriter fileWriter=new FileWriter("c:\\Result.txt");
String sql;
int sid=1;
for(int i=0;i<=rowNum;i++)
HSSFCell cell1=sheet.getRow(i).getCell(0);
HSSFCell cell2=sheet.getRow(i).getCell(1);
HSSFCell cell3=sheet.getRow(i).getCell(2);

sql="INSERT INTO T_RESOURCE ( SITE_CODE,RESOURCE_CODE,RESOURCE_TYPE,POPULARIZE_TYPE_ID,POPULARIZE_UNIT_ID,POPULARIZE_CHANNEL_ID,MEMO,CREATED_TIME,LASTMODIFIED_TIME,CREATOR,MENDER) VALUES('tonglu'," +
sid+",'SEM','1','14','152','" +cell1+" "+cell2+" "+cell3 +"',now(),now(),'admin','admin')\n";
fileWriter.write(sql);
sid++;

fileWriter.flush();
fileWriter.close();
catch (Exception e)
e.printStackTrace();




代码太少了 没看出来 这是我一般读xls的写法追问

这是报的错 The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)我差了下这个只能读取2003的
有读取2007的吗

追答

我的程序?? 我用是office2010的 是不是你的包不对

追问

这个POI是我前几天从官网上下的,我现在用的是office2007和wps,把你的包发到我邮箱上吧
winter033@163.com

追答

已发

本回答被提问者采纳
参考技术B 读取xlsx 你可以使用HSSFWorkbook
// 创建对Excel工作簿文件的引用
HSSFWorkbook workbook = new HSSFWorkbook(inp);

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决

注意引入的都是poi的包,使用Cell,excel2003的.xls对应是HSSFCell,而之后的xlsx对应的则是XSSFCell,但是他们都继承于Cell,所以使用Cell就可以使用两种格式的excel导入了,下面解决excel中数据的各种格式
[java] view plaincopy
//读取excel
try
request.setCharacterEncoding("gbk");
response.setContentType("text/html;charset=gbk");
// 1. 创建工厂类
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2. 创建FileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);

// 3. 判断是否是上传表单
// boolean b = upload.isMultipartContent(request);
// 设置上传文件最大值
upload.setSizeMax(25 * 1024 * 1024);
// 是文件上传表单
// 4. 解析request,获得FileItem项
List<FileItem> fileitems = upload.parseRequest(request);
// 5. 遍历集合
for (FileItem item : fileitems)
// 判断是不是普通字段
if (!item.isFormField())
// 获得流,读取数据写入文件
InputStream in = item.getInputStream();
Workbook book = createWorkBook(in,item.getName());
// 获得第一个工作表对象
Sheet sheet = book.getSheetAt(0);
if(0==sheet.getLastRowNum())
//如果没有数据
request.setAttribute("message", "excel的sheet0中不存在数据");
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);


// 第一行为标题,从第二行开始录入
for (int i = 1; i <= sheet.getLastRowNum(); i++)
//标题行,用来对比方便得到数据
Row titleRow = sheet.getRow(0);
//数据行
Row row = sheet.getRow(i);
//获得值
String value_temp= this.getValue((Cell) row.getCell(2));




catch (Exception e)
e.printStackTrace();
message="导入失败<br/>"+message;
request.setAttribute("message",message);
request.getRequestDispatcher("/cc/util/excelToData.jsp").forward(request, response);

参考技术A 你这边说的分段存入数据库是怎么个意思呢???

以上是关于java poi读取xls数据是出错的主要内容,如果未能解决你的问题,请参考以下文章

求解!JAVA 使用Apache POI将PPTX转图片出错。见下图

java 使用POI workbook出错

使用Apache POI读取Excel .XLSX时出错

exceljs节点模块读取.xls文件时出错

“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错

通过 Apache POI 读取大型 Excel 文件 (xlsx) 时出错