#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use feature 'say'; use Excel::Writer::XLSX; use Spreadsheet::Read qw(ReadData); my $workbook = Excel::Writer::XLSX->new( 'simple.xlsx' ); my $worksheet = $workbook->add_worksheet(); my @data_for_row = (1, 2, 3); my @table = ( [4, 5], [6, 7], ); my @data_for_column = (10, 11, 12); $worksheet->write( "A1", "Hi Excel!" ); $worksheet->write( "A2", "second row" ); $worksheet->write( "A3", \@data_for_row ); $worksheet->write( 4, 0, \@table ); $worksheet->write( 0, 4, [ \@data_for_column ] ); $workbook->close; # From this point onward is important my $book = ReadData ('simple.xlsx'); my @sheets = @$book[0]->{sheets}; my %hash; my $key_word = 'second row'; foreach my $sheet_number (@sheets) { my @rows = Spreadsheet::Read::rows($book->[$sheet_number]); foreach my $i (1 .. scalar @rows) { foreach my $j (1 .. scalar @{$rows[$i-1]}) { say "Cell/Row: " . chr(64+$j) . $i . " at sheet: ".$sheet_number." key word: " . ($rows[$i-1][$j-1] // '') if ($rows[$i-1][$j-1] // '') eq $key_word; $hash{"Sheet: " . $sheet_number}{chr(64+$j) . "$i "} = ($rows[$i-1][$j-1] // ''); } } } # print Dumper \%hash; __END__ $ perl excel.pl Cell/Row: A2 at sheet: 1 key word: second row