Робота з excel в java через apache poi

Робота з excel в java через apache poi

З цієї статті ви зможете дізнатися про записи і читання даних із Excel файлів в Java (буде розглянуто як XLS. Так і XLSX формат). Ми будемо використовувати бібліотеку Apache POI і зосередимося на роботі з типами String і Date. робота з останнім відбувається досить хитро. Нагадаю, що роботу з числами ми вже розглянули в іншій статті.







Бібліотеку poi-XX.jar ви можете використовувати для всіх старих (xls. Doc. Ppt) файлів Microsoft Office, для нових (xlsx. Docx. Pptx) вам знадобиться poi-ooxml-XX.jar. Дуже важливо розуміти, що до чого відноситься, тому що використовувані класи теж різні - для старих розширень це HSSFWorkbook. а для нових - XSSFWorkbook.

Підготовка: завантаження бібліотек і залежностей

Звичайно, існує досить багато відкритих бібліотек, які дозволяють працювати з Excel файлами в Java, наприклад, JXL, але ми будемо використовувати має самий великий API і найпопулярнішу - Apache POI. Щоб її використовувати, вам потрібно завантажити jar файли і додати їх через Eclipse вручну, або ви можете надати це Maven.

У другому випадку вам потрібно просто додати наступні дві залежності:

Найзручніше в Maven - що він завантажить не тільки зазначені poi.jar і poi-ooxml.jar. але і все jar файли, які використовуються всередині, тобто xmlbeans-2.6.0.jar. stax-api-1.0.1.jar. poi-ooxml-schemas-3.12.jar і commons-codec-1.9.jar.







Якщо ви будете додавати бібліотеки вручну - не забудьте про вищеназваних файлах. Завантажити все можна звідси. Пам'ятайте - якщо ви завантажте тільки poi-XX.jar. то ваш код скомпілюється без помилок, але потім впаде з java.lang.NoClassDefFoundError: org / apache / xmlbeans / XmlObject. так як всередині буде викликатися xmlbeans.jar.

У цьому прикладі ми запишемо в xls файл наступні дані: в перший осередок - рядок з ім'ям, а в другу - дату народження. Ось покрокова інструкція:

  • Створюємо об'єкт HSSFWorkBook;
  • Створюємо лист, використовуючи на об'єкті, створеному в попередньому кроці, createSheet ();
  • Створюємо на листі рядок, використовуючи createRow ();
  • Створюємо в рядку осередок - createCell ();
  • Задаємо значення осередку через setCellValue ();
  • Записуємо workbook в File через FileOutputStream;
  • Закриваємо workbook. викликаючи close ().

Для запису рядків або чисел цього цілком достатньо, але щоб записати дату, нам знадобиться зробити ще дещо:

  • Створити DateFormat;
  • Створити CellStyle;
  • Записати DateFormat в CellStyle;
  • Записати CellStyle в клітинку;
  • Тепер в цей осередок можна записати об'єкт Date через все той же setCellValue;
  • Щоб дата помістилася в клітинку, нам потрібно додати одну властивість автоматично змінювати розмір: sheet.autoSizeColumn (1).

Все разом це буде виглядати так:

Тепер ми вважаємо з щойно створеного файлу то, що ми туди записали.

  • Для початку створимо HSSFWorkBook. передавши в конструктор FileInputStream;
  • Отримуємо лист, передаючи в getSheet () його номер або назва;
  • Отримуємо рядок, використовуючи getRow ();
  • Отримуємо осередок, використовуючи getCell ();
  • Дізнаємося тип осередку, використовуючи на ній getCellType ();
  • Залежно від типу комірки, читаємо її значення, використовуючи getStringCellValue (). getNumericCellValue () або getDateCellValue ();
  • Закриваємо workbook використовуючи close ().

Нагадаю, що дату Excel зберігає як числа, тобто тип осередку все одно буде CELL_TYPE_NUMERIC.

У вигляді коду це буде виглядати наступним чином:

На закінчення







Схожі статті