Я использовал электронную таблицу:: ParseExcel для списка содержания электронной таблицы. Я видел несколько примеров о том, как вывести всю электронную таблицу. Я действительно хотел бы видеть, как использовать этот сценарий более выборочно.
Пример ниже от IBM в основном выводит содержание всех ячеек, которые имеют данные.
#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $oExcel = new Spreadsheet::ParseExcel;
die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
print "FILE :", $oBook->{File} , "\n";
print "COUNT :", $oBook->{SheetCount} , "\n";
print "AUTHOR:", $oBook->{Author} , "\n"
if defined $oBook->{Author};
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
$oWkS = $oBook->{Worksheet}[$iSheet];
print "--------- SHEET:", $oWkS->{Name}, "\n";
for(my $iR = $oWkS->{MinRow} ;
defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;
$iR++)
{
for(my $iC = $oWkS->{MinCol} ;
defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;
$iC++)
{
$oWkC = $oWkS->{Cells}[$iR][$iC];
print "( $iR , $iC ) =>", $oWkC->Value, "\n" if($oWkC);
}
}
}
Кто-то может дать мне пример того, как я могу указать некоторое действие для взятия для определенного столбца для каждой строки?
Например, у меня есть электронная таблица с 7 столбцами и n строки. Я хочу переформатировать данные в каждом из столбцов определенным способом. Возможно, я хочу, берут столбец 6 для каждой строки и добавляют некоторый текст в конец строки, сохраненной в ячейке. Как это было бы настроено?
Для модификации файла Excel очень полезен модуль Spreadsheet::ParseExcel::SaveParser. Он позволяет читать файл, вносить изменения, а затем записывать измененное содержимое в новый файл. Вот простой пример:
use strict;
use warnings;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::SaveParser;
my $excel_file_name = $ARGV[0];
my $parser = Spreadsheet::ParseExcel::SaveParser->new();
my $workbook_orig = $parser->Parse($excel_file_name);
# We will edit column 7 of the first worksheet.
my $worksheet = $workbook_orig->worksheet(0);
my $EDIT_COL = 6;
my ($row_min, $row_max) = $worksheet->row_range();
for my $r ($row_min .. $row_max){
my $cell = $worksheet->get_cell($r, $EDIT_COL);
unless (defined $cell){
next; # Modify as needed to handle blank cells.
}
my $val = $cell->value . '_append_text';
$worksheet->AddCell( $r, $EDIT_COL, $val, $cell->{FormatNo} );
}
# You can save the modifications to the same file, but when
# you are learning, it's safer to write to a different file.
$excel_file_name =~ s/\.xls$/_new.xls/;
$workbook_orig->SaveAs($excel_file_name);
Многие другие примеры можно найти в отличной документации:
Чтобы переформатировать данные в каждом из столбцов определенным образом, вы можете использовать комбинацию Spreadsheet :: ParseExcel
и ] Spreadsheet :: WriteExcel
модули, такие как
Создайте новый Excel с помощью модуля Spreadsheet :: WriteExcel
и добавьте в него рабочий лист. Затем проанализируйте существующий Excel и запишите его содержимое в новый Excel с форматированием.
Вот пример примера:
use strict;
use Spreadsheet::ParseExcel;
use Spreadsheet::WriteExcel;
die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
my $oBook = $oExcel->Parse($ARGV[0]);
my($iR, $iC, $oWkS, $oWkC);
my $workbook = Spreadsheet::WriteExcel->new('/root/Desktop/test_simple.xls');
my $worksheet = $workbook->add_worksheet();
$worksheet->set_column('A:A', 50);
my $format = $workbook->add_format();
$format->set_size(10);
$format->set_bold();
$format->set_color('black');
$format->set_font('Verdana');
$format->set_text_wrap();
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
$oWkS = $oBook->{Worksheet}[$iSheet];
for(my $iR = $oWkS->{MinRow} ;defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ;$iR++)
{
for(my $iC = $oWkS->{MinCol} ;defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ;$iC++)
{
$oWkC = $oWkS->{Cells}[$iR][$iC];
$worksheet->write($iR , $iC, $oWkC->Value, $format) if($oWkC); #writing a new excel from existing excel
}
}
}
После написания нового Excel из существующего Excel вы можете использовать API Spreadsheet :: WriteExcel
для добавления в него данных. Это решит такие проблемы, как