#!/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(); # Add and define a format my $formatHeader = $workbook->add_format(); $formatHeader->set_bold(); $formatHeader->set_align( 'center' ); # Add and define a format my $formatTable = $workbook->add_format(); $formatTable->set_align( 'center' ); my @data_for_row = ("Sales", "Region", "Sales Amount", "% Commission", "Commission Amount"); my @table = ( ["Joe", "Robert", "Michelle", "Erich", "Dafna", "Rob"], ["North", "South", "East", "West", "North", "South"], [260, 660, 940, 410, 800, 900], ["10%", "15%", "15%", "12%", "15%", "15%"] ); $worksheet->write( "A1", \@data_for_row, $formatHeader ); $worksheet->write( 1, 0, \@table, $formatTable ); $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 'Sales Amount' } keys %hash; say "Column/row: " . $key . " Value: " . $hash{$key}; __END__ $ perl excel.pl $VAR1 = { 'A7 ' => 'Rob', 'C5 ' => 410, 'C4 ' => 940, 'E5 ' => '', 'E2 ' => '', 'B7 ' => 'South', 'D6 ' => '15%', 'A2 ' => 'Joe', 'A5 ' => 'Erich', 'C7 ' => 900, 'B6 ' => 'North', 'C3 ' => 660, 'A6 ' => 'Dafna', 'B3 ' => 'South', 'E3 ' => '', 'D2 ' => '10%', 'B5 ' => 'West', 'A4 ' => 'Michelle', 'A1 ' => 'Sales', 'D7 ' => '15%', 'E1 ' => 'Commission Amount', 'B1 ' => 'Region', 'C1 ' => 'Sales Amount', 'D4 ' => '15%', 'D5 ' => '12%', 'E7 ' => '', 'A3 ' => 'Robert', 'B4 ' => 'East', 'B2 ' => 'North', 'C6 ' => 800, 'E4 ' => '', 'E6 ' => '', 'D3 ' => '15%', 'C2 ' => 260, 'D1 ' => '% Commission' }; Column/row: C1 Value: Sales Amount