#!/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; my $book = ReadData ('simple.xlsx'); my %hash; my @rows = Spreadsheet::Read::rows($book->[1]); foreach my $i (1 .. scalar @rows) { foreach my $j (1 .. scalar @{$rows[$i-1]}) { # say chr(64+$j) . "$i " . ($rows[$i-1][$j-1] // ''); $hash{chr(64+$j) . "$i "} = ($rows[$i-1][$j-1] // ''); } } print Dumper \%hash; my ($key) = grep{ $hash{$_} eq 'second row' } keys %hash; say "Column/row: " . $key; __END__ $ perl excel.pl $VAR1 = { 'C5 ' => '', 'D2 ' => '', 'B6 ' => 7, 'D6 ' => '', 'C3 ' => 3, 'E2 ' => 11, 'B5 ' => 6, 'B4 ' => '', 'B1 ' => '', 'C4 ' => '', 'A6 ' => 5, 'A5 ' => 4, 'D1 ' => '', 'A1 ' => 'Hi Excel!', 'D4 ' => '', 'B3 ' => 2, 'A3 ' => 1, 'A2 ' => 'second row', 'A4 ' => '', 'E3 ' => 12, 'E6 ' => '', 'C2 ' => '', 'E5 ' => '', 'C6 ' => '', 'C1 ' => '', 'E1 ' => 10, 'D5 ' => '', 'E4 ' => '', 'B2 ' => '', 'D3 ' => '' }; Column/row: A2