perl模块Excel::Writer::XLSX进行txt2xlsx转换

#!usr/bin/env perl
use strict;
use warnings;
use File::Spec;
use Getopt::Long;
use Excel::Writer::XLSX;

#检测 -> 脚本输入
my ($input_txt, $output_path, $if_help);

GetOptions(
"input_txt|i=s" => \$input_txt,
"output_path|o=s" => \$output_path,
"help|h" => \$if_help,
);

die help() if (defined $if_help or (not defined $input_txt));

################################主程序###########################

########
#创建excel文件与sheet表
########
my $workbook = Excel::Writer::XLSX->new( ‘DFI_15_30.VS.DFI_15_ABN.xlsx‘);
my $worksheet = $workbook->add_worksheet(‘DFI_15_30.VS.DFI_15_ABN‘);

########
#开始处理文本
########

my %format = format_excel($workbook); #获取Excel格式内容
open FILE, $input_txt or die "The input_txt file doesn‘t exist!\n";

########
#处理标题行格式
########
my $head = <FILE>;
$head =~ s/[\r\n]//g;
my @head = split /\t/, $head;
$worksheet->set_row(0, 60); #标题行设置:行宽60
foreach (0..$#head) {
    $worksheet -> write (0, $_, $head[$_], $format{‘title‘}); #格式化第一行内容
}

########
#处理数据行内容
########

my @special = (‘P-value(Ttest)‘, ‘P-value(Utest)‘, ‘P-value(Logistic)‘);#需要筛选的p_value存在一个数组里
my $row = 1;
while (<FILE>) {
$_ =~ s/[\r\n]//g;
my @data = split /\t/;
    foreach my $col (0..$#data) {
        my $type = "normal";
        foreach (@special) {
            $type = "special" if ($head[$col] eq $_ and $data[$col] =~ /\d/ and $data[$col] < 0.05);
        }
            #$type = "special" if ($head[$col] ~~ @special and $data[$col] =~ /\d/ and $data[$col] < 0.05);
        $worksheet -> write($row, $col, $data[$col], $format{$type}); #格式化数据行内容
     }
    $row ++;
}

close FILE;

################################子函数###########################

sub format_excel {
my ($workbook) = @_;
my %format = ();
#第一行(标题行设置:背景色黄色、上下左右居中)
$format{"title"} = $workbook->add_format();
$format{"title"}->set_bg_color(‘yellow‘);
$format{"title"}->set_align(‘center‘);
$format{"title"}->set_align(‘vcenter‘);
$format{‘title‘}->set_border();
#其它行(上下左右居中)
$format{"normal"} = $workbook->add_format();
$format{"normal"}->set_align(‘center‘);
$format{"normal"}->set_align(‘vcenter‘);
$format{"normal"}->set_border();
#特殊列处理(P-value(Ttest)、P-value(Utest)、P-value(Logistic)这三列P值<0.05的表格背景色设为橘黄色#fac090)
$format{"special"} = $workbook->add_format();
$format{"special"} ->set_align(‘center‘);
$format{"special"} ->set_align(‘vcenter‘);
$format{"special"} ->set_bg_color("#fac090");
$format{"special"}->set_border();

return %format;
}

sub help{
my $info = "
Program: txt转换为excel
Version: 2019-11
Contact: *

Usage: perl ".(File::Spec->splitpath(File::Spec->rel2abs($0)))[2]." [options]

Options:
--txt/-i txt文件
--output_path/-o 输出路径
--help/-h 查看帮助文档
\n";
return $info;
}

原文地址:https://www.cnblogs.com/dongxj1994/p/12016293.html

时间: 2024-08-09 07:52:13

perl模块Excel::Writer::XLSX进行txt2xlsx转换的相关文章

用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)

前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过python读取.正则表达式处理并写入Excel文档将大大减少人工处理的工作量. 1. 从gerrit获取原始信息,存入文本文档: $ssh –p 29418 <your-account>@192.168.1.16 gerrit query status:merged since:<date

