TOP

LibreOffice Calc 中的表重组 (Unpivo)

描述

有时需要将交叉(透视)表转换为平面表。此过程称为“数据校正”(unpivo data)。作为这种“拉直”的结果,我们得到了一个表,其中所有相似的数据都在一列中。

程序 LibreOffice Calc 没有将数据透视表转换为“平面”的标准功能,但您可以自己编写相应的过程。让我们考虑一下如何去做。



我们看下图可以更清楚地理解问题的本质。左边有一个矩阵形式的表(数据透视表),右边有一个包含列的常规表(平面表):

展开表时,您将解压作为矩阵表中列的交点的属性-值对,并将它们重新定向到平面表中的展平列中:

  • Values(Values)(左边蓝色)扩展到新列(右边蓝色);
  • 属性 (Attributes)(左侧绿色)也扩展为新列(右侧绿色)并根据新值列进行复制。
  • UnPivotTable 过程的 BASIC 代码

    打开菜单 Tools - Macros - Edit Macros...,选择 Module1 并将以下文本复制到模块中:

    Sub UnPivotTable
      'moonexcel.com.ua
      Dim oBook        As Object
      Dim oActiveSheet As Object
      Dim oSelRange    As Object
      Dim oNewSheet    As Object
      
      Dim i                  As Long
      Dim iTopLabelRowCount  As Integer
      Dim iSideLabelColCount As Integer       
      
      oBook        = ThisComponent
      oActiveSheet = oBook.CurrentController.ActiveSheet
      oSelRange    = oBook.CurrentSelection
      
      '添加新工作表
      oBook.Sheets.insertNewByName("UnPivoted Table",0)
      oNewSheet = oBook.Sheets(0)
      
      '确定标题的大小
      iTopLabelRowCount  = InputBox("顶部标题有多少行?")
      iSideLabelColCount = InputBox("侧标题中有多少列?")
                
      i = 0
         
      For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
        For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count            
                           
          For j = 1 To iSideLabelColCount              
            oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula               
          Next j
                 
          For k = 1 To iTopLabelRowCount
            oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
          Next k           
                             
          oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
          i = i + 1                   
                
        Next c
      Next r
    End Sub
    

    然后,关闭 Macro Editor 并返回到 LibreOffice Calc 中的工作表。选择带有顶部和左侧标题的整个表格,然后通过菜单 Tools - Macros - Run Macro 运行我们的新宏...

    该宏会将名为“UnPivoted Table”的新工作表插入到您的工作簿中,然后添加新格式的表格。使用这样的表格,您可以在 LibreOffice Calc 中进行任何分析。

    有关该主题的文章:

  • 在 Excel 中重新排列表格 (Unpivo)