in reply to Re^6: Reading Variables in Excel Spreadsheet
in thread Reading Variables in Excel Spreadsheet
In depends on the Scope of the named range, either Workbook or Worksheet. If they are all Workbook scope and therefore unique the name is sufficient. If Worksheet specific then add the sheetname ie Sheet1!name
#!perl use strict; use Win32::OLE 'in'; use Win32::OLE::Const 'Microsoft Excel'; $Win32::OLE::Warn = 3; # Die on Errors. # config my $dir = 'c:/temp/'; my $specfile = 'names.xlsx'; my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); $Excel->{DisplayAlerts} = 0; #$Excel->{Visible} = 1; my $Book = $Excel->Workbooks->Open($dir.$specfile); # create named range my %names = ( 'depth' =>['B1',559], 'height'=>['B2',560], 'width' =>['B3',590] ); my $ws = $Book->Worksheets(1); for my $nm (keys %names){ my $rng = $names{$nm}->[0]; # workbook scope $ws->Range($rng)->{'Name'} = $nm ; $ws->Range($nm)->{'Value'} = $names{$nm}[1]; # worksheet scope my $name = 'Sheet2!'.$nm; $ws->Range($rng)->{'Name'} = $name ; $ws->Range($name)->{'Value'} = $names{$nm}[1]; } # show all named ranges in workbook print "\nWorkbook\n"; for my $nm (in $Book->Names){ my $rng = $nm->{'RefersToRange'}; printf "%s %s %s\n", $nm->{'Name'},$nm->{'Value'},$rng->{'Value'}; } # show all named ranges in worksheets for my $i (1..2){ print "\nWorksheet $i\n"; my $ws = $Book->Worksheets($i); for my $nm (in $ws->Names){ my $rng = $nm->{'RefersToRange'}; printf "%s %s %s\n", $nm->{'Name'},$nm->{'Value'},$rng->{'Value'}; } } # close $Book->Save; $Excel->Quit(); undef $Book; undef $Excel;
In Excel use Formulas->NameManager to see the details
poj
|
|---|