Создание диаграммы Excel с использованием Apache POI
Мне нужно создать листок excel из моего Java-кода, который содержит диаграммы, такие как гистограмма, линейная диаграмма и т.д., используя библиотеку POI Apache.
Является ли это возможным?
Я не могу найти полезный пример кода для него.
Есть ли другая альтернатива для этого помимо библиотеки POI для Java?
Ответы
Ответ 1
Вы можете использовать только шаблон Excel для сохранения диаграммы с помощью POI.
Это означает, что вы создаете файл шаблона Excel с диаграммой в нем и связываете источник данных диаграммы с одним определеннымName, затем вы можете загрузить файл шаблона из POI и использовать код для изменения определенногоName.
Текущая POI не поддерживает создание диаграммы с нуля.
Ответ 2
В poi-3.8 поддержка диаграмм, похоже, приближается.
См. это обсуждение.
И, в частности, пример.
Ответ 3
Есть ли другая альтернатива для этого помимо библиотеки POI для Java?
Есть еще несколько библиотек, но я не уверен, может ли написать такую вещь, как диаграмму.
Если вы можете использовать более новые версии Office (те, которые используют файлы формата на основе XML), чем вы могли бы использовать другой подход:
- создайте файл Excel с более новой версией Office, содержащий нужные вам диаграммы, и некоторые фиктивные данные.
- разархивируйте этот файл excel и извлеките XML файлы изнутри. Наибольший интерес представляют файлы xl\worksheets\sheet1.xml xl\worksheets\sheet2.xml или xl\worksheets\sheet3.xml(в зависимости от того, какие листы использовались)
- Взгляните на формат файла (это сложнее, чем использование POI), но не так сложно идентифицировать данные "dummy", которые вы ввели ранее.
- Используйте Velocity или FreeMarker для преобразования этого XML файла в шаблон (путем замены ваших фиктивных данных на переменные и макросы, что даст тот же результат)
- Напишите небольшую программу (всего несколько строк), которая берет ваши реальные данные, сливается с шаблоном и упаковывает все обратно в zip, но добавляет расширение *.xlsx.
Я знаю, что приведенные выше шаги выглядят немного сложнее, но если у вас нет слишком сложных файлов Excel, это должно быть проще, чем выглядит.
Ответ 4
Поток выглядит старым, и я не знаю, вы уже поняли способ или все еще ищете его.
Но вот что я буду делать. Существует бесплатная библиотека под названием JFreeChart. Вы можете использовать это для создания файла JPG или PNG, который затем можно вставить в файл excel при его создании с помощью Apache POI.
Но недостатком этого метода является то, что данные на графике не будут динамически изменяться при изменении данных в электронной таблице, как в случае с Excel. Теперь это то, с чем я не могу жить.
Итак, теперь я собираюсь сделать некоторые исследования. Я почти уверен, что, поскольку задан вопрос, должно быть добавление функции в Apache POI или другой элегантный способ делать что-то. Если я найду какой-нибудь, я обязательно отправлю свои результаты здесь.
---- UPDATE ----
В моих исследованиях, длившихся около часа, я мог найти только одну подходящую библиотеку под названием SmartXLS (пожалуйста, google, я не мог опубликовать ссылку, потому что я новичок и механизм предотвращения спама)/strong > , который удаленно близок к тому, что я буду использовать. Вы можете генерировать как excel, так и диаграмму с помощью программы. Веб-сайт очень прост, и я не мог найти никакой информации о лицензировании, поэтому я предполагаю, что он бесплатный для личного и коммерческого использования. Мне удалось скачать библиотеку без проблем. Я еще не использовал его. Сделайте снимок и сообщите нам, как это работает.
Ответ 5
Это будет чрезвычайно сложно сделать с нуля, так как вам нужно будет выяснить, что нужно делать в файле Excel для создания диаграмм. Я бы пошел другим путем.
Создайте файл Excel, содержащий макрос, который создает диаграмму и т.д. для некоторых данных (используя Excel обычным способом). Затем используйте Apache POI для создания файла с данными, которые вы хотите, и запустите Excel с Java, выполнив макрос, который создает диаграммы.
Ответ 6
Вот рабочий пример.
-
У меня есть данные в файле JSON и .xlsm с макросом. - нет необходимости в описании диаграмм, данных или диапазонов в excel
-
Клонирование листа шаблона каждый раз, когда ему нужно создать лист с диаграммой, помещает требуемый тип диаграммы в z1 и изменяет линейную диаграмму по умолчанию, которая была вставлена в соответствующий тип диаграммы. Удаляет тип диаграммы из z1, чтобы избежать многократного выполнения.
Надеюсь, это поможет.