- Работа с Excel в Java через Apache POI
- Авторизуйтесь
- Работа с Excel в Java через Apache POI
- Подготовка: загрузка библиотек и зависимостей
- Запись
- Чтение
- Читаем XLSX на Android при помощи Apache POI
- Работа с таблицей Excel из Java
- Creating/Reading an Excel in Android.
- Overview:
- However, we will only cover the following in this article:
- Downloading the JAR file
- Exporting jar as a dependency in Android Studio
- Creating/Reading an Excel file in Android.
- Excel Sheet accessing through android application in very few lines of code.
- Steps to achieve the target:-
- 1) Create a project in android “Exel_Example” and fill all the required details.
- 2) In AndroidManifest.xml file add “WRITE_EXTERNAL_STORAGE ” permission as we require to access the external storage for saving the Excel file.
- 3) Add the poi-3.7.jar (or updated version) that you have downloaded from the link provided above. Add this jar to your project’s External Jars.
- 4)Create a new class named “MainActivity.java”
- To read the contents of the file have a look at the function “readExcelFile” below
- Related Reading
- Here is the entire code.
- MainActivity.java
- Create a main.xml file in “layout” folder
Работа с 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 .
Sportmaster Lab , Санкт-Петербург, Москва, Краснодар, можно удалённо , От 100 000 до 350 000 ₽
Если вы будете добавлять библиотеки вручную — не забудьте о вышеназванных файлах. Скачать всё можно отсюда. Помните — если вы загрузите только 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 .
В виде кода это будет выглядеть следующим образом:
Источник
Читаем XLSX на Android при помощи Apache POI
UPD (06.09.2014): Больше нет необходимости компилировать с опцией —core-library Сама по себе задача прочитать формат XLSX при помощи Apache POI XSSF совершенно не хитрая. Не хитрая ровно до тех пор, пока вы не решите подключить эту библиотеку к вашему приложению для Android. К сожалению, гугление ни к чему не привело — мне не удалось найти реальных инструкций или рекомендаций по использованию XSSF на Android. Вообще ни одного упоминания о том, что эта библиотека действительно может работать на Android.
HSSF(XLS) — работает без проблем, XSSF(XLSX) — не удалось ничего найти, только рекомендации обрабатывать все при помощи POI где-нибудь на сервере.
Далее раскрываю, в чем заключается проблема и как я её решил :
Дело в том, что в Android есть ограничение на 65К методов в приложении, а для работы XSSF необходим jar, содержащий Open XML Schemas, в котором даже в сокращенной версии для POI содержится около 67К методов.
Напрашивается мысль, что можно все это дело попытаться уменьшить при помощи proguard. Однако почему-то никак не получалось сократить всю библиотеку так, чтобы приложение работало.
В итоге саму библиотеку уменьшил при помощи proguard, а схемы — вручную. Просто при помощи архиватора удалил из jar со схемами все файлы, которые, на мой взгляд, не нужны для чтения XLSX, после этого раз за разом запускал приложение, пытался читать файл и добавлял классы из-за отсутствия которых приложение падало. В конце концов — заработало!
Пример работающего приложения можно найти на GitHub: github.com/andruhon/AndroidReadXLSX
Для работы библиотеки и её зависимостей необходимы классы из javax, которых, к сожалению, нет в Android.
Здесь нас спасает , однако для того, чтобы скомпилировать приложение придется добавить опцию —core-library к DX.
UPD (06.09.2014):
Перекомпилировал StAX предварительно переименовав пространство имен «javax» в «aavax», после этого во всех остальных бинариках *.class заменил все строки ‘javax/xml/stream’, ‘javax/xml/namespace’ и ‘javax.xml.strings’ на соответствующие строки с «aavax». После этого «испорченый» stax-api запаковал в общий jar, все равно по отдельности работать не будет. Теперь вы можете просто скопировать два JAR файла в ваш lib и наслаждаться без дополнительных танцев с бубном.
Использованный конфиг proguard (по большему счету делает только ‘-shrink’):
[на входе dom4j-1.6.1.jar, poi-3.10-FINAL-20140208.jar, poi-ooxml-3.10-FINAL-20140208.jar, xmlbeans-2.3.0.jar]
Источник
Работа с таблицей Excel из Java
Собственно возникла проблема — обработать данные из таблицы и на их основе получить другую таблицу.
Вариантов решения этой проблемы несколько:
- Макрос — единственной проблемой является VBA, на изучение которого времени нет совершенно, да и не нравится его синтаксис
- Приложение на C# тут вроде все хорошо, но к машине на которой будет выполняться данное приложение сразу предъявляется много дополнительных требований:
- .NET Framework
- Установленный офис
- установленная основная сборка взаимодействия (PIA) для приложения Office
- связка Java и библиотека Apache POI—на этом способе я и хочу остановиться подробнее
Apache POI — это Java API для доступа к документам формата Microsoft.
Собственно для работы с таблицами Excel предназначен проект POI-HSSF. На данный момент есть 2 варианта библиотеки:
- POI 3.5 beta 5, and Office Open XML Support (2009-02-19)—идет работа над поддержкой формата Office 2007
- POI 3.2-FINAL Released (2008-10-19) — последний стабильный релиз
Я расскажу о работе с версией 3.2
Основным классом для работы с таблицей Excel является класс HSSFWorkbook пакета org.apache.poi.hssf.usermodel, представляющий книгу Excel.
Для чтения книги из файла можно применить следующий код:
Метод возвращает объект класса HSSFWorkbook если все удачно и null в другом случае.
Для сохранения изменений можно применить следующий метод:
Метод записывает книгу wb в файл fileName
Для работы с листами рабочей книги предназначен класс HSSFSheet.
Объект класса HSSFSheet можно получить следующими способами:
- По имени
HSSFSheet sheet= wb.getSheet(«Лист 3») - По номеру (нумерация начинается с 0)
HSSFSheet sheet= wb.getSheet(0) - Создание нового листа
HSSFSheet sheet= wb.createSheet([«имя листа»])
Следующим объектом является строка — HSSFRow.
Получить доступ к объекту строки можно также 3 способами:
- По индексу (индексация начинается с 0)
HSSFRow row = sheet.getRow(index) - Через итератор
- Создание новой строки
HSSFRow row=sheet.createRow(0);
Ну и последним объектом на пути доступа к данным является объект класса HSSFCell — ячейка строки.
Получить доступ к ячейке можно из объекта строки следующими способами:
- По индексу ячейки (индексация начинается с 0)
HSSFCell cell = row.getCell(0); - Через итератор
- Создание новой ячейки
HSSFCell cell = row.createCell(0);
Из объекта ячейки можно уже получать и устанавливать непосредственно данные:
- Логическое значение
boolean b = cell.getBooleanCellValue();
cell.setCellValue(b); - Дата
Date date = cell.getDateCellValue();
cell.setCellValue(date); - Числовое значение
double d = cell.getNumericCellValue();
cell.setCellValue(d); - Строковое значение
String str = cell.getRichStringCellValue().getString();
cell.setCellValue(new HSSFRichTextString(str)); - Формула
String formula = cell.getCellFormula();
cell.setCellFormula(formula);
Этих знаний достаточно чтобы обрабатывать простые таблицы.
Библиотека также предоставляет богатые возможности по форматированию ячеек, по их слиянию, заморозке и т.д.
Подробное описание функций можно найти на их сайте.
Данный способ прежде всего ценен тем, что не требует установки самого офиса и пакета PIA.
Источник
Creating/Reading an Excel in Android.
With the exponential increase in mobile devices, the ease of data accessibility has increased tenfold.
We can see all the data relevant to any domain on the mobile devices, for instance, the annual turnover of an organization, the number of employees who joined last month, etc. However, displaying the data on a mobile application is useful, although it becomes quite useless when we need to share the relevant data with the management or others. It is where exporting of data comes in handy and can be seen in most mobile applications today.
Overview:
We want to create a ‘Contact’ application of our own as shown in the video below.
In this application:
- Initially, we will query the Contacts Content Provider in order to retrieve all the contacts present in the Android device.
- Next, we would export all the contacts into an Excel workbook (.xls format)
- Lastly, we will read data from the previously generated xls workbook and display the results in a recycler-view.
- As a bonus feature, we can also share the excel via the supported applications (eg: Nearby Share, Bluetooth etc.)
You can find the code for this application here .
However, we will only cover the following in this article:
- Downloading the jar file.
- Exporting jar as a dependency in Android Studio.
- Creating an Excel workbook.
- Importing data (Reading) from an Excel workbook.
- Exporting data (Writing) into an Excel Workbook.
By the end of this article, you will be able to generate the below excel workbook:
Without wasting any time further, let us dive into it right away!
Downloading the JAR file
We will be making use of Apache’s POI project in order to achieve our goal. It is completely free and can be downloaded from here.
As per the official documentation:
You can read and write MS Excel files using Java. In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel solution (for Excel 97–2008).
So, not only can we use the POI for generating excel, it can be used for creating MS Word and MS Power point as well. However, it is beyond the scope of this article.
Exporting jar as a dependency in Android Studio
Next, we need to export the JAR as a dependency in Android Studio. I’ve depicted the same in a step-wise manner below:
Источник
Creating/Reading an Excel file in Android.
Home > Creating/Reading an Excel file in Android.
Its easy to store records in database via android application. But what’s the use of it when we cannot get the records on a sheet of paper.
Here’s a simple and systematic solution to get your records in an excel sheet in Android.
Excel Sheet accessing through android application in very few lines of code.
To achieve this download poi-3.7.jar or later from the following reference:-
Note:- make sure its a jar file for eclipse.
Steps to achieve the target:-
1) Create a project in android “Exel_Example” and fill all the required details.
2) In AndroidManifest.xml file add “WRITE_EXTERNAL_STORAGE ” permission as we require to access the external storage for saving the Excel file.
3) Add the poi-3.7.jar (or updated version) that you have downloaded from the link provided above. Add this jar to your project’s External Jars.
For that go to your project’s properties –> click on java Buildpath –> add External Jars –> Browse the jar.
4)Create a new class named “MainActivity.java”
Here we have 2 functionality to cover.
First is to save the Excel File and other is to read the contents of the Excel File.
To save a Excel file, check out the function “saveExcelFile” below
private static boolean saveExcelFile(Context context, String fileName) < // check if available and not read only if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) < Log.e(TAG, “Storage not available or read only”); return false; >boolean success = false; //New Workbook Workbook wb = new HSSFWorkbook(); Cell c = null; //Cell style for header row CellStyle cs = wb.createCellStyle(); cs.setFillForegroundColor(HSSFColor.LIME.index); cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //New Sheet Sheet sheet1 = null; sheet1 = wb.createSheet(“myOrder”); // Generate column headings Row row = sheet1.createRow(0); c = row.createCell(0); c.setCellValue(“Item Number”); c.setCellStyle(cs); c = row.createCell(1); c.setCellValue(“Quantity”); c.setCellStyle(cs); c = row.createCell(2); c.setCellValue(“Price”); c.setCellStyle(cs); sheet1.setColumnWidth(0, (15 * 500)); sheet1.setColumnWidth(1, (15 * 500)); sheet1.setColumnWidth(2, (15 * 500)); // Create a path where we will place our List of objects on external storage File file = new File(context.getExternalFilesDir(null), fileName); FileOutputStream os = null; try < os = new FileOutputStream(file); wb.write(os); Log.w(“FileUtils”, “Writing file” + file); success = true; >catch (IOException e) < Log.w(“FileUtils”, “Error writing ” + file, e); >catch (Exception e) < Log.w(“FileUtils”, “Failed to save file”, e); >finally < try < if (null != os) os.close(); >catch (Exception ex) < >> return success; >
Here we pass the file name as the parameter to the function.
Row row = sheet1.createRow(0); c = row.createCell(0); c.setCellValue(“Item Number”); c.setCellStyle(cs);
This is how we add/enter the value in the cell.
The above code will add the value “Item Number” in the 0th row and 0th column.
To read the contents of the file have a look at the function “readExcelFile” below
Each and every entry in the cell will be printed in the log.
Related Reading
Here is the entire code.
MainActivity.java
Create a main.xml file in “layout” folder
In this xml file, add two buttons with id’s “writeExcel” and “readExcel” representing the “WriteExel” and “ReadExcel” buttons respectively.
Once you have done with all the above steps, your application is ready to test.
Источник