Wie man ein Excel-Blatt in Java liest, ohne es als Datenbank zu behandeln, und ohne andere externe APIs zu verwenden.
Antworten
Zu viele Anzeigen?Es gibt keinen direkten Weg, um mit Excel-Tabellen in Java umzugehen. Sie sollten die Apache POI Java API verwenden.
Apache POI ist eine Java-Bibliothek zum Lesen und Schreiben verschiedener Microsoft-Dateiformate, insbesondere von Office-bezogenen, die auf OLE2 und OOXML basieren, wie z.B. XLS und DOCX.
Lassen Sie uns ein Beispiel zum Lesen einer Excel-Tabelle sehen. Es unterstützt sowohl das xls
- als auch das xlsx
-Dateiformat.
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
private Vector importExcelSheet(String fileName)
{
Vector cellVectorHolder = new Vector();
try
{
Workbook workBook = WorkbookFactory.create(new FileInputStream(fileName));
Sheet sheet = workBook.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();
while(rowIter.hasNext())
{
XSSFRow row = (XSSFRow) rowIter.next();
Iterator cellIter = row.cellIterator();
Vector cellStoreVector=new Vector();
while(cellIter.hasNext())
{
XSSFCell cell = (XSSFCell) cellIter.next();
cellStoreVector.addElement(cell);
}
cellVectorHolder.addElement(cellStoreVector);
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
return cellVectorHolder;
}
Rufen Sie die obige Methode auf, die einen Vector
zurückgibt, wie folgt.
Vector dataHolder=importExcelSheet("Excel_file.xlsx");
Hinweis: Der hier verwendete Vector
dient nur zur Demonstration. Man sollte ihn nicht verwenden, da er in Java veraltet ist. Verwenden Sie andere Arten von Sammlungen, die im Java Collection Framework verfügbar sind.
Sie können nicht.
Die Java SE- und EE-APIs unterstützen nicht das Lesen von Excel-Tabellenkalkulationen.
(Nun ja, Sie könnten natürlich einige Monate damit verbringen, die Excel-Spezifikationen durchzulesen und Ihren eigenen Tabellenkalkulationsleser von Grund auf zu entwickeln. Aber das erscheint mir als eine Verschwendung von Mühe. Verwenden Sie einfach eine der Alternativen, die Sie abgelehnt haben.)
Bezüglich des Ansatzes, die Tabelle in ein CSV umzuwandeln und dieses zu lesen:
- Dies ist KEIN Lesen der Tabelle.
- Es erfordert eine externe Anwendung (z.B. Excel), um die Umwandlung von der Tabelle in CSV durchzuführen.
- Es ist verlustbehaftet. Sie können nur den einfachen Dateninhalt der Tabelle lesen. Alles andere geht verloren.
Sie müssen Apache POI verwenden, um xls- und xlsx-Dateien zu lesen
Sie können HSSF, XSSF, SXSSF je nach Ihrem Arbeitsspeicher verwenden....
Versuchen Sie das
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ReadExcel {
private String inputFile;
public void setInputFile(String inputFile) {
this.inputFile = inputFile;
}
public void read() throws IOException {
File inputWorkbook = new File(inputFile);
Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Holen Sie sich das erste Blatt
Sheet sheet = w.getSheet(0);
// Schleife über die ersten 10 Spalten und Zeilen
for (int j = 0; j < sheet.getColumns(); j++) {
for (int i = 0; i < sheet.getRows(); i++) {
Cell cell = sheet.getCell(j, i);
CellType type = cell.getType();
if (cell.getType() == CellType.LABEL) {
System.out.println("Ich habe ein Label "
+ cell.getContents());
}
if (cell.getType() == CellType.NUMBER) {
System.out.println("Ich habe eine Nummer "
+ cell.getContents());
}
}
}
} catch (BiffException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
ReadExcel test = new ReadExcel();
test.setInputFile("c:/temp/lars.xls");
test.read();
}
}