使用Java读取Excel工作表时出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java读取Excel工作表时出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3665字,纯文字阅读大概需要6分钟。
内容图文
![使用Java读取Excel工作表时出错](/upload/InfoBanner/zyjiaocheng/702/8454e130ebea41e4b2663f36a9f66853.jpg)
我正在使用NetBeans 6.9.1使用Spring / Hibernet.我正在尝试阅读Excel文件(.xlsx- Office 2007).使用Vactor存储Excel工作表中的数据,用于读取Excel文件的代码如下所示.
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.NewHibernateUtil;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.hibernate.Session;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
private Vector importExcelSheet(ModelAndView mv)
{
Vector cellVectorHolder = new Vector();
try
{
HSSFWorkbook myWorkBook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream("E:/Project/SpringHibernet/MultiplexTicketBookingNew/web/excelSheets/Country.xlsx")));
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator rowIter = mySheet.rowIterator();
System.out.println(mySheet.getRow(1).getCell(0));
while(rowIter.hasNext())
{
HSSFRow myRow = (HSSFRow) rowIter.next();
Iterator cellIter = myRow.cellIterator();
Vector cellStoreVector=new Vector();
while(cellIter.hasNext())
{
HSSFCell myCell = (HSSFCell) cellIter.next();
cellStoreVector.addElement(myCell);
}
cellVectorHolder.addElement(cellStoreVector);
}
}
catch (Exception e)
{
mv.addObject("msg", e.getMessage());
}
return cellVectorHolder;
}
以下是我的Controller中的一个方法,它调用上面的方法来读取指定的Excel文件
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception
{
ModelAndView mv=new ModelAndView();
try
{
if(request.getParameter("import")!=null)
{
session=NewHibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Vector dataHolder=importExcelSheet(mv);
for (int i=0;i<dataHolder.size(); i++)
{
Vector cellStoreVector=(Vector)dataHolder.elementAt(i);
for (int j=0; j < cellStoreVector.size();j++)
{
HSSFCell myCell = (HSSFCell)cellStoreVector.elementAt(j);
String st = myCell.toString();
System.out.println(st.substring(0,1)+"\t");
}
System.out.println();
}
session.flush();
session.getTransaction().commit();
}
}
catch (Exception e)
{
mv.addObject("msg", e.getMessage());
}
return mv;
}
执行此代码时,将引发以下异常.
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)
我使用了错误的来源或上面的代码有什么不对吗?解决办法是什么?
代码取自here.
解决方法:
您的代码显式请求HSSF,因此只能使用较旧的.xls(二进制)文件.
如果需要,您可以要求POI自动检测您拥有的文件类型,并为您的案例选择适当的HSSF或XSSF.但是,要做到这一点,您需要稍微更改代码,并使用接口而不是具体类(因此无论您获得HSSF还是XSSF对象,您的代码都可以工作)
POI网站有一个guide to making these changes,它将指导您完成.
举个例子,当你按照这个时,你的前几行是:
HSSFWorkbook myWorkBook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream("E:/Project/SpringHibernet/MultiplexTicketBookingNew/web/excelSheets/Country.xlsx")));
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator rowIter = mySheet.rowIterator();
System.out.println(mySheet.getRow(1).getCell(0));
将成为新系统:
Workbook wb = WorkbookFactory.create(new File("/path/to/your/excel/file"));
Sheet mySheet = wb.getSheetAt(0);
Iterator<Row> rowIter = mySheet.rowIterator();
System.out.println(mySheet.getRow(1).getCell(0));
这将适用于.xls和.xlsx文件
内容总结
以上是互联网集市为您收集整理的使用Java读取Excel工作表时出错全部内容,希望文章能够帮你解决使用Java读取Excel工作表时出错所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。