shantanu_bhadoria has asked for the wisdom of the Perl Monks concerning the following question:
Hi I had this unique issue with setting page margins for a word file using Win32::OLE
The ides is to set right and left margins for any word document. here is the snippet of code i am having trouble with :
The issue with this is that if the papersize is such that width is 8 and the initial right margin for the document before editing was 7.
the Win32::OLE::with function sets the margins in sequence and not together. so if i want to set margins to 2 and 2 in the file, I won't be able to do that since when OLE tries to set the left margin to 2 the word app croaks, since the right margin is still 7 and paper size is 8 so can't have left and right margins of 7 and 2 for a paper width of 8.
the with in VBA allows this adjustment when we pass multiple params to the VBA with() , so I looked into the Win32/OLE/Lite.pm and saw that the with() function is simply a perl implementation of the VBA function which traverses the hash the perl way without any adjustments as required above. Does anyone know a way I can resolve the issue. An obvious hack around this issue is to set both margins to 0 first and then to the desired value but i wish there was a cleaner way to do this. Maybe by calling the VBA with() directly in some way. Just blurbing in the dark here, would appreciate some pointers.
Regards,
Shantanu Bhadoria
The ides is to set right and left margins for any word document. here is the snippet of code i am having trouble with :
$margins_hash{LeftMargin} = $left_margin; $margins_hash{RightMargin} = $right_margin); with( $ExcelObject->{ActiveDocument}->{PageSetup}, %margins_hash );
The issue with this is that if the papersize is such that width is 8 and the initial right margin for the document before editing was 7.
the Win32::OLE::with function sets the margins in sequence and not together. so if i want to set margins to 2 and 2 in the file, I won't be able to do that since when OLE tries to set the left margin to 2 the word app croaks, since the right margin is still 7 and paper size is 8 so can't have left and right margins of 7 and 2 for a paper width of 8.
the with in VBA allows this adjustment when we pass multiple params to the VBA with() , so I looked into the Win32/OLE/Lite.pm and saw that the with() function is simply a perl implementation of the VBA function which traverses the hash the perl way without any adjustments as required above. Does anyone know a way I can resolve the issue. An obvious hack around this issue is to set both margins to 0 first and then to the desired value but i wish there was a cleaner way to do this. Maybe by calling the VBA with() directly in some way. Just blurbing in the dark here, would appreciate some pointers.
Regards,
Shantanu Bhadoria
Back to
Seekers of Perl Wisdom