当前位置: 首页 > 知识库问答 >
问题:

使用POI 3.11 beta1无法从数据透视表读取数据

嵇昱
2023-03-14

我目前正在开发一个Java应用程序,该应用程序使用excel文件(.xlsx)在其中创建一个数据透视表。

// get the content of Cell "I7", should be "10"
    FileInputStream fileInputStream = new FileInputStream("ooxml-pivottable.xlsx");
    XSSFWorkbook xssfWorkbook = (XSSFWorkbook) WorkbookFactory.create(fileInputStream);
    xssfWorkbook.setForceFormulaRecalculation(true);
    Sheet sheet1 = xssfWorkbook.getSheetAt(0);
    // Cell I7
    Row row = sheet1.getRow(6);
    if (row == null) {
        System.out.println("Not expected: row is null");
        return;
    }
    Cell cellI7 = row.getCell(8);
    if (cellI7 != null && cellI7.getCellType() == Cell.CELL_TYPE_NUMERIC) {
        System.out.println("The content of Cell I7 = "+cellI7.getNumericCellValue());
    } else {
        System.out.println("Not expected: cell is null");
        return;
    }       

控制台显示:“Not Expected:row is Null”。似乎是说“创建的数据透视表不存在”。我不明白为什么会这样。那么,是否还有其他方法可以使用POI API从创建的数据透视表中获取/读取/更改数据呢?

先进的谢谢!

共有1个答案

赵晟睿
2023-03-14

到目前为止,Java POI还不支持从数据透视表中读取数据,也不支持打开数据透视表。您可以使用VB.NET创建.exe文件,它在单独的工作表中打开数据透视表。

代码:

Module Module1

    Sub Main()
        Dim wb1 As Excel.Workbook
        Dim oExcelFile As Object
        Dim grandT As String
        Try
            oExcelFile = GetObject(, "Excel.Application")
        Catch
            oExcelFile = CreateObject("Excel.Application")
        End Try

        Dim mydir As DirectoryInfo = New DirectoryInfo("C:\ReconciliareFiles\ReconPlusFiles\PivotTable_temp")
        Dim f As FileInfo() = mydir.GetFiles()
        Dim file As FileInfo = Nothing
        For Each file In f
            Console.WriteLine("File Name: {0} Size: {1}  ", file.FullName, file.Length)
            Exit For
        Next file

        grandT = "Grand Total"
        Console.WriteLine("Grand Total is written as:{0}  ", grandT)
        wb1 = oExcelFile.Workbooks.Open(file.FullName)
        Dim sheet As Excel.Worksheet = wb1.Worksheets(1)
        For i As Integer = 1 To 100
            Console.WriteLine("cell are:{0}  ", sheet.Cells(i, 2).Value)
            If sheet.Cells(i, 2).Value = grandT Then
                Console.WriteLine("cell 13 2 is  :{0}", wb1.Worksheets(1).Cells(13, 2).Value)
                oExcelFile.Range(sheet.Cells(i, 3), sheet.Cells(i, 3)).ShowDetail = True
                oExcelFile.DisplayAlerts = False
                Exit For
            End If
        Next
        oExcelFile.ActiveWorkbook.Save()
        oExcelFile.ActiveWorkbook.close()
        oExcelFile.Workbooks.Close()
        ReleaseComObject(sheet)
        ReleaseComObject(wb1)


    End Sub

    Private Sub ReleaseComObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        End Try
    End Sub

End Module
 类似资料:
  • B.1 创建数据透视表 尽管数据透视表的功能非常强大,但是创建的过程却是非常简单。 将光标点在表格数据源中任意有内容的单元格,或者将整个数据区域选中。 “插入”选项卡,单击“数据透视表”命令。 3. 在弹出的“创建数据透视表”对话框中,“请选择要分析的数据”一项已经自动选中了光标所处位置的整个连续数据区域,也可以在此对话框中重新选择想要分析的数据区域(还可以使用外部数据源,请参阅后面内容)。“选择

  • A 数据透视表介绍 B.1 什么是数据透视表? 数据透视表是一种可以快速汇总、分析大量数据表格的交互式工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。使用数据透视表可以深入分析数值数据,以帮助用户发现关键数据,并做出有关企业中关键数据的决策。 数据透视表是针对以下用途特别设计的:以友好的方式,查看大量的数据

  • 数据透视表显示二维交集的度量值,并在表格视图中表示数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水

  • 数据透视表显示二维交集的度量值,并在表格视图中表示数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对齐方式。 数据 字体 设置字段名

  • 数据透视表显示二维交集的度量值,并在表格视图中表示数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水

  • 问题内容: 我有两个表三元组和标签 三元组表具有以下列 标签表具有以下列 我正在尝试编写sql创建带有动态标题的数据透视表 输出应该是这样的 编写SQL的任何帮助将不胜感激。我在网上看到了示例,但无法弄清楚这一示例 问题答案: 为了 转动 在MySQL中的数据,您需要同时使用聚合函数和表达。 如果您知道已知的列数,则可以对查询进行硬编码: 参见带有演示的SQL Fiddle 但是,如果您的列数未知