示例学习kettle之Excel Writer步骤

示例学习kettle之ExcelWriter步骤 ExcelWriter步骤可以向excel模板文件中填写内容的一种方法,并且可以往同一文件的不同sheet中写内容.本文通过示例详细讲解,通过一个转换生成报表. ExcelWriter步骤是kettle4.1以上版本才有,同时我们也使用"Block until steps finish"步骤(kettle4.1版本有),如果你使用版本是3.2或4.0,就使用自定义javasc步骤代替.本文的示例代码在这里下载. 最终导出报表文件格式 示

利用perl模块发邮件

vim sendmail.pl #!/usr/bin/perl -w use MIME::Lite; sub perl_sendmail {         my $mail_to=shift;         #my $mail_to="$_[0]";         my $from=shift;         #my $from = "$_[1]";         my $subject=shift;         #my $subject = &quo

如何查找linux系统安装了多少perl模块

join函数 利用字符将数组中的元素分割开. [[email protected] ~]# find `perl -e '@array=join( " ", "@INC");print "@array";'` -name *.pm|wc -l 547 这个例子是利用空格分开了要查找的路径,然后find可以查找所有的路径下匹配*.pm的文件,我一共查到了547个模块. 如何查找linux系统安装了多少perl模块,布布扣,bubuko.com

华为上机测试题(Excel表格纵列字母数字转换-java)

PS:这是我刚做的一道题,题目不难,满分60,得分40,大家看看哪里有问题,欢迎提意见,感谢! /* * 题目:Excel表格纵列字母数字转换 * 描述: 在Excel中列的编号为A-Z,AA-AZ,BA-BZ.....CZB.....,请实现一个函数要求满足以下功能,将编号进行修改, * 如A-Z为1-26,然后翻转为两位,AA为27,AB为28.....ZZ为702,然后翻转为3位,AAA=703,AAB=704... 输入的字符串最长只有4. 题目类别: 字符串 难度: 初级 分数: 60

perl模块发邮件

vim sendmail.pl #!/usr/bin/perl -w use MIME::Lite; sub perl_sendmail { my $mail_to="$_[0]";    收件人邮箱 my $from = "$_[1]";     发件人邮箱 my $subject = "$_[2]";   邮件标题 my $data = "$_[3]";      邮件内容 $sendmail = MIME::Lite-&

perl读取excel

因为工作当中遇到要处理大数据的excel的玩意,最多的有几十万行.用perl的方式试试,看看效果如何. ppm install OLE::Storage_Lite #如果不安装这个,后面两个安装不了 ppm install Spreadsheet::ParseExcel ppm install Spreadsheet::WriteExcel 查看是否安装成功 perldoc Spreadsheet::ParseExcel #如果打印出文档则表示安装成功 为保证编码正确 ppm install U

非[无]root权限 服务器 下安装perl以及perl模块--转载

转载自http://www.zilhua.com 在本博客中,所有的软件安装都在服务器上,且无root权限.理论上适合所有的用户. 我的安装目录 cd /home/zilhua/software 1.在官方网站下载新版本的源码包: http://www.perl.org/get.html,版本自己选择,我下载的是perl-5.18.0.tar.gz 2.解压 tar zxvf perl-5.18.0.tar.gz 3.进入解压目录 cd /home/zilhua/software/perl-5.

Perl模块安装

转自:http://www.mike.org.cn/blog/index.php?load=read&id=643   http://www.cnblogs.com/itech/archive/2009/08/10/1542832.html Perl 到了第五版增加了模块的概念,用来提供面向对象编程的能力.这是 Perl 语言发展史上的一个里程碑.此后,广大自由软件爱好者开发了大量功能强大.构思精巧的 Perl 模块,极大地扩展了 Perl 语言的功能.CPAN(Comprehensive Pe