my $final = Spreadsheet::WriteExcel->new('filename.xls'); for my $xls ( 'first.xls', 'second.xls' ){ my $book = ...->read('second.xls'); my $worksheet = $book->Worksheet(0); my $sheetf = $final->add_worksheet( $worksheet->{Name} ); my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); for my $row ( $row_min .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); next unless $cell; $sheetf->write( $row , $col, $cell->unformatted ); } } }