Tôi đang làm việc với Spring/Hibernet bằng NetBeans 6.9.1. Tôi đang cố đọc một tệp Excel (.xlsx- Office 2007). Mã để đọc tệp Excel như sau sử dụng Vactor
để lưu trữ dữ liệu từ trang tính Excel.Lỗi khi đọc trang tính Excel sử dụng Java
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;
}
Sau đây là một phương pháp trong Controller
của tôi mà các cuộc gọi phương pháp trên để đọc file Excel định
@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;
}
On thực thi mã này, ngoại lệ sau đây được ném.
Dữ liệu được cung cấp có vẻ như trong Office 2007+ XML. Bạn đang gọi đến một phần của POI liên quan đến OLE2 Tài liệu Office. Bạn cần phải gọi một phần khác của POI để xử lý dữ liệu này (ví dụ XSSF thay vì HSSF)
Tôi có sử dụng một nguồn sai hay cái gì khác là sai với mã trên? Giải pháp là gì?
Mã được lấy từ here.
Tôi đã tải xuống api 'apache.poi' khác và sử dụng gói' org.apache.poi.xssf.usermodel. * 'Thay vì sử dụng gói' org.apache.poi.hssf.usermodel. * 'Và nó hoạt động cho cả hai 'xls' và' xlsx'. – Bhavesh
xin vui lòng gửi bài này như là câu trả lời và chấp nhận nó, càng sớm càng tốt. – oers