【Perl】与【Excel】

作者 : admin 本文共4158个字,预计阅读时间需要11分钟 发布时间: 2024-06-17 共1人阅读

【Perl】与【Excel】插图



引言

perl脚本语言对于文本的处理、转换很强大。对于一些信息量庞大的文本文件,看起来不直观,可以将信息提取至excel表格中,增加数据分析的可视化。perl语言的cpan提供了大量模块。对于excel文件的操作主要用到模块:

Spreadsheet::ParseXLSX

Excel::Writer::XLSX

第一个用于对现有excel 表格的解析,第二个用于创建新的excel文件。如果单纯是将文本信息提取到excel表格中其实第二个模块用的更多。看自己需求吧。

参考 & 鸣谢:

perl处理Excel(跨平台) – 潘高的小站 (pangao.vip)



模块安装

首先确保你的linux系统有perl。

安装模块的指令 sudo perl -MCPAN -e “install ‘模块名'”

sudo perl -MCPAN -e “install ‘Spreadsheet::ParseXLSX'”

sudo perl -MCPAN -e “install ‘Excel::Writer::XLSX'”

安装成功的标志:

【Perl】与【Excel】插图(1)

示例

纯粹为了练习而写的脚本,统计学生信息,名字是随机生成的字符串。

#!/usr/bin/perl

=pod
==========================================
Purpose : Excel Witer Example
Author  : On the way , running
Date      : 2024-06-16
==========================================
=cut

use warnings;
use Excel::Writer::XLSX;

# -------------------Create a new Excel workbook
my $xlsx_file_name = "Example.xlsx";
my $workbook = Excel::Writer::XLSX->new( $xlsx_file_name );
print "Create excel file finished!
";
 
# Add worksheet
$worksheet1 = $workbook->add_worksheet("Class_1_Information");
$worksheet2 = $workbook->add_worksheet("Class_2_Information");
$worksheet3 = $workbook->add_worksheet("Class_3_Information");


# -------------------Add and define format
$format_first_row = $workbook->add_format();
$format_first_row->set_bold();
# $format_first_row->set_italic();
$format_first_row->set_color( 'white' );
$format_first_row->set_align( 'center' );
$format_first_row->set_align( 'vcenter' );
$format_first_row->set_bg_color( 'blue' );
$format_first_row->set_border(1);

$format_other_row = $workbook->add_format();
# $format_other_row->set_bold();
# $format_other_row->set_italic();
$format_other_row->set_color( 'black' );
$format_other_row->set_align( 'center' );
$format_other_row->set_align( 'vcenter' );
$format_other_row->set_bg_color( 'white' );
$format_other_row->set_border(1);

# -------------------Define functions 
# aim to : generate rand data  
# call format : func_gen_rand_int_data($lower_bound , $upper_bound);
sub func_gen_rand_int_data {
	return int(rand($_[1] - $_[0] + 1)) + $_[0];
}
# function test 
print "The generated rand data is " . func_gen_rand_int_data(0,1) . "
";

# aim to : generate rand string  
# call format : func_gen_rand_string($lower_bound , $upper_bound , $string_length);
sub func_gen_rand_string {
	my $string_out;
	for (my $i = 0; $i set_column('A:E',30);$worksheet1->set_row(0,30);
$worksheet2->set_column('A:E',30);$worksheet2->set_row(0,30);
$worksheet3->set_column('A:E',30);$worksheet3->set_row(0,30);

#-------------------Write Information to excel file

for (my $col = 0; $col < 5; $col++) {
	for (my $row = 0; $row write( $row, $col, $table_head[$col], $format_first_row );
			}
		else{
			if ($col == 0) {
				$worksheet1->write( $row, $col, $row , $format_other_row );
			}
			elsif($col == 1) {
				$worksheet1->write( $row, $col, func_gen_rand_string( 65 , 90 , func_gen_rand_int_data(10 , 15)) , $format_other_row );
			}
			elsif($col == 2) {
				$worksheet1->write( $row, $col, $table_Gender[func_gen_rand_int_data(0 , 1)], $format_other_row );
			}
			elsif($col == 3) {
				$worksheet1->write( $row, $col, func_gen_rand_int_data(15, 20), $format_other_row );
			}
			else{
				$worksheet1->write( $row, $col, $table_Interest[func_gen_rand_int_data(0 , 6)], $format_other_row );
			}
		}
	}
}


for (my $col = 0; $col < 5; $col++) {
	for (my $row = 0; $row write( $row, $col, $table_head[$col], $format_first_row );
			}
		else{
			if ($col == 0) {
				$worksheet2->write( $row, $col, $row , $format_other_row );
			}
			elsif($col == 1) {
				$worksheet2->write( $row, $col, func_gen_rand_string( 65 , 90 , func_gen_rand_int_data(10 , 15)) , $format_other_row );
			}
			elsif($col == 2) {
				$worksheet2->write( $row, $col, $table_Gender[func_gen_rand_int_data(0 , 1)], $format_other_row );
			}
			elsif($col == 3) {
				$worksheet2->write( $row, $col, func_gen_rand_int_data(15, 20), $format_other_row );
			}
			else{
				$worksheet2->write( $row, $col, $table_Interest[func_gen_rand_int_data(0 , 6)], $format_other_row );
			}
		}
	}
}

for (my $col = 0; $col < 5; $col++) {
	for (my $row = 0; $row write( $row, $col, $table_head[$col], $format_first_row );
			}
		else{
			if ($col == 0) {
				$worksheet3->write( $row, $col, $row , $format_other_row );
			}
			elsif($col == 1) {
				$worksheet3->write( $row, $col, func_gen_rand_string( 65 , 90 , func_gen_rand_int_data(10 , 15)) , $format_other_row );
			}
			elsif($col == 2) {
				$worksheet3->write( $row, $col, $table_Gender[func_gen_rand_int_data(0 , 1)], $format_other_row );
			}
			elsif($col == 3) {
				$worksheet3->write( $row, $col, func_gen_rand_int_data(15, 20), $format_other_row );
			}
			else{
				$worksheet3->write( $row, $col, $table_Interest[func_gen_rand_int_data(0 , 6)], $format_other_row );
			}
		}
	}
}
print "Write Done ! please input  command in you terminal to open the excel file !
";

 
$workbook->close();

结果示意:

【Perl】与【Excel】插图(2)

本站无任何商业行为
个人在线分享-虚灵IT资料分享 » 【Perl】与【Excel】
E-->