use strict; use warnings; use Math::Matrix qw(transpose); use Spreadsheet::ParseExcel::Simple; use Spreadsheet::WriteExcel::Simple; my $xls = Spreadsheet::ParseExcel::Simple->read('old.xls'); my @data; for ($xls->sheets) { while ($_->has_data) { push @data, [$_->next_row]; } } my $matrix = Math::Matrix->new(@data); my $ss = Spreadsheet::WriteExcel::Simple->new; $ss->write_row($_) for @{$matrix->transpose}; open OUT,'>','new.xls'; binmode OUT; print OUT $ss->data;