З цієї статті ви зможете дізнатися про записи і читання даних із 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.
У вигляді коду це буде виглядати наступним чином: