gpt4 book ai didi

c# - OpenXml 数据透视表 : how do you read the total and subtotals in order to display them?

转载 作者:行者123 更新时间:2023-12-04 01:25:14 31 4
gpt4 key购买 nike

我正在尝试使用 OpenXml 完全从头开始创建 Excel 数据透视表。

我已经成功地创建了数据透视表本身(创建了数据透视表定义、缓存定义、所有缓存记录、数据透视字段、行项目等)。

但是如何显示任何数据?如何读取数据透视表计算以便将这些值写入单元格?

例如:

Example Pivot Table definition and Pivot Table data

  • “总计”为 86,631.62 美元。
  • 两个小计分别是 $61,631,12 和 $25,000.50

  • 当我查看 xl\worksheets\sheet2.xml 中的 XML 时,这些值都“硬编码”到单元格中。

    如果我自己创建单元格(使用 OpenXml),那么我如何“查询”这些值,让数据透视表为我计算它们?

    PS:
    我一直在广泛使用 OpenXml 生产力工具……但它也只是“硬编码”总计和小计……而没有提供任何线索如何/在何处实际计算值。

    最佳答案

    如果您不想使用 EPPlus,可以使用单元格公式:

    cell.DataType = new EnumValue<CellValue.Number);
    cell.CellFormula = new CellFormula($"=SUBTOTAL{"109"}{rowName}");

    //force full recalculation of the cells
    workbookPart.workbook.CalculationProperties.ForceFullCalculation = true;
    workbookPart.workbook.CalculationProperties.FullCalculationLoad = true;

    这样,您可以通过 OpenXml 使用每个公式来计算您需要的任何内容。

    为了加载到 DataTable:
    DataTable dt = new DataTable();

    using (SpreadsheetDocument spreadSheetDocument = SpreadsheetDocument.Open(@"..\..\example.xlsx", false))
    {

    WorkbookPart workbookPart = spreadSheetDocument.WorkbookPart;
    IEnumerable<Sheet> sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>();
    string relationshipId = sheets.First().Id.Value;
    WorksheetPart worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId);
    Worksheet workSheet = worksheetPart.Worksheet;
    SheetData sheetData = workSheet.GetFirstChild<SheetData>();
    IEnumerable<Row> rows = sheetData.Descendants<Row>();

    foreach (Cell cell in rows.ElementAt(0))
    {
    dt.Columns.Add(GetCellValue(spreadSheetDocument, cell));
    }

    foreach (Row row in rows) //this will also include your header row...
    {
    DataRow tempRow = dt.NewRow();

    for (int i = 0; i < row.Descendants<Cell>().Count(); i++)
    {
    tempRow[i] = GetCellValue(spreadSheetDocument, row.Descendants<Cell>().ElementAt(i-1));
    }

    dt.Rows.Add(tempRow);
    }

    }

    关于c# - OpenXml 数据透视表 : how do you read the total and subtotals in order to display them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62051558/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com