0
正在編寫解析.xls文件的程序。爲此,我有一個包含五個合併單元格(B1,C1,D1,E1,F1)的模板,並在其中寫入「用戶相關錯誤」。在B2,C2,D2,E2,F2中,我寫了錯誤名稱,並且希望每天保存它們的計數。該代碼工作正常,但在解析並保存合併的單元格(B1,C1,D1,E1,F1)未合併且文本顯示在B1中後。我需要合併的單元格(合併),即使在解析之後。合併的單元格正在保存,使用Spreadsheet :: ParseExcel
我該怎麼辦?
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
my $date=$ARGV[1]; #yymmdd
my $hour=$ARGV[0]; #06
$date or $date=`date --date='1 day ago' +%Y%m%d`;
chomp $date;
chomp $hour;
my $db_name = "ravi";
my $table = "CDR";
my $sub_table = "Submission_Failures";
my $del_table = "Delivery_Failures";
my $host = "xxx.xx.x.xxx";
my $command = "cp /root/prac/CDR/CDR.xls /root/prac/CDR/CDR_Report_20$date$hour.xls";
print $command;
`$command`;
sub NULL_count
{
my $type = $_[0];
my @temp_array;
my $error_db = DBI->connect("DBI:mysql:database=$db_name;host=$host;mysql_socket=/opt/lampstack-5.5.27-0/mysql/tmp/mysql.sock","root","", {'RaiseError' => 1});
my $error_sth = $error_db->prepare("SELECT Error_list from error_potrait WHERE Date='$date' and Type='$type'");
$error_sth->execute() or die $DBI::errstr;
while (my $temp = $error_sth->fetchrow_array())
{
push(@temp_array, $temp);
}
my $temp = @temp_array;
foreach my $i ($temp .. 4)
{
$temp_array[$i] = "NULL";
}
$error_sth->finish();
return @temp_array;
}
my @db_system_errors = NULL_count ("Submission_user_error");
my @db_network_errors = NULL_count ("Submission_ESME_error");
my @db_ESME_errors = NULL_count ("Submission_system_error");
my @db_user_errors = NULL_count ("Submission_network_error");
my @del_user_errors = NULL_count ("Delivery_user_error");
my @del_network_errors = NULL_count ("Delivery_network_error");
my @del_system_errors = NULL_count ("Delivery_system_error");
my @submission_errors = (@db_network_errors,@db_system_errors,@db_ESME_errors,@db_user_errors);
my @delivery_errors = (@del_user_errors,@del_network_errors,@del_system_errors);
sub error_headers
{
my $sheet_no = shift;
my @array = @_;
my $row = 1;
my $col = 1;
# Open an existing file with SaveParser
my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $template = $parser->Parse("CDR_Report_20$date$hour.xls") or die "Cant open xls";
# Get the first worksheet.
my $sheet = $template->worksheet($sheet_no);
$sheet->AddCell(1, 0, $date);
foreach my $value (@array)
{
$sheet->AddCell($row, $col, $value);
++$col;
}
$template->SaveAs("CDR_Report_20$date$hour.xls");
}
error_headers (3,@submission_errors);
error_headers (4,@delivery_errors);
sub parser_excel
{
my $sql_comm = $_[0];
my $sheet_no = $_[1];
my $row = $_[2];
my $col = $_[3];
my $dbh = DBI->connect("DBI:mysql:database=$db_name;host=$host;mysql_socket=/opt/lampstack-5.5.27-0/mysql/tmp/mysql.sock","root","", {'RaiseError' => 1});
#Selecting the data to fetch
my $sth = $dbh->prepare("$sql_comm");
$sth->execute() or die $DBI::errstr;
# Open an existing file with SaveParser
my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $template = $parser->Parse("CDR_Report_20$date$hour.xls") or die "Cant open xls";
# Get the first worksheet.
my $sheet = $template->worksheet($sheet_no);
$sheet->AddCell($_[4], 0, $date);
while (my @row = $sth->fetchrow_array())
{
my $Date_db = shift @row;
foreach my $value (@row)
{
$sheet->AddCell($row, $col, $value);
++$col;
}
$row++;
$col=0;
}
$template->SaveAs("CDR_Report_20$date$hour.xls");
$sth->finish();
}
parser_excel("Select * from $table where Date = $date and Hour = $hour",2,1,0,0);
parser_excel("Select * from $sub_table where Date = $date and Hour = $hour",3,2,0,1);
parser_excel("Select * from $del_table where Date = $date and Hour = $hour",4,2,0,1);`
還包括Perl模塊支持合併單元格?如果它基於早期的XLS文件格式(在Perl流行的時間周圍),那麼它可能不會。 – Jeeped
@Jeeped Perl仍然很受歡迎。 :)其實[Spreadsheet :: ParseExcel](https://metacpan.org/pod/Spreadsheet::ParseExcel)甚至有相當近的提交。 – simbabque
問題仍在桌面上「*」perl-module是否支持合併單元格?「* – Jeeped