Ниже приведен код, который я использую, где я пытаюсь манипулировать SharedItems CacheField, соответствующим полю «Пол»:
Код: Выделить всё
[HttpPost("update-filter")]
public async Task UpdatePivotFilter()
{
if (!System.IO.File.Exists(_filePath))
return NotFound($"File not found: {_filePath}");
try
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(_filePath, true))
{
WorkbookPart workbookPart = document.WorkbookPart;
Sheet sheet = workbookPart.Workbook.Descendants().FirstOrDefault(s => s.Name == "PivotTableSheet");
if (sheet == null)
return BadRequest("Sheet not found.");
WorksheetPart worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);
PivotTablePart pivotTablePart = worksheetPart.PivotTableParts.FirstOrDefault();
if (pivotTablePart == null)
return BadRequest("No PivotTable found in the sheet.");
PivotTableCacheDefinitionPart pivotCacheDefinitionPart = pivotTablePart.PivotTableCacheDefinitionPart;
var cacheFields = pivotCacheDefinitionPart.PivotCacheDefinition.CacheFields.Elements();
CacheField genderField = cacheFields.FirstOrDefault(f => f.Name == "Gender");
if (genderField == null)
return BadRequest("Field 'Gender' not found in the PivotTable.");
var sharedItems = genderField.SharedItems;
// Attempt to filter out "M" and keep "F"
for (int i = 0; i < sharedItems.Count; i++)
{
var item = sharedItems.ElementAt(i);
if (item.InnerText == "F")
{
//item.Val
}
else if (item.OuterXml.Contains("M"))
{
// Hide 'M'
item.Remove();
sharedItems.Count--;
i--;
}
}
pivotCacheDefinitionPart.PivotCacheDefinition.Save();
}
return Ok("PivotTable filter updated.");
}
catch (Exception ex)
{
return StatusCode(500, $"Error updating the filter: {ex.Message}");
}
}
Когда я удаляю элемент, соответствующий «M», из SharedItems, вся сводная таблица исчезает и остается только статические значения (числа). вместо исходной структуры сводной таблицы. Это происходит после удаления первого элемента из SharedItems.
Я использую Remove(), потому что не могу найти альтернативного метода или атрибута, похожего на «Скрыть», который позволил бы мне скрыть Значения «M», не удаляя их полностью. Я могу получить доступ к фильтрам и проверить значения полей, но в тот момент, когда я пытаюсь удалить или изменить любой элемент из SharedItems, структура сводной таблицы нарушается.
Любая помощь или предложения будут очень полезны. оценил.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -the-pivot