Вышла новая версия Apache POI 3.8
26 Марта вышел новый релиз библиотеки Apache POI — версии 3.8.
Apache POI — это библиотека на языке Java для чтения и записи документов Microsoft Office,
таких как Excel, PowerPoint и Word. С помощью POI вы можете программно создавать новые
или изменять существующие документы, индексировать текст, обрабатывать вложенные
(embedded) объекты (документы, картинки и т.д.) и много чего другого.
Предыдущая стабильная версия Apache POI вышла полтора года назад, в Октябре 2010 года,
поэтому изменений накопилось порядочно. Исправлено более 200 багов, добавлены многочисленные
новые фичи и улучшена общая производительность.
Что нового в POI 3.8?
SXSSF -реализация Spreadsheet API для создания .xlsx файлов большого объема
( > 100K записей) при ограниченном объеме памяти.
Стандартная реализация генератора .xlsx файлов (XSSF) строит в памяти модель всего документа,
т.е. для каждой записи (row) и ячейки (cell) в памяти сидит моделька. Поскольку формат .xlsx основан
на XML, за каждой моделькой стоит XML bean, получаются довольно развесистые структуры и при
генерации больших объемов данных есть шанс получить OutOfMemoryError.
SXSSF решает эту проблему тем, что хранит в памяти только последние N записей для каждого
worksheet-а, а остальные по мере накопления скидываются во временные файлы и при сохранении
содержимое этих временных файлов копируется в основной документ.
Небольшой пример: при запуске с ключем -Xmx128M код ниже вылетает с OutOfMemoryError примерно
после генерации 200000 ячеек:
Workbook workbook = new XSSFWorkbook(); // keep the whole model in memory Sheet sheet = workbook.createSheet(); // generate a grid of 1M rows x 256 columns for(int i = 0; i < 1000000; i++) < Row row = sheet.createRow(i); for(int j = 0; j < 256; j++)< Cell cell = row.createCell(j); cell.setCellValue(i*j); >> // the code never gets to this point because of OutOfMemoryError FileOutputStream out = new FileOutputStream("workbook.xlsx"); workbook.write(out); out.close();
то же самое, но с использованием SXSSF работает без проблем даже с ключем -Xmx64M:
// keep last 100 rows in memory, flush older rows to disk Workbook workbook = new SXSSFWorkbook(100); Sheet sheet = workbook.createSheet(); // generate a grid of 1M rows x 256 columns for(int i = 0; i < 1000000; i++) < Row row = sheet.createRow(i); for(int j = 0; j < 256; j++)< Cell cell = row.createCell(j); cell.setCellValue(i*j); >> // Voila! FileOutputStream out = new FileOutputStream("workbook.xlsx"); workbook.write(out); out.close();
Обновления в калькуляторе формул (Formula Evaluator)
Поддержка новых функций:
Всего POI поддерживает 140 функций из примерно 300 поддерживаемых в Excel 2010.
Полный список поддерживаемых функций можно посмотреть здесь
Функции определяемые пользователем (User-Defined Functions)
- Функция определена в Excel-е, но не реализована в POI
- Функция определена в VBA макросе или во внешней add-in библиотеке
POI 3.8 предоставляет вам возможность программно реализовать нужную вам функцию
и зарегистрировать ее в калькуляторе. Примерно так:
/** * CUBEMEMBER: функция для OLAP анализа, не поддерживается в POI-3.8 */ FreeRefFunction CUBEMEMBER = new FreeRefFunction() < public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) < if(args.length != 3) < // функция CUBEMEMBER принимает 3 аргумента return ErrorEval.VALUE_INVALID; >// TODO: implement me // пока функция не реализована возвращаем #NUM! return ErrorEval.NUM_ERROR; > >; WorkbookEvaluator.registerFunction("CUBEMEMBER", CUBEMEMBER); // теперь вместо NotImplementedException калькулятор будет вызывать пользовательский код
Excel Ant tasks
Расширения для Ant-а предназначены для пересчета и проверки формул без написания Java кода.
У этого функционала интересная история: он пришел из научного проекта в котором Excel файлы
создаются third-party софтом, не POI. Файлы содержат как сами данные, так и формулы и нужно
проверять их корректность на серверной стороне, при этом проверяющий не является программистом
на Java и знает только чуть-чуть синтаксис Ant.
С помощью Excel Ant tasks задача сводится к написанию build файлов. Target-ы взаимодействующие
с POI выглядят так:
на выходе Ant-а мы увидим следующее:
Habratest: [excelant] Using input file: habratest.xls [test] setting globalPrecision to 0.0010 in the evaluator [evaluate] test precision = 1.0E-4 global precision = 0.0010 [evaluate] Using evaluate precision of 1.0E-4 over the global precision of 0.0010 [excelant] 1/1 tests passed.
XSLF — Java API для работы с файлами .pptx (PowerPoint 2007-2010)
Теперь POI поддерживает полнофункциональный User API для работы с файлами в формате .pptx.
Вы можете программно создавать новые или редактировать существующие .pptx файлы,
вставлять или менять слайды, текст, картинки, таблицы и прочее.
Ниже неполный список поддерживаемых фич:
- Создание новых слайдов, в т.ч. с предопределенным дизайном (Заголовок, Заголовок и Текст,
Заголовок и Картинка и т.п.) - Вставка картинок
- Вставка текстовых блоков с поддержкой параграфов и блоков форматирования
- Объединение слайдов из нескольких презентаций
- Таблицы
- Полная поддержка геометрических объектов определенных в PowerPoint-е:
от примитивов (rectangle, ellipse) до объектов с произвольной геометрией (freeforms) - PPTX2PNG: Конвертация слайдов в картинки
Последнюю фичу, PPTX2PNG, хотелось бы отметить особо: эта утилита с Java main() интерфейсом
конвертирует слайды в картинки PNG, но вы можете взять этот код за основу и написать конвертер
в другие графические форматы (SVG, Flash, HTML5 Canvas и пр.). Все, что вам нужно — это передать
подкласс от java.awt.Graphics2D в метод slide.draw(Graphics2D graphics);
Например, этот пример демонстриурет как конвертировать .pptx слайды в SVG с использованием SVGGraphics2D драйвера из Apache Batik
Конвертеры .doc файлов MS Word в HTML, XSL-FO и текст
Эта функциональность уже упоминалась на Хабре, поэтому отмечу только основное:
- Word-to-HTML Converter, конвертирующий документ Word в HTML, можно даже с картинками;
- Word-to-Text Converter, который является заменой для прошлого WordExtractor, корректно обрабатывающий
вложенные OLE-документы, разбиение на абзацы, коды полей (в том числе гиперссылки); - Word-to-FO Converter, конвертирующий документ Word в файл XSL FO, также возможно с картинками.
Дальше этот файл можно передать на обработку в Apache FOP для конвертации Word в PDF.
Багфиксы, багфиксы и еще больше багфиксов.
Была проведена огромная работа по улучшению стабильности библиотеки в целом
— более 250 изменений с предыдущей версии 3.7. В первую очередь это касается читаемости документов.
Баг-репорты вида «POI не читает мой файл и валится c exception» уже редкость и, я надеюсь, скоро исчезнут совсем 🙂
Генерация файлов Word в Apache POI
Для языка Java (как, впрочем, и для любого другого языка программирования) всё еще не придумали более простого и действенного способа генерации документов docx, чем библиотека Apache POI. В конце нулевых появился сей высокоуровнеый API, позволящий говорить с формируемым документом не на языке разметки XML, а с помощью удобных полей и выводов.
Судя по моим Google-запросам на протяжении более чем года сообщество пользователей этой библиотеки продержалось года этак до 2012, в то время как новые версии библиотеки всё еще появляются на главной странице проекта. Не на все вопросы, касающиеся формирования самого примитивного документа, есть ответы в документации или stackoverflow, не говоря уже о текстах на русском языке. Постараемся компенсировать этот недостаток данных для тех, кому это может понадобиться.
Основные классы API
XWPFDocument — целостное представление Word документа. В нём не только содержится xml-код, интерпретируемый редакторами (Word, LibreOffice), но также содержатся и методы для определения метаданных отображения — набора стилей, сносок и т.п. В этой статье поговорим о первом, так как работа с метаданными не так явно задокументирована, к тому же многие редакторы успешно справляются с отображением документа и без подсказок.
Итак, предположим, у вас на руках есть (ненужный) файл docx. Преобразуем его в файл zip (осторожно, обратное преобразование путем переименования zip -> docx может сделать файл недоступным для вашего редактора(!)), в получившемся архиве откроем папку word, а в ней — файл document.xml. Перед нами xml-представление word-файла, которое также можно было бы получить через Apache POI, с меньшими трудностями.
File file = new File("C:/username/document.docx"); FileInputStream fis = new FileInputStream(file.getAbsolutePath()); XWPFDocument document = new XWPFDocument(fis); // Вот и объект описанного нами класса String documentLine = document.getDocument().toString();
Для того, чтобы поближе познакомиться с содержимым документа, придется вооружиться еще двумя классами API: XWPFParagraph и XWPFTable.
XWPFParagraph — как следует из названия, представляет собой параграф документа. Расположен он может быть как внутри XWPFDocument,
document.getParagraphs(); XWPFParagraph lastParagraph = document.createParagraph();
так и внутри таблицы (если точнее — внутри ячейки таблицы, вложенной в ряд таблицы, вложенного непосредственно в таблицу).
document.createTable().createRow().createCell().addParagraph();
Параграф предоставляет изрядный набор информации для вёрстки и размещения текста. Официальная документация на этот счёт достаточно красноречива: отступы слева и справа, сверху и снизу, в том числе и между строками, добавление гиперссылок и границ для параграфа.
XWPFTable — класс, олицетворяющий таблицу. Также как и в XWPFParagraph, XWPFTable можно добавлять к самому документу и к ячейке таблицы (создавая, тем самым, таблицу внутри таблицы). Семантика в таком случае чуточку усложняется.
XWPFTable table = document.createTable(); //Здесь всё просто, создаем таблицу в документе и работаем с ней. XWPFCell cell = table.createRow().createCell();//Добавим к таблице ряд, к ряду - ячейку, и используем её. XWPFTable innerTable = new XWPFTable(cell.getCTTc().addNewTbl(), cell, 2, 2); // Воспользуемся конструктором для добавления таблицы - возьмем cell и её внутренние свойства, а так же зададим число рядов и колонок вложенной таблицы cell.insertTable(cell.getTables().size(), innerTable);
XWPFRun — набор данных о выводе текста внутри параграфа. Находится может только внутри параграфа, создается через вызов метода параграфа-родителя:
paragraph.createRun();
Из нескольких «ранов», как я предпочитаю их называть, и состоит целый параграф текста в Word. Каждый «ран» имеет свою настройку шрифта, его цвета и размера, а также стилизации. Через добавление различных «ранов», подчиняющихся разметке параграфа, можно выводить тексты с совершенно разной стилизацией.
Как становится видно из обзора классов, перенос, скажем, css-стиля в документ будет связан с дополнительной сложностью: часть свойств необходимо будет применить к параграфу docx, часть — к объекту класса XWPFRun.
Итак, библиотека легла в External Libraries/jar лежит под рукой, пора творить.
Создадим документ, добавим таблицу 2х2 и параграф.
XWPFDocument document = new XWPFDocument(); XWPFTable table = document.createTable(2, 2); XWPFParagraph paragraph = document.createParagraph(); fillTable(table); fillParagraph(paragraph);
Заполним параграф, добавив ран для вывода текста. После перевода строки стилизация параграфа будет потеряна, и в Word новый параграф будет выведен без красной строки.
void fillParagraph(XWPFParagraph paragraph)
Теперь займёмся заполнением таблицы. Мы можем обращаться не только к уже созданным элементам, но и вызвать у сформированной таблицы метод для добавления рядов или колонок.
void fillTable(XWPFTable table)
Опускаемся глубже, на уровень ряда таблицы. Именно в таком порядке предстаёт разбор таблицы в Apache POI — сначала ряды, потом клетки. Напрямую из таблицы можно получить лишь количество колонок в таблице:
table.getColBandSize();
void fillRow(XWPFRow row) < ListcellsList = row.getCells(); cellsList.forEach(cell -> fillParagraph(cell.createParagraph())); >
Оказавшись в ячейке двигаться глубже уже некуда, поэтому можно снова вызвать наш дуболомный метод по заполнению параграфа, предварительно создав его в таблице.
Итак, можно легко уловить суть структуры документа в Word: вкладывай одно в другое и предоставляй доступ (в том числе и к созданию новых экземпляров). К сожалению, далеко не всегда есть возможность получить последний элемент во вложенной коллекции. Чаще всего приходится пользоваться такими вот ухищрениями:
XWPFRun lastRunOfParagraph = paragraph.getRuns(paragraph.getRuns().size() - 1);
Хорошо, с содержимым таблицы разобрались. Что если нам нужно явно уточнить ширину таблицы, а не оставлять её для волной интерпретации редактора?
Для некоторых на первый взгляд числовых значений, например, ширины таблицы, в Apache POI существуют целые классы.
CTTblWidth widthRepr = table.getCTTbl().getTblPr().addNewTblW(); widthRepr.setType(STTblWidth.DXA); widthRepr.setW(BigInteger.valueOf(4000));
С помощью типа укажем, какая именно ширина нам нужна: auto, pct или dxa. В первом случае таблицы займёт всю предоставленную ей ширину, во втором — процент от всей ширины, указанный позже методом setW. В нашем же случае вмешиватеся специальная единица измерения — dxa, равная 1/20 точки.
Классы, подобные CTTblWidth, используются повсеместно: для определения ширины страницы (PgSize), ширины ячейки и др.
Единцы измерения в Apache POI
В хорошем документе всё выверенно и расчерчено идеально, вплоть до самого пикселя. Возможно, в теории можно сделать всё средствами Apache POI и без углубления в тему единиц измерения, но лучше уделить им внимание сразу, чтобы избежать недопониманий в духе «почему это схлопнулось» и «когда переместил картинку в word на один сантиметр».
О поддержке сантиметров и остальной метрической системы тут остается только мечтать. Это резонно (каждый шрифт уникален, у каждого редактора своя специфика), но дико неудобно. Придется прибегнуть ко множеству конвертаций, если вы хотите задавать отступы (ведь именно в сантиметрах мы привыкли видеть их в word) в сантиметрах. Итак, указав тип измерения dxa для некоторой ширины, как описно в параграфе выше, мы получаем в распоряжение некоторое точное значение, но абсолютно не представляем как им воспользоваться. Для перевода в сантиметры на stackoverflow есть формула. Для всего остального существует класс Units. В нем определены как методы для перевода единиц измерения, так и сами соотношения между значениями.
Запись готового документа
Для записи в конечный файл есть удобный метод XWPFDocument — write. На вход принимается поток, в который пойдёт запись.
document.write(new FileOutputStream(new File("/path/to/file.docx")));
Если готовый документ нужно куда-то передать можно подать в качестве аргумента не File-, а ByteArrayOutputStream.
Информация об элементе отображения в формате xml
Имея документ, отображающийся корректно в определенном редакторе, полезно было бы узнать как именно представлен необходимый параграф или другой элемент. Для этого определенны специальные методы, возвращающие объекты классов пакета org.openxmlformats.schemas.wordprocessingml.x2006.main. Из названия (wordprocessingml) видно, что данный набор классов используется только для работы с документами word. Например, для xlsx документов есть пакет spreadsheetml, некоторые классы которого очень и очень похожи на классы wordprocessingml, поэтому конвертация между форматами достаточно затруднена.
paragraph.getCTP(); table.getCTTbl();
Так, пустой параграф будет иметь скромное представление
Пустая таблица покажет больше интересного.
Что здесь интересного? Свойства tblPr — всевозможные свойства таблицы. Внутри уже описанная ширина таблицы (установлена 0, но свойство «auto» все равно выведет таблицу в приемлимой, автоматической ширине). Также tblBorders — набор информации о границах таблицы. Далее идёт явно выраженное представление внутренностей таблицы. tr — ряд таблицы, внутри вложенны tc. Внутри tc оказался бы набор вложенный параграфов, если бы мы добавили хотя бы один.
Попробуем пополнить параграф информацией и посмотреть что из этого получится.
XWPFParagraph xwpfParagraph = document.getParagraphs().get(0); xwpfParagraph.setFirstLineIndent(10); XWPFRun run = xwpfParagraph.createRun(); run.setFontFamily("Times New Roman"); run.setText("New text");
New text
Здесь ситуация ровно такая же: объект с мета-информацией (в него добавлена информация об отступе красной строки, который мы вложили в коде), а так же само содержимое: там размещается список «ранов». В первый и единственный мы добавили текст и информацию о шрифте. Эта информация также разделилась внутри «рана» — информация о шрифте попала в rPr, сам текст — в элемент t.
Вместо вывода
Apache POI предоставляет удобный, и, что не менее важно, бесплатный API для работы с документами. В нем непросто добиться единого отображения во всех редакторах (Office Online и LibreOffice обязательно будут выглядеть иначе), есть множество неудобств с единицами измерения, а так же непонятно где и какие свойства в элементах должны находиться. Тем не менее, работа с этими свойствами подчинена логике, а возможность подглядеть в xml не нарушая эту логику делает разработку гораздо более удобной.
Aspose.Cells Java для Apache POI SS — HSSF и XSSF
Иногда мы получаем следующий вопрос: почему мы должны использовать продукты Aspose, а не Apache POI? На этот вопрос легко ответить: особенности и функциональность.
Apache POI SS — HSSF и XSSF
HSSFявляется чистой Java реализацией проекта POI формата файла Excel ‘97 (-2007). XSSF является чистой Java реализацией проекта POI формата файла Excel 2007 OOXML (.xlsx).
HSSF и XSSF предоставляют способы чтения электронных таблиц, создания, изменения, чтения и записи XLS электронных таблиц. Они предоставляют:
- низкоуровневые конструкции для людей с особыми потребностями
- API модели событий для эффективного доступа только для чтения
- полный API пользовательской модели для создания, чтения и изменения файлов XLS
Aspose.Cells for Java
Aspose.Cells for Java is an award-winning Excel Spreadsheet component that allows Java developers to embed the ability to read, write and manipulate Excel® spreadsheets (XLS, XLSX, XLSM, XLSB, XLTX, SpreadsheetML, CSV, ODS), HTML, MHTML, PDF и форматы файлов изображений в свои собственные Java приложения без необходимости полагаться на Microsoft Excel®.
Aspose.Cells for Java — это зрелый, масштабируемый и многофункциональный компонент, который предлагает множество функций, выходящих далеко за рамки простых возможностей экспорта данных других поставщиков. С помощью Aspose.Cells for Java разработчики могут экспортировать данные, форматировать электронные таблицы с максимальной детализацией, импортировать изображения, создавать диаграммы, применять и вычислять сложные формулы, передавать данные Excel® в потоковом режиме, сохранять в различных форматах и многое другое — и все это без использования Microsoft Excel®. или Microsoft Автоматизация офиса.
Почему не Apache POI SS — HSSF и XSSF
Стоит отметить, что некоторые задачи можно выполнить с помощью Aspose.Cells, но нельзя выполнить с помощью Apache POI. Например, если вам нужно преобразовать файлы Excel в Pdf, JSON и изображения, то вы не можете использовать только Apache POI, вам также потребуется Microsoft Excel 365 или другие инструменты.
Вы можете сравнить POI с Aspose.Cells. Для этого предлагаем вам ознакомиться с проектом Aspose.Cells для POI (HSSF и XSSF) — он показывает, как можно выполнять разные задачи, используя Aspose.Cells для .Java API по сравнению с POI. Проект также охватывает функции для работы с текстовыми документами, которые доступны только в Aspose.Cells, но не в Apache POI.
Этот проект также полезен для разработчиков, желающих перейти с POI на Aspose.Cells.
Этот подключаемый модуль использует ознакомительную версию Aspose.Cells. Если вы довольны своей ознакомительной версией, вы можете приобрести лицензию вAspose сайт . Чтобы удалить оценочное сообщение и ограничения функций, необходимо применить лицензию на продукт. После покупки продукта вы получите файл лицензии. Пожалуйста, следуйте инструкциям в«Лицензирование и подписка» статья для этого.
В следующих разделах и статьях мы более подробно рассмотрим некоторые функции и возможности, предоставляемые Aspose.Cells.
Стабильность
Компоненты Aspose тщательно протестированы. Поскольку компоненты Aspose упакованы в один JAR-файл, для их работы никогда не потребуется устанавливать какие-либо дополнительные компоненты или компоненты. Это позволяет не только обеспечить стабильную работу с Aspose.Cells, но и свести риск возникновения непредвиденных ситуаций практически к нулю.
Масштабируемость и скорость
Компоненты Aspose обладают высокой масштабируемостью и молниеносной скоростью. Они являются настоящим решением .NET и безупречно работают как на одном сервере, на котором работает одно приложение, так и на веб-ферме с балансировкой нагрузки, на которой работает корпоративное приложение.
Функции
Компоненты Aspose предоставляют все необходимое для управления файлами Office, а также многое другое. Они разработаны с учетом философии, позволяющей разработчикам достигать наилучших результатов с наименьшим объемом работы.
Компоненты Aspose обеспечивают множество мощных функций, позволяющих сэкономить время. Например,Aspose.Cells предлагает функцию, которая позволяет разработчикам импортировать JSON в файлы Excel. Стоит отметить, что каждый компонент семейства Aspose обладает собственным набором уникальных и мощных функций.
Поддержка, расширение и участие
Поддерживать
С самых первых дней Aspose мы знали, что просто предоставлять нашим клиентам хорошие продукты будет недостаточно. Нам также нужно было обеспечить хорошее обслуживание. Мы сами являемся разработчиками и понимаем, как это неприятно, когда техническая проблема или особенность программного обеспечения мешают вам делать то, что вам нужно. Мы здесь, чтобы решать проблемы, а не создавать их.
Вот почему мы предлагаем бесплатную поддержку. Любой, кто использует наш продукт, независимо от того, купили ли они его или используют для ознакомления, заслуживает нашего полного внимания и уважения.
Вы можете регистрировать любые проблемы или предложения, связанные с Aspose.Cells Java для Apache POI SS — HSSF и XSSF, используя любую из следующих платформ:
Расширяйте и вносите свой вклад
Aspose.Cells Java для Apache POI (HSSF+XSSF) имеет открытый исходный код, и его исходный код доступен на основных веб-сайтах социального кодирования, перечисленных ниже. Разработчикам рекомендуется загружать исходный код и вносить свой вклад, предлагая или добавляя новые функции или улучшая существующие, чтобы другие также могли извлечь из этого пользу.
Исходный код
Вы можете получить последний исходный код из одного из следующих мест
Как настроить исходный код
Пожалуйста, следуйте этим простым шагам, чтобы открыть и расширить исходный код при использовании:
Затмение IDE
- Загрузите/клонируйте исходный код.
- Откройте Eclipse и выберитеФайл >Импорт…
- ВыбиратьОбщий >Существующие проекты в рабочую область.
- Перейти квыберите корневой каталогпоследнего исходного кода, который вы загрузили.
- НажмитеЗаканчиватьдля успешного импорта загруженного проекта.
IDE NetBeans
- Загрузите/клонируйте исходный код.
- Откройте NetBeans и выберитеФайл >Новый проект…
- ВВыберите проект вкладка: ВыбратьJava >Java Проект с существующими исходными кодами.
- ВИмя и местоположение вкладка: Укажите желаемоеназвание проекта иПапка проекта.
- ВСуществующие источники вкладка: НажмитеДобавить папку… и выберите корневой каталог последнего исходного кода, который вы загрузили.
- НажмитеЗаканчивать для успешного создания загруженного проекта.
Образцы кода
В этот раздел входят следующие темы
- Сравнение кода для общих функций в Aspose.Cells и Apache POI — HSSF и XSSF
- Работа с рабочими листами в Apache POI и Aspose.Cells
- Создать новый рабочий лист
- Добавить изображения в рабочий лист
- Преобразовать рабочий лист в CSV
- Копировать лист в рабочей книге
- Изменить порядок листов в книге
- Верхний и нижний колонтитулы
- Коэффициент масштабирования с использованием Apache POI и Aspose.Cells
- Добавить данные в Cells
- Создать новую книгу
- Параметры страницы — настройка «По размеру страницы»
- Установить область печати
- Автоподбор строки и столбца
- Cell Настройки выравнивания
- Скрыть и показать Cells
- Вставить Cell Комментарии
- Итерация строк и столбцов
- Объединить Cells
- Разделение панелей в Apache POI и Aspose.Cells
- Заморозить панели в Apache POI и Aspose.Cells
- Дата создания Cell в Apache POI и Aspose.Cells
- Создание разных типов Cell в Apache POI и Aspose.Cells
- Получение Cell Содержание
- Вставить гиперссылки на лист
- Новая линия в Cells
- Создание сводных таблиц с помощью Apache POI и Aspose.Cells
- Создание диаграмм с использованием Apache POI и Aspose.Cells
- Работа с границами в Apache POI и Aspose.Cells
- Работа с цветами в Apache POI и Aspose.Cells
- Работа со шрифтами в Apache POI и Aspose.Cells
- Функции обработки данных с использованием Aspose.Cells
- Найдите значение в Cells, используя Aspose.Cells
- Рассчитать промежуточные итоги, используя Aspose.Cells
- Импорт данных в рабочие листы с использованием Aspose.Cells
- Экспорт данных из рабочих листов
- Механизм вычисления формулы в Aspose.Cells
- Отслеживание прецедентов и иждивенцев с помощью Aspose.Cells
- Сортировка данных в электронных таблицах
- Добавьте водяной знак Word Art на рабочий лист, используя Aspose.Cells
- Преобразование рабочей книги в HTML с использованием Aspose.Cells
- Обнаружение слияния Cells с использованием Aspose.Cells
- Отображение и скрытие полос прокрутки книг
- Отображение и скрытие вкладок книги с помощью Aspose.Cells
- Зашифровать книгу с помощью Aspose.Cells
- Чтение файла CSV с несколькими кодировками
- Сохраните каждый рабочий лист в другой PDF, используя Aspose.Cells
- Установите цвет вкладки рабочего листа в Aspose.Cells
- Добавить водяной знак Word Art на диаграмму
- Изменить положение и размер диаграммы
- Преобразование диаграммы в изображения с помощью Aspose.Cells
- Создание сводных диаграмм с помощью Aspose.Cells
- Установить заголовки для печати
- Печать рабочих книг с использованием Aspose.Cells
- Преобразование электронной таблицы в PDF с использованием Aspose.Cells
Смотрите также
- [Подробнее об Apache POI] (https://poi.apache.org/)
Обзор библиотеки Apache POI — работа с приложениями пакета Microsoft Office в Java
Apache POI — мощная библиотека для работы с различными документами пакета Microsoft Office на Java. Она включает API для чтения и создания новых документов Word, Excel, Visio, и работы с другими форматами файлов MS Office.
Интересный факт. Название библиотеки Apache POI является аббревиатурой от «Poor Obfuscation Implementation», что дословно переводится «Плохо Реализованная Обфускация» — это название было шуткой, придуманной программистами с хорошим чувством юмора, но позже оно стало официальным.
Кто не знает, обфускация — это намеренное запутывание кода для усложнения анализа структуры программы и алгоритмов при декомпиляции приложения.
Чтобы работать с Apache POI, ее нужно включить проект вашей программы. Если Вы используете maven, то можете добавить следующий код в зависимости проекта (выбирайте стабильную версию):
- Работа с рабочими листами в Apache POI и Aspose.Cells