in reply to automating perl script

First off, start using some basic data structures.
my %sheets; $sheets{$_} = $workbook->add_worksheet($_) for qw( AP NAP ); my %column_headings = ( AP => [qw( Login UserName Group ... )], NAP => [qw( Login UserName LDAP-Status ... )], ); foreach my $sheet_name (keys %column_headings) { my $col = 0; foreach my $col_name (@{$column_headings{$sheet_name}}) { $sheets{$sheet_name}->write(0, $col++, $col_name, $heading_for +mat); } }

If you do that, especially using the (row, col) addressing vs. the 'A1' addressing, you'll be a lot better.

Of course, you could just stop using Spreadsheet::WriteExcel directly and use Excel::Template instead. (That's what I'd do ...)

------
We are the carpenters and bricklayers of the Information Age.

The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6

... strings and arrays will suffice. As they are easily available as native data types in any sane language, ... - blokhead, speaking on evolutionary algorithms

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.