2013-04-14 14 views
11

Ich schreibe ein Programm, das von Excel-Dateien lesen und schreiben muss, unabhängig von dem Format (xls oder xlsx).Lesen und Schreiben von xls und xlsx Excel-Datei in Java

Ich kenne den Apache POI, aber es scheint, dass es verschiedene Klassen hat, um xls Datei (HSSF) und xlsx (XSSF) Dateien zu behandeln.

Wer weiß, wie ich erreichen könnte, was ich hier versuche. (Ideen für die Verwendung einer anderen API als POI sind ebenfalls willkommen).

+0

Haben Sie versucht, das Tutorial auf der Apache-Website zu folgen? Es ist nicht so schwer! Schreiben Sie selbst einen Code und fragen Sie danach! –

+0

Ich habe es versucht .. aber wie in meiner Frage erwähnt, verwendet die API verschiedene Klassen, um verschiedene Arten zu behandeln. Siehe meinen Kommentar unten. – Shiva

+0

Nun, dann denke ich, dass Sie Ihre eigene Schnittstelle erstellen müssen, um das Detail der Unterstreichungsimplementierung, das Abstrakte Fabrikmuster, zu verbergen. –

Antwort

22

Es ist sehr einfach, benutzen Sie einfach den gemeinsamen SpreadSheet interfaces

Ihren Code etwas aussehen würde:

Workbook wb = WorkbookFactory.create(new File("myFile.xls")); // Or .xlsx 
Sheet s = wb.getSheet(0); 
Row r1 = s.getRow(0); 
r1.createCell(4).setCellValue(4.5); 
r1.createCell(5).setCellValue("Hello"); 

FileOutputStream out = new FileOutputStream("newFile.xls"); // Or .xlsx 
wb.write(out); 
out.close(); 

Sie lesen, schreiben, bearbeiten usw. eine vorhandene Datei, die beide .xls und .xlsx, mit genau dem gleichen Code, solange Sie die gemeinsamen Schnittstellen verwenden

2

Warum erkennen Sie den Dateityp nicht von der Erweiterung und verwenden die entsprechende Apache POI-Klasse für die Verarbeitung? Ich bezweifle, dass es eine absolut universelle Out-of-the-Box-Lösung für Ihre Situation gibt.

+0

Genau das, was ich gehofft hatte zu vermeiden !!! – Shiva

+0

Ein kurzer Blick auf die Apache POI-Dokumentation zeigt, dass sowohl HSSF als auch XSSF dieselben Schnittstellen zu implementieren scheinen - HSSFWorkbook und XSSFWorkbook zum Beispiel haben beide eine Arbeitsmappe, mit der man arbeiten kann. Sie müssen nur den Typ erkennen, instanziieren den richtigen Typ und der Rest des Codes sollte über die allgemeine Schnittstelle möglich sein. –

+1

POI bietet eine Klasse zum Erkennen des Typs und Erstellen des richtigen Objekts für Sie - 'WorkbookFactory' - siehe meine Antwort für Details – Gagravarr