http://www.perlmonks.org?node_id=643554


in reply to Win32::OLE - Excel chart location

You can't use a cell to position a chart. You can assign an (x, y) position.

use warnings; use strict; use Win32::OLE qw(in); use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Const 'Microsoft Office .* Object Library'; my $excel = Win32::OLE->new('Excel.Application'); $excel->{Visible} = 1; my $xls = $excel->Workbooks->Add; my $chart = $excel->Charts->Add; $chart->Location( xlLocationAsObject, 'Sheet1' ); # find the chart (it can only be moved via 'shape') <- this can be the + hard part! # if it is the first chart, it will be named 'Chart 1'. # If there has already been n charts on that sheet it'll be named # 'Chart n+1' my $shape; foreach my $s ( in $excel->ActiveSheet->Shapes() ) { $shape = $s; last if $shape->type == msoChart; # msoChart == 3 } # move the chart to (0, 0) $shape->{Left} = 0; $shape->{Top} = 0;
You can also move a chart relative amounts with IncrementLeft and IncrementTop.