OpenOffice-OODoc

 view release on metacpan or  search on metacpan

examples/text2table  view on Meta::CPAN

#!/usr/bin/perl
#-----------------------------------------------------------------------------
#	$Id : text2table 0.2 2008-05-13 JMG$
#-----------------------------------------------------------------------------

=head1	NAME

text2table - flat text conversion to OpenDocument spreadsheet

=head1	SYNOPSIS

text2table sourcefile.csv mycalc.ods 32 20

=head1	DESCRIPTION

Creates an ODF spreadsheet file and populate its first sheet
from a delimited text file. Each line of the source file produces
a row in the target table. In the line, the field separator is ";".

The target file is created. Any existing file with the same name is
replaced.

The two last arguments are the length (lines) and the width (columns)
of the target table.

The input values are processed as text values.

=cut

use OpenOffice::OODoc	2.103;

my ($input_file, $output_file, $lines, $columns) = @ARGV;

die "Usage : txt2table <input file> <output OOo file> <lines> <columns>\n"
	unless ($input_file && $output_file && $lines && $columns);

	# create the OOo spreadsheet
my $doc = odfDocument(file => $output_file, create => 'spreadsheet');

	# select & size the 1st (and only) sheet in the document
my $sheet = $doc->expandTable(0, $lines, $columns);
	# rename it as the input file (why not ?)
$doc->renameTable($sheet, $input_file);

	# populate the table
open INPUT, "<", $input_file or die "Input file $input_file unavailable\n";
my $line = undef;
my @rows = $doc->getTableRows($sheet);
for (my $i = 0 ; $i < $lines && ($line = <INPUT>) ; $i++)
	{
	my $row = $rows[$i];
	my @cellvalues = split ';', $line;
	my @cells = $doc->getRowCells($row);
	for (my $j = 0 ; $j < $columns && @cellvalues ; $j++)
		{
		$doc->cellValue($cells[$j], shift @cellvalues);
		}
	}

	# save the result
$doc->save;
exit;

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.535 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )