Erreur lors de la lecture de la feuille Excel en utilisant Java
Je suis en train de travailler avec le Printemps/Hibernet à l'aide de NetBeans 6.9.1. J'essaie de lire un fichier Excel (.xlsx - Office 2007). Le code pour lire un fichier Excel est comme suit à l'aide d'un Vactor
pour stocker des données de la feuille 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;
}
Ce qui suit est une méthode dans mon Controller
qui appelle la méthode ci-dessus pour lire le spécifiée fichier 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;
}
Sur l'exécution de ce code, l'exception suivante est levée.
Les données fournies semble être dans le Bureau 2007+ XML. Vous êtes
l'appel de la partie de POI qui traite avec OLE2 des Documents Office. Vous
besoin d'appeler une autre partie de POI pour traiter ces données (par exemple XSSF
au lieu de HSSF)
Suis-je un mauvais source ou quelque chose d'autre est le problème avec le code ci-dessus? Quelle est la solution?
Le code est pris de ici.
source d'informationauteur Bhavesh
Vous devez vous connecter pour publier un commentaire.
Votre code tel qu'il est fait explicitement la demande HSSF, donc ne fonctionne qu'avec les plus âgés .xls fichiers (binaires).
Si vous le souhaitez, vous pouvez demander à POI de détecter automatiquement le type de fichier que vous avez, et de choisir le plus approprié de HSSF ou XSSF pour votre cas. Cependant, pour ce faire, vous devez modifier votre code légèrement, et l'utilisation des interfaces plutôt que de classes concrètes (de sorte que votre code fonctionne si vous obtenez une HSSF ou XSSF objet)
Le POI site a un guide pour la fabrication de ces changements qui devrait vous guider à travers.
Comme un exemple, lorsque vous suivez votre première quelques lignes:
Deviendra, dans le nouveau système:
Ce sera ensuite le travail pour deux .xls et .fichiers xlsx
Vous pouvez aussi remplacer HSSF avec XSSF.
Assurez-vous que vous l'ajouter à la poi-ooxml .bocal en plus de la pi .jar. poi-ooxml fournit le support pour les XSSF. Assurez-vous que vous avez ajouté la donnée dépendances comme indiqué sur le Apache POI composants de la page.