niedziela, 26 kwietnia 2009

Drukowanie arkusza Google docs

W przykładzie poniżej Perl pobiera dane z arkusza Google Docs, i zapisuje je do pliku tymczasowego. Następnie TeX -- uruchomiony ,,z wnętrza'' skryptu -- formatuje ww. dane (układ graficzny jest zdefiniowany w stylach (por. \input brasskoncert.sty):


use Net::Google::Spreadsheets;
use Getopt::Long;
use Encode qw(encode);

my $STitle = 'Konkurs_Brass'; # nazwa arkusza do pobrania
my $pdftexprogname = 'pdfmex'; # nazwa programu uruchamiającego TeXa
my $outputname = "tmp__.tex"; # nazwa pliku tmp

my $pdfintermode = "-interaction=nonstopmode"; # lepsze niż "-interaction=batchmode";

GetOptions( 't=s' => \$title,);

## nazwy kolumn w arkuszu:
my @Cols = ('nazwisko', 'kraj', 'instrument', 'srednia');

my $service = Net::Google::Spreadsheets->new(
username => '???', password => '???' );

my @spreadsheets = $service->spreadsheets();

my $spr_title = $service->spreadsheet( { title => "$STitle" });
my $worksheet = $spr_title->worksheet( { title => 'sheet1' });
my @rows = $worksheet->rows;

open (OUT, ">$outputname") || die "Nie mogę otworzyć $outputname.tex!\n\n";
print OUT "\\input brasskoncert.sty\n\\HEAD{$title}\n";

for $r (@rows ) { $rc = $r->content; print OUT "\\Row";
for $t (@Cols ) {
print OUT "{", encode("iso-8859-2", ${$rc}{$t}), "}";
}
print OUT "\n";
}

print OUT "\\TAIL \\bye\n";

close (OUT);

my @run_pdftex = ($pdftexprogname, $pdfintermode, $outputname);
system ( @run_pdftex ) == 0 || die "Cuś nie tak\n" ;
##

Być może da się prościej, bez Net::Google::Spreadsheets a poprzez LWP...

Brak komentarzy:

Prześlij komentarz