Как получить информацию о диаграмме из электронной таблицы Excel, используя Apache POI? - PullRequest
4 голосов
/ 08 апреля 2011

Можно ли извлечь информацию о диаграмме из электронной таблицы Office 2007 (xlsx / OpenXML) с помощью Apache POI?Мне удалось прочитать в электронной таблице и даже получить часть, которая относится к диаграмме, но я не уверен, как мне получить какую-либо информацию из этой части, например, тип диаграммы, данные диаграммы и т. Д.

XSSFWorkbook xwb = new XSSFWorkbook("charts_lines.xlsx");

XSSFSheet sheet = xwb.getSheetAt(0);

IМожно также выполнить итерацию по частям пакета, чтобы получить часть диаграммы, но я не понимаю, как затем продолжить получать какую-либо информацию о диаграмме?

Примечание. Меня не интересует создание диаграмм с использованием POI.просто прочитайте как можно больше информации о графике ... Я также не сохраняю xlsx.Я просто хочу извлечь цвета линий, метки, данные, тип диаграммы (круговая диаграмма, линия, столбец и т. Д.)

Ответы [ 3 ]

6 голосов
/ 08 апреля 2011

В данный момент нет высокоуровневого представления, поэтому вам нужно перейти на уровень xmlbeans и работать с низкоуровневыми объектами CT *.

Для таблиц диаграмм есть XSSFChartSheet , который даст вам объект CTChartsheet, который содержит немного информации.

Для XSSFChart и XSSFChartSheet (обычные листы и листы диаграмм) вам нужно будет просмотреть чертежи, чтобы получить диаграммы.На каждом листе с диаграммами должен быть один чертеж, а диаграммы связаны с чертежом, а не с самим листом.

Начиная с r1090442 (так что POI 3.8 или новее), существует метод XSSFDrawing, чтобы датьвы все объекты XSSFChart (которые являются обертками вокруг /charts/chart#.xml части).Если вы используете действительно очень старую версию POI, используйте CTDrawing для получения подробной информации о диаграмме, возьмите соответствующую часть /charts/chart#.xml, а затем попросите xmlbeans предоставить вам объекты CT.В любом случае это позволит вам получить заголовки, типы, диапазоны данных и т. Д.

Хотя это немного сложно, поэтому, пожалуйста, рассмотрите возможность отправки патча в POI, если у вас есть что-то хорошее для работы собъекты CTChart!

4 голосов
/ 04 марта 2013

Вы можете прочитать данные диаграммы в формате XML, используя XSSFDrawing

, например

 XSSFDrawing drawing = ((XSSFSheet)sheet).createDrawingPatriarch();
        System.out.println(drawing.getCTDrawing().toString());

, распечатайте всю диаграмму как XMl, а также используя

drawing.getCharts();

Вы можете добавить к нему Iterator для просмотра диаграммы

2 голосов
/ 08 апреля 2011

Я не знаю точного ответа на ваш вопрос, но OpenXML SDK 2.0 поставляется с инструментом DocumentReflector.exe, который покажет вам, как именно определена диаграмма (включая все отношения между пакетами SpreadsheetML и DrawingML). Подробнее об этом инструменте можно прочитать в этой статье .

...