Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何创建文本文件,以便在Excel中打开时将行分组在一起?_Perl_Excel_Import_Grouping_Hierarchy - Fatal编程技术网

Perl 如何创建文本文件,以便在Excel中打开时将行分组在一起?

Perl 如何创建文本文件,以便在Excel中打开时将行分组在一起?,perl,excel,import,grouping,hierarchy,Perl,Excel,Import,Grouping,Hierarchy,我正在通过Perl脚本收集一些数据。数据需要由其他人使用Excel进行审查和处理。目前,我正在将数据写入以制表符分隔的文本文件,Excel可以很好地打开它 然而,数据有一个层次结构,审查者更容易看到一个树而不是一个简单的列表。也就是说,不是以列的形式显示数据 foo foo1 foo foo2 foo foo3 bar bar1 bar bar2 ... 将其显示为单击展开树: foo foo1 foo2 foo3 bar bar1

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

然而,数据有一个层次结构,审查者更容易看到一个树而不是一个简单的列表。也就是说,不是以列的形式显示数据

foo    foo1
foo    foo2
foo    foo3
bar    bar1
bar    bar2
...
将其显示为单击展开树:

foo
    foo1
    foo2
    foo3
bar
    bar1
    bar2
...
Excel的组函数(2007年在“数据>大纲>组”下找到)非常适合此演示文稿,比透视表更易于操作

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

  • 选择要筛选的列表中的所有行,包括列标题

    展示提示 单击区域的左上角单元格,然后拖动到右下角单元格

  • 在“数据”菜单上,指向“过滤器”,然后单击“高级过滤器”
  • 在“高级筛选”对话框中,单击“就地筛选列表”
  • 选中“仅唯一记录”复选框,然后单击“确定”

    将显示筛选后的列表,并隐藏重复的行

  • 在“编辑”菜单上,单击“Office剪贴板”

    将显示“剪贴板”任务窗格

  • 确保已筛选列表仍处于选中状态,然后单击“复制”按钮

    过滤后的列表将以边界轮廓亮显,所选内容将作为项目显示在剪贴板的顶部

  • 在“数据”菜单上,指向“过滤器”,然后单击“全部显示”

    原始列表将重新显示

  • 按删除键

    原始列表将被删除

  • 在剪贴板中,单击筛选的列表项

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


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

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

    A1,A2,A3
    B1,B2,B3
    

    等等。

    既然您已经在使用perl,我建议您直接使用perl创建excel文件,使用优秀的CPAN模块,该模块支持

    工作原理如下:

         .
         .
         $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);
         .
         .
    

    这对我创建树有什么帮助?我不想删除重复的行。这方面的文档有点单薄,但示例很好,很容易理解。这里的文档很好:现在我只需要看看是否可以安装这个模块。我在解压缩的文件中翻了翻。破译存储格式并对其进行黑客攻击的任务相当艰巨。