Estoy trabajando con Spring/Hibernet usando NetBeans 6.9.1. Estoy tratando de leer un archivo de Excel (.xlsx- Office 2007). El código para leer un archivo de Excel es el siguiente usando Vactor
para almacenar datos de la hoja de Excel.Error al leer la hoja de Excel usando 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;
}
El siguiente es un método en mi Controller
que llama al método de arriba para leer el archivo de Excel especificada
@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;
}
Al ejecutar este código, se produce la siguiente excepción.
Los datos suministrados parecen estar en Office 2007+ XML. Usted es llamando a la parte de POI que trata con los documentos de Office OLE2. Usted necesidad de llamar a una parte diferente del PDI a procesar estos datos (por ejemplo, en lugar de XSSF HSSF)
Estoy usando una fuente equivocada o algo está mal en el código anterior? ¿Cuál es la solución?
El código está tomado de here.
He descargado otra aplicación 'apache.poi' y he usado el paquete' org.apache.poi.xssf.usermodel. * 'En lugar de usar el paquete' org.apache.poi.hssf.usermodel. * 'Y funcionó para ambos 'xls' y' xlsx'. – Bhavesh
publique esto como la respuesta y acéptelo lo antes posible. – oers