EPPlus / как получить данные из сводной таблицы? Или как легко манипулировать данными?
Я трачу очень много времени на манипулирование данными в отчетах. Использование сводной таблицы-хорошая идея, но как? Я попробовал некоторые свободные классы PivotTable, но им не хватало промежуточных итогов.
Тогда другой подход. Для
excel вывода отчетов я использую EPPlus. Он также поддерживает сводную таблицу. Проблема в том, что некоторые наши клиенты не имеют офиса (OpenOffice, MicrosoftOffice и т. д.), поэтому простое создание и сохранение файла xlsx не работает. Единственное, что я могу попробовать с EPPlus, это создать ExcelPackage, заполнение листа данными, а затем создание PivotTable с данными.У меня есть несколько вопросов;
1) из этого объекта PivotTable я могу получить доступ к выходным данным PivotTable полей и значений. (До сих пор я не мог).
2) относящийся к вышеуказанному вопросу... Содержит ли файл
xlsx данные о PivotTables или просто правила создания PivotTable (например, имя таблицы, sourceRange, поля строк, столбцы, поля данных, агрегированные параметры и т. д.). Я сделал небольшой тест на этот счет. Шаги как следующее: - открыл новый файл excel.
- вставил некоторые необработанные данные.
- создал сводную таблицу с данными.
- изменил некоторые значения данных. (без обновления сводной таблицы)
- сохранил и закрыл файл.
- снова открыл файл.
На самом деле мое предположение было "сводная таблица будет обновляться в соответствии с новыми данными", но я ошибся. Он не обновлялся. Это может быть доказательством того, что " файл xlsx содержит не только правила для сводной таблицы, но и все ценности в нем". Если это так, у меня есть надежда получить доступ к этим данным без сохранения файла (и мне не нужны никакие офисные программы).
3) Любой другой подход приветствуется.
Заранее спасибо
1 ответ:
Я ни в коем случае не эксперт по EPPlus, но работаю с ним в течение последних нескольких месяцев и, надеюсь, смогу пролить свет на ваши вопросы.
Если вы создаете новый xlsx в EEP, добавляете данные на рабочий лист, создаете сводную таблицу, указывающую на данные / рабочий лист, и сохраняете ее - то сводная таблица не содержит никаких данных. Он просто содержит определение того, как PT должен разрезать данные, когда файл открыт в excel (Как вы упомянули в одном из ваших вопросов).
Когда вы фактически открываете файл в excel и сохраняете его, excel копирует все данные, на которые опирается PT, и помещает их в кэш сводной таблицы. Вот почему вы можете удалить исходные ячейки, которые содержали данные, сохранить файл, а затем снова открыть его в excel (возможно, придется устранить некоторые ошибки), и по-прежнему видеть PT с данными. Вы даже можете дважды щелкнуть по одной из ячеек данных в PT, и excel восстановит некоторые или все (в зависимости от того, какую ячейку вы щелкните) из связанных данных в новый лист.
Да, ваше предположение было на самом деле неверным из-за этого кэша сводной таблицы. Вы должны сказать excel, чтобы обновить источник данных в соответствующей ленте (предполагая, что данные все еще там), чтобы увидеть новые данные появляются.
Таким образом, чтобы получить доступ к данным, Вы можете определить, где они находятся, перейдя в сводную таблицу.Объект листа и вытягивание данных из него. Вы можете увидеть, как я это сделал в методе расширения, который я создал здесь:Создание фильтров сводной таблицы с помощью EPPLUS
Другой вариант-извлечь фактический рабочий лист.xml-файл из xlsx. Файл xlsx (и любой другой MS Office .???x-файлы) - это просто переименованные ZIP-файлы. Таким образом, вы можете использовать стандартные методы .NET для извлечения xml-файлов из zip и использовать что-то вроде LinqToXml для извлечения данных. Итак, что-то вроде этого:
var zip = new ExcelPackage(file).Package; var recordspart = zip.GetPart(new Uri("/xl/worksheets/sheet1.xml", UriKind.Relative)); var recordsxml = XDocument.Load(recordspart.GetStream());Это не будет довольно делать все манипуляции XML, но если окончательный формат XLSX будет не работать это может быть вашим лучшим вариантом.
Comments