+ elsif ( $format eq 'ods' ) {
+ $type = 'application/vnd.oasis.opendocument.spreadsheet';
+ my $ods_fh = File::Temp->new( UNLINK => 0 );
+ my $ods_filepath = $ods_fh->filename;
+
+ use OpenOffice::OODoc;
+ my $tmpdir = dirname $ods_filepath;
+ odfWorkingDirectory( $tmpdir );
+ my $container = odfContainer( $ods_filepath, create => 'spreadsheet' );
+ my $doc = odfDocument (
+ container => $container,
+ part => 'content'
+ );
+ my $table = $doc->getTable(0);
+ my @headers = header_cell_values( $sth );
+ my $rows = $sth->fetchall_arrayref();
+ my ( $nb_rows, $nb_cols ) = ( scalar(@$rows), scalar(@{$rows->[0]}) );
+ $doc->expandTable( $table, $nb_rows, $nb_cols );
+
+ my $row = $doc->getRow( $table, 0 );
+ my $j = 0;
+ for my $header ( @headers ) {
+ $doc->cellValue( $row, $j, $header );
+ $j++;
+ }
+ for ( my $i = 1; $i < $nb_rows +1 ; $i++ ) {
+ $row = $doc->getRow( $table, $i );
+ for ( my $j = 0 ; $j < $nb_cols ; $j++ ) {
+ # FIXME Bug 11944
+ my $value = Encode::encode( 'UTF8', $rows->[$i - 1][$j] );
+ $doc->cellValue( $row, $j, $value );
+ }
+ }
+ $doc->save();
+ binmode(STDOUT);
+ open $ods_fh, '<', $ods_filepath;
+ $content .= $_ while <$ods_fh>;
+ unlink $ods_filepath;
+ }