用Perl将Tab-delimited文本文件转换成Excel表格

Posted TabOmics

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Perl将Tab-delimited文本文件转换成Excel表格相关的知识,希望对你有一定的参考价值。

        当你在做数据处理的时候是否遇到过以下的情况:需要将tab-delimited文本文件转成Excel文件,通常你会怎么做呢?下载这个文件到本地PC,然后打开一个空的Excel表格,最后将下载的文件拖到Excel表格里。

      

        当你只有一个或者两个文件的时候,这也不是问题。不过当你有超过5个这样的文本文件时,加上有时我们会重新生成结果,这个时候你是否又得重复上面的步骤了呢? 这时你是不是头疼呢? 


图片来自网络:http://stylemagazines.com.au/lifestyle/is-your-job-giving-you-a-headache/

     这里我来告诉你一个简单的脚本,你就可以使用命令行在Terminal上就可以完成这项头疼的任务了。


#!/usr/bin/perl -w
use strict;
##################################################
#This script is to convert tab-delimited file to #
#Excel sheets.                                   #
##################################################
use Excel::Writer::XLSX;

my ($tab, $out) = @ARGV;
die usage() unless @ARGV == 2;
sub usage{
    my $die =<<DIE;
perl *.pl <Input file: tab-delemited file>  <output file in XLSX file>
DIE
}
my $workbook = Excel::Writer::XLSX->new($out);
my $worksheet = $workbook->add_worksheet();
my $row = 0;
open TAB, $tab or die "$!";
while(<TAB>){
    chomp;
    my @ele = split(/\t/);
    &write_xlsx($worksheet, $row, @ele);
    ++$row;
}

sub write_xlsx{
    my ($worksheet, $tem_row, @ele) = @_;
    for(my $i = 0; $i < @ele; ++$i){
        $worksheet->write( $tem_row, $i, $ele[$i]);
    }
}


    具体用法如下:

Usage:
perl tab2xlsx.pl <Tab-delimited text file> <Excel file[test.xlsx]>

    脚本链接中的第一个代码 tab2xlsx.pl:https://gist.github.com/xie186/8937c182105a7db6a0d19f162992950b


      到这里你可能会问,你的脚本只是将一个tab-delimited文本文件进行转化,如果我有多个文本文件需要放在一个Excel的不同表单(Sheet)中怎么办呢?

     

     其实你如果读懂了上面的代码,稍作修改,就可以完成任务了。具体代码这里我也分享给大家了,见上面链接的第二个代码:tab2xlsx_mul.pl

  

 具体用法如下:

Usage:
perl tab2xlsx.pl <tab-delemited file [file1,file2...]> <SheetName[Sheet1,Sheet2...]> 
<output file in XLSX file>


      这篇文章有两个目的:1) 分享这么一个简单的脚本给大家使用;2)这个脚本可以作为Perl初学者使用Perl模板的一个例子,如果你能看懂这两个脚本,那么以后你也可以在这两个脚本的基础上去拓展。


     你如果有什么建议,欢迎在下面留言。


以上是关于用Perl将Tab-delimited文本文件转换成Excel表格的主要内容,如果未能解决你的问题,请参考以下文章

将选项卡式文本转换为 Perl 数据格式

一个文本处理的perl脚本

解决invalid record found in VCF4 file (at least 8 tab-delimited fields expected)问题

Perl - 如何从文本文件中省略行?

Perl 将本地时间转换为 unix(纪元)时间

在 Matlab 中实时显示 Perl 脚本的输出