Comment lire des cellules vides d'un fichier excel à l'aide de POI
J'ai essayé de lire un fichier excel à l'aide de POI et puis je voulais mettre les données dans un JTable
.
Voici le fichier excel,
Comme vous pouvez le voir, il y a deux cellules vides dans le tableau ci-dessus, une fois que j'ai lu ci-dessus des données dans un JTable
j'ai obtenu le résultat suivant,
Dans mon JTable
, des cellules vides a déménagé à un mauvais endroit, j'ai utilisé des codes suivants pour obtenir ce résultat, veuillez m'aider à obtenir le résultat correct,
private XLSContainer xLSContainer;
Vector cellVectorHolder;
private int noOfCells=0;
public XLSContainer readXLS(XLSFile xLSFile) {
cellVectorHolder = new Vector();
try {
FileInputStream inputStream = new FileInputStream(xLSFile.getFileName());
POIFSFileSystem pOIFSFileSystem = new POIFSFileSystem(inputStream);
HSSFWorkbook hSSFWorkbook = new HSSFWorkbook(pOIFSFileSystem);
HSSFSheet hSSFSheet = hSSFWorkbook.getSheetAt(0);
Iterator rowIter = hSSFSheet.rowIterator();
while (rowIter.hasNext()) {
HSSFRow row = (HSSFRow) rowIter.next();
if(row.getRowNum()==0){
noOfCells = row.getLastCellNum();
}
Iterator cellIter = row.cellIterator();
Vector cellStoreVector = new Vector();
while (cellIter.hasNext()) {
HSSFCell hSSFCell = (HSSFCell) cellIter.next();
//System.out.println(hSSFCell.getCellNum());
cellStoreVector.addElement(hSSFCell);
}
cellVectorHolder.addElement(cellStoreVector);
}
} catch (Exception e) {
e.printStackTrace();
}
feedXLSContainer();
return xLSContainer;
}//readXLS
private void feedXLSContainer() {
xLSContainer = new XLSContainer();
for (int i = 0; i < cellVectorHolder.size(); i++) {
Vector cellStoreVector = (Vector) cellVectorHolder.elementAt(i);
Vector item = new Vector();
for (int j = 0; j < cellStoreVector.size(); j++) {
HSSFCell cell = (HSSFCell) cellStoreVector.elementAt(j);
item.add(cell.toString());
}
if (i == 0) {
xLSContainer.addHeader(item);
} else {
xLSContainer.addRow(item);
}
}
}
Ce que j'ai fait ci-dessus est mis en-têtes et les lignes de données en différents vecteurs dans une classe appelée xLSContainer
et ensuite mettre ces vecteurs dans un JTable
.
Voici comment je l'ai résolu après plusieurs recherches sur google 🙂
private XLSContainer xLSContainer;
public XLSContainer readXLS(XLSFile xLSFile) {
try {
WorkbookSettings ws = new WorkbookSettings();
ws.setLocale(new Locale("en", "EN"));
Workbook workbook = Workbook.getWorkbook(new File(xLSFile.getFileName()), ws);
Sheet s = workbook.getSheet(0);
System.out.println("Sheet Content::" + s.getName());
readDataSheet(s);
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
return xLSContainer;
}
private void readDataSheet(Sheet s) {
xLSContainer = new XLSContainer();
int noOfRows = s.getRows();
int noOfCols = s.getColumns();
for (int i = 0; i < noOfRows; i++) {
Vector item = new Vector();
for (int j = 0; j < noOfCols; j++) {
if (s.getCell(j, i).getContents() == "") {
item.add("");
} else {
item.add(s.getCell(j, i).getContents());
}
}
if (i == 0) {
xLSContainer.addHeader(item);
}else{
xLSContainer.addRow(item);
}
}
}
- Enfin, j'ai laissé le POI de l'API et j'ai obtenu le résultat que je voulais à l'aide de jxl.jar. Il fonctionne très bien maintenant.
Vous devez vous connecter pour publier un commentaire.
Les Itérateurs vous retournent les cellules existent réellement dans le fichier. Si vous êtes en essayant de reproduire leur position, que presque certainement n'est pas ce que vous voulez, au lieu de cela, vous aurez envie de vérifier chaque cellule de la tour
Vous aurez probablement envie de code quelque chose comme:
Ce code vous permettra d'obtenir à chaque cellule de la tour, et également correctement le format de vos cellules (de sorte que les nombres sont mis en forme pour qu'elles ne se ressemblent dans Excel)
C'est la façon dont je l'ai fait. Espérons que cette aide. Assurez-vous que vous importez les choses nécessaires. dans votre projet.
Le code suivant va obtenir toutes les valeurs de cellules basées sur la taille d'en-tête.
Utilisé, basé sur les réponses précédentes.