Tutoriál Apache POI

Průvodce knihovnou Apache POI

Co je to Apache POI?

Apache POI (zkratka pro Poor Obfuscation Implementation) je volně dostupná knihovna pro jazyk Java, která umožňuje zpracování dokumentů Microsoft Office. Konkrétně se jedná o:

  • Soubory Excelu (.xls, .xlsx)
  • Soubory Wordu (.doc, .docx)
  • Soubory PowerPointu (.ppt, .pptx)
  • Soubory Visia (.vsd, .vsdx)

POI poskytuje programové rozhraní pro práci se strukturou a daty těchto dokumentů. To umožňuje provádět různé operace, jako například:

  • Získávání a analýza dat z tabulek a grafů
  • Automatické generování dynamických dokumentů a reportů
  • Automatizaci procesů zpracování dokumentů

Začínáme s Apache POI

Instalace knihovny

Apache POI lze jednoduše integrovat do vašeho projektu pomocí nástrojů pro správu závislostí, jako je Maven nebo Gradle.

Konfigurace pro Maven:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>5.2.3</version>
</dependency>

Konfigurace pro Gradle:

implementation 'org.apache.poi:poi:5.2.3'

Načítání dat z Excelu

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

try (Workbook workbook = WorkbookFactory.create(new File("data.xlsx"))) {
  // Získání prvního listu (index 0)
  Sheet sheet = workbook.getSheetAt(0);

  // Procházení všech řádků
  for (Row row : sheet) {
    // Procházení všech buněk v řádku
    for (Cell cell : row) {
      // Získání hodnoty buňky
      String value = cell.getStringCellValue();

      // Výpis hodnoty
      System.out.println(value);
    }
  }
} catch (IOException e) {
  e.printStackTrace();
}

Zápis dat do Excelu

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

try (Workbook workbook = WorkbookFactory.create(new File("data.xlsx"))) {
  // Získání prvního listu (index 0)
  Sheet sheet = workbook.getSheetAt(0);

  // Získání prvního řádku (index 0)
  Row row = sheet.getRow(0);

  // Získání první buňky (index 0)
  Cell cell = row.getCell(0);

  // Nastavení nové hodnoty buňky
  cell.setCellValue("Nová hodnota");

  // Uložení změn
  workbook.write(new FileOutputStream("data_updated.xlsx"));
} catch (IOException e) {
  e.printStackTrace();
}

Rozšířené možnosti knihovny POI

Tvorba vlastních stylů

POI umožňuje detailní nastavení stylů pro formátování dokumentů. Například:

import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

try (Workbook workbook = WorkbookFactory.create(new File("data.xlsx"))) {
  // Vytvoření nového stylu
  CellStyle style = workbook.createCellStyle();

  // Nastavení písma (tučné, velikost 14)
  Font font = workbook.createFont();
  font.setBold(true);
  font.setFontSize(14);
  style.setFont(font);

  // Nastavení barvy pozadí
  style.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());

  // Nastavení zarovnání textu (doprava)
  style.setAlignment(HorizontalAlignment.RIGHT);

  // Aplikace stylu na buňku
  Sheet sheet = workbook.getSheetAt(0);
  Cell cell = sheet.getRow(0).getCell(0);
  cell.setCellStyle(style);

  // Uložení změn
  workbook.write(new FileOutputStream("data_styled.xlsx"));
} catch (IOException e) {
  e.printStackTrace();
}

Práce s grafy

Knihovna POI umožňuje vytvářet a editovat grafy v Excelu:

import org.apache.poi.ss.usermodel.Chart;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

try (Workbook workbook = WorkbookFactory.create(new File("data.xlsx"))) {
  // Získání prvního listu (index 0)
  Sheet sheet = workbook.getSheetAt(0);

  // Získání výkresu
  Drawing drawing = sheet.createDrawingPatriarch();

  // Vytvoření grafu (např. čárový graf)
  Chart chart = drawing.createChart(drawing.createAnchor(0, 0, 0, 0, 0, 0, 10, 10));

  // Nastavení dat grafu
  chart.plot(workbook, sheet);

  // Uložení změn
  workbook.write(new FileOutputStream("data_chart.xlsx"));
} catch (IOException e) {
  e.printStackTrace();
}

Závěrem

Apache POI je robustní nástroj pro programovou manipulaci s dokumenty Microsoft Office. S širokou škálou funkcí pro čtení, zápis a editaci dokumentů umožňuje automatizaci procesů zpracování dokumentů a integraci s jinými systémy. Vývojáři v Javě tak mají k dispozici efektivní řešení pro práci s daty a formátováním dokumentů Office, což otevírá nové možnosti v oblasti správy informací a analýzy dat.

Často kladené otázky (FAQ)

1. Jak instaluji Apache POI?
– Apache POI nainstalujete pomocí nástrojů pro správu závislostí, jako je Maven nebo Gradle.

2. Jak číst z Excelu pomocí Apache POI?
– Vytvořte instanci Workbook a pomocí getSheetAt() získejte list. Procházejte řádky a buňky pomocí Row a Cell.

3. Jak zapisovat do Excelu pomocí Apache POI?
– Získejte instanci Workbook a list. Získejte řádek a buňku a nastavte jejich hodnotu. Uložte změny pomocí write().

4. Jak vytvářet styly v Excelu pomocí Apache POI?
– Vytvořte instanci CellStyle a nastavte písmo, barvu pozadí a zarovnání. Použijte setCellStyle() na cílovou buňku.

5. Jak pracovat s grafy v Excelu pomocí Apache POI?
– Získejte list a výkres Drawing. Vytvořte graf pomocí createChart(). Nastavte data pomocí plot() a uložte změny.

6. Jak číst dokumenty Wordu pomocí Apache POI?
– Vytvořte instanci HWPFDocument nebo XWPFDocument dle verze Wordu. Využijte metody pro přístup k textu, odstavcům a dalším prvkům.

7. Jak zapisovat do dokumentů Wordu pomocí Apache POI?
– Vytvořte instanci HWPFDocument nebo XWPFDocument. Použijte metody pro přidávání a úpravy textu, odstavců a dalších prvků. Uložte pomocí write().

8. Jak pracovat s dokumenty PowerPoint pomocí Apache POI?
– Vytvořte instanci HSLFSlideShow nebo XSLFSlideShow dle verze PowerPointu. Použijte metody třídy SlideShow pro přístup k snímkům, tvarům a dalším prvkům.

9. Jak pracovat s dokumenty Visio pomocí Apache POI?
– Vytvořte instanci VSDDocument. Použijte metody třídy Document pro přístup k shapesheetům, tvarům a dalším prvkům.

10. Kde najdu další informace o Apache POI?
Oficiální web Apache POI
API dokumentace Apache POI
Fórum Apache POI