Я пытаюсь объединить несколько книг Excel, в которые не включен источник данных.По независящим от меня причинам у меня нет средств для доступа к данным вождения.
Каждая рабочая книга всегда содержит ровно одну сводную таблицу, и они надежно разделяют определенные поля.В идеале пользователь может выбрать группу полей и список рабочих книг и получить одну рабочую книгу со всеми объединенными данными.Это не потеряно для меня, это не правильный способ сделать что-то, но это рука, с которой я столкнулся.
Проблема;
Когда я обращаюсь к любому члену свойства PivotCacheRecordsPivotTableCacheRecordsPart, он мгновенно перечисляет весь список в память.Из-за того, что некоторые листы имеют десятки тысяч строк и более 50 столбцов, это быстро занимает всю доступную память.Вот пример фрагмента.
var pivotDefs = spredDoc.WorkbookPart.PivotTableCacheDefinitionParts.First();
...
int i = 0;
var records = pivotDefs.PivotTableCacheRecordsPart.PivotCacheRecords;
foreach(var record in records)
{
var fields = record.ToList();
lastUsedRow++;
for (int j = 0; j < fieldCount; j++)
{
if (reportToDefColumnLookup.ContainsKey(j) && !(fields[j] is MissingItem))
{
var readValue = fields[j].GetAttribute("v", "").Value;
writer.Write(readValue + "\t");
}
else
{
writer.Write("\t");
}
}
writer.WriteLine();
i++;
if (i % 2000 == 0)
{
System.Diagnostics.Trace.WriteLine(string.Format("[Pivot Handler] {0} records read", i.ToString()));
}
}
Момент «записи» адресован (в этом случае, когда логика foreach вызывает свой перечислитель - но вы можете повторить поведение, вызвав любое свойство / функцию члена)весь список загружается в память.Идеальное решение - прочитать каждую запись и выгрузить ее после прочтения.Я попытался удалить элемент из списка, но, похоже, он не дал никакого эффекта.
У меня очень смутное представление о том, как объединить два определения сводных данных без воспроизведения табличных данных, но я понятия не имею, как это сделать.
У меня нет бюджета для этого.Любые предложения библиотеки должны быть бесплатными.Я исследовал EPPlus, но у него нет очень хорошей поддержки сводной таблицы.
Может ли кто-нибудь пролить свет на это или указать мне возможное направление?Документация по открытому XML, как известно, трудна для поиска и в лучшем случае имеет загадочный характер.
Заранее спасибо.