Java:Excel

Aus Alexander's Wiki

Excel-Datei mit der JAVA POI-HSSF API einlesen

Um eine Excel Datei einzulesen, benötigt man zunächst einen InputStream, dem die einzulesende Datei in Form eines String, der den Dateipfad enthält, übergeben wird. Dieser InputStream wird wiederum beim Erstellen eines Objektes HSSFWorkbook, welches sozusagen für die Excel-Datei als ganzes steht, benötigt. Über das erzeugte Workbook Objekt kann man die Funktion getSheet aufrufen, die entweder mit dem Namen des Tabellenblatts oder die Position verarbeiten kann.

Damit wären auch alle Voraussetzungen erfüllt um Zeilenweise die einzelnen Excel Zellen einlesen zu können. Dies funktioniert recht simpel über die Klasse HSSFRow, von der man ein Objekt erzeugen muss in dem man über das HSSFSheet Objekt eine bestimmte Zeile sozusagen einließt. Die einzelnen Zellen können dann problemlos über dieses Objekt angesprochen werden.

  InputStream input = new FileInputStream(filename);
  HSSFWorkbook wb = new HSSFWorkbook(input);
  HSSFSheet sheet = wb.getSheet(sheetname);
  HSSFRow row = sheet.getRow(0);
  row.getCell(0).getNumericCellValue();

Excel-Datei mit der JAVA POI-HSSF API schreiben

Analog zum Einlesen einer Excel Datei funktioniert auch das Schreiben in eine Excel Datei über die Java POI API. Erst ein Workbook anlegen, dann über dieses Workbook ein Tabellenblatt erstellen bzw. ein vorhandenes öffnen. Und nun kann man die Zellen wiederum über die Row und Cell Objekte ansprechen, mit Inhalten befüllen und formatieren.

  public HSSFWorkbook wb = new HSSFWorkbook();
  public HSSFSheet sheet = wb.createSheet("Name des Excel-Sheets");
  public HSSFRow row = null;
  public HSSFCell cell = null;

Die einzelnen Zellen lassen sich vielseitig formatieren. Angefangen von Ausrichtungen, über die Schriftart, Schröße und Stärke kann unter anderem auch der Hintergrund farblich angepasst oder z.B. einer Zelle ein bestimmtes Format zugewiesen werden.

  public HSSFDataFormat format = wb.createDataFormat();
  public HSSFFont font = wb.createFont();
  font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  public HSSFColor color = null;
  public HSSFCellStyle cellstyle = wb.createCellStyle();
  cellstyle.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
  cellstyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
  cellstyle.setFillPattern( HSSFCellStyle.SOLID_FOREGROUND );
  cellstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  cellstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  cellstyle .setBorderRight(HSSFCellStyle.BORDER_THIN);
  cellstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  cellstyle.setFont(font);
  cellstyle.setDataFormat(format.getFormat("#,##"));

Wenn man sich ein Standard-Set an Formatierungen in Form der CellStyles erarbeitet hat kann man nun die Zellen mit Inhalten beschreiben und anschließen den passenden CellStyle setzen.

  row = sheet1.createRow((short)0);
  cell = row.createCell(0);
  cell.setCellValue("Zeile 1 - Zelle 1");
  cell.setCellStyle(cellstyle);
  row = sheet1.createRow((short)1);
  cell = row.createCell(1);
  cell.setCellValue("Zeile 2 - Zelle 2");,
  cell.setCellStyle(cellstyle);

Die Festlegung der Zellbreite kann automatisch erfolgen. Die fertige Datei lässt sich als FileOutputStream abspeichern.

  sheet.autoSizeColumn((short)0);
  sheet.autoSizeColumn((short)1);
  FileOutputStream fileOut = new FileOutputStream("workbook.xls");
  wb.write(fileOut);
  fileOut.flush();
  fileOut.close();

Weiterführende Links