I think this will do what you want:
#!/usr/bin/perl
use strict;
use warnings;
use Excel::Writer::XLSX;
use Spreadsheet::XLSX;
my $master = 'master.xlsx';
-f $master
or die "Spreadsheet '$master' not found: $!";
my $excel = Spreadsheet::XLSX->new($master)
or die "Cannot open spreadsheet '$master' for reading: $!";
my $sheet = $excel->{Worksheet}[0];
my $last_old_id = $sheet->{Cells}[ $sheet->{MaxRow} ][0]{Val} // 'IT
+S0000';
$last_old_id =~ /(\d+)/;
my $first_new_id = $1 + 1;
print "How many Serial Numbers do you need?\n";
my $mal = <STDIN>;
my $comp = 'ITS';
my @array;
for my $number (1 .. ($first_new_id + $mal - 1))
{
my $exp = $comp . sprintf("%04d", $number);
push @array, $exp;
}
my $simple = 'simple.xlsx';
my $workbook = Excel::Writer::XLSX->new($simple)
or die "Cannot open spreadsheet '$simple' for writing: $!";
my $worksheet = $workbook->add_worksheet();
my @array2 = @array[($first_new_id - 1) .. ($first_new_id + $ma
+l - 2)];
$worksheet->write_col(0, 0, \@array2);
$workbook = Excel::Writer::XLSX->new($master)
or die "Cannot open spreadsheet '$master' for writing: $!";
$worksheet = $workbook->add_worksheet();
$worksheet->write_col(0, 0, \@array);
The full set of IDs is stored in the first column of master.xlsx. The new IDs are (over-)written into the file simple.xlsx, as before.
Hope that helps,
Update: As Anonymous Monk implies below, you have to create an Excel file called master.xlsx first (using Excel), before you run the code. The file should initially be empty.
Athanasius <°(((>< contra mundum