我的数据看起来像这样:
20110627 ALPHA BETA GAMMA
217722 1425 1767 0.654504367955466 0.811585416264778 -0.157081048309312
我正在使用John McNamara的WriteExcel模块(即tab2xls程序):
use warnings;
use strict;
use Spreadsheet::WriteExcel;
use Scalar::Util qw(looks_like_number);
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
use Spreadsheet::ParseExcel::Workbook;
if (($#ARGV < 1) || ($#ARGV > 2)) {
die("Usage: tab2xls tabfile.txt newfile.xls\n");
};
open (TABFILE, $ARGV[0]) or die "$ARGV[0]: $!";
my $workbook = Spreadsheet::WriteExcel->new($ARGV[1]);
my $worksheet = $workbook->add_worksheet();
my $row = 0;
while (<TABFILE>) {
chomp;
# Split on single space
my @Fld = split('\s', $_);
my $col = 0;
foreach my $token (@Fld) {
if (looks_like_number($token)) {
$worksheet->write($row, $col, $token);
$col++;
} else {
$worksheet->write($row, $col, $token);
#$col++;
}
}
$row++;
}
我想做两件事:首先,将文本保存在一个单元格中,将数字保存在单独的单元格中。我的代码目前将“ALPHA”放在一个单元格中,但是没有将BETA和GAMMA放在这个单元格上(如果单元格上已经存在某些内容,似乎写入不附加文本,因此BETA和GAMMA根本不会出现在生成的excel文件。)
其次,在我提供的数据的情况下,当第二行中有空格时,我想在第一行中移动第二行的数据,其中每个数字将在一个单独的单元格中。< / p> 你能帮帮我吗?谢谢!
编辑1:
我没有看到任何答案:D所以我想改变我的代码来执行以下操作:
foreach my $token (@Fld) {
if (looks_like_number($token)) {
$worksheet->write($row, $col, $token);
$col++;
} else {
$totalToken = $totalToken." ".$token;
print "Total token is $totalToken \n";
$worksheet->write($row, $col, $totalToken);
$col++;
}
}
$row++;
在这种情况下,我创建了一个变量$ totalToken,它附加了文本单元格..然后行中的最后一个文本单元格将所有文本单元格组合在一起,但是我需要摆脱行中的前一个文本单元格?有什么想法吗?