4

我正在通过 Perl 脚本收集一些数据。数据需要由其他人使用 Excel 进行审查和处理。目前,我将数据作为制表符分隔的文本文件写入,Excel 可以很好地打开它。

但是,数据存在层次结构,审阅者更容易看到树而不是平面列表。也就是说,不是在列中显示数据,

foo    foo1
foo    foo2
foo    foo3
bar    bar1
bar    bar2
...

将其呈现为点击展开树:

foo
    foo1
    foo2
    foo3
bar
    bar1
    bar2
...

Excel 的分组功能(于 2007 年在“数据 > 大纲 > 分组”下找到)非常适合此演示文稿,它比数据透视表更易于操作。

我们从这个扁平的列列表到这个分组列表的最简单方法是什么?理想情况下,我可以以文本形式写出数据,Excel 会在导入时自动应用分组。或者,如果审阅者可以在导入数据后应用少量步骤,例如应用宏或模板,那也可以。

4

4 回答 4

3

由于您已经在使用 perl,我建议您使用优秀的 CPAN 模块Spreadsheet::WriteExcel直接在 perl 中创建 excel 文件,该模块支持Excel 大纲

像这样工作:

     .
     .
     $worksheet->write('A2',  'foo');
     $worksheet->write('B3',  'foo1');
     $worksheet->write('B4',  'foo2');
     $worksheet->write('B5',  'foo3');
     $worksheet->set_row(2,  undef, undef, 0, 1, 1);
     $worksheet->set_row(3,  undef, undef, 0, 2);
     $worksheet->set_row(4,  undef, undef, 0, 2);
     $worksheet->set_row(5,  undef, undef, 0, 2);
     .
     .
于 2009-06-24T15:28:09.897 回答
1
  1. 选择要过滤的列表中的所有行,包括列标题。

    ShowTip 单击区域左上角的单元格,然后拖动到右下角的单元格。

  2. 在数据菜单上,指向筛选器,然后单击高级筛选器。
  3. 在“高级过滤器”对话框中,单击“过滤列表”。
  4. 选中唯一记录复选框,然后单击确定。

    显示过滤的列表并隐藏重复的行。

  5. 在“编辑”菜单上,单击“Office 剪贴板”。

    将显示剪贴板任务窗格。

  6. 确保筛选后的列表仍处于选中状态,然后单击 Copy Copy 按钮。

    过滤后的列表以边界轮廓突出显示,所选内容显示为剪贴板顶部的一个项目。

  7. 在数据菜单上,指向筛选器,然后单击全部显示。

    重新显示原始列表。

  8. 按删除键。

    原始列表被删除。

  9. 在剪贴板中,单击过滤后的列表项。

    过滤后的列表显示在与原始列表相同的位置。

于 2009-06-24T14:43:35.167 回答
1

最新版本的 Excel(我们在这里使用的是 2003)可以使用 XML 格式 xlsx。xlsx 文件是 XML 文件的 zip。如果您想创建一个将在 Excel 中以您想要的设置打开的文件,请尝试以下操作:首先使用您想要的分组创建一个模板文件。将其保存为 xlsx。使用标准 zip 软件解压缩文件。看看里面有什么。我没有专门处理分组,但是电子表格中的所有命令都将以 xml 格式存在,您需要弄清楚分组的设置位置。然后是对 xml 进行适当更改并重新压缩的问题。有点努力,但您可以使用此方法以编程方式创建预先分组的文件。我不知道可能有专门针对此的 Perl 库。

于 2009-06-24T15:14:31.033 回答
0

CSV 文件也很容易生成。OpenOffice 允许您选择如何解析事物,但 excel 不包括逗号分隔的列(没有任何类型的引号)和 CRLF 分隔的行。

A1,A2,A3
B1,B2,B3

等等

于 2009-06-24T15:19:29.027 回答