Darkwing has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

in Excel, you can specify background pictures for sheets. Several explanations how to do this manually in a running Excel can be found (example: https://www.youtube.com/watch?v=BcS7KvEhVMc). Is there a way to create an Excel file having a specified background picture using perl?

Actually, i generate Excel files with Spreadsheet::WriteExcel and Excel::Writer::XLSX, both providing methods to set the background color but no method to set a background picture.

DW

  • Comment on Excel: is there a way to set a background picture using Perl?

Replies are listed 'Best First'.
Re: Excel: is there a way to set a background picture using Perl?
by davies (Monsignor) on Feb 19, 2019 at 12:19 UTC

    If you're prepared to use Win32::OLE, it's quite simple:

    use strict; use warnings; use Win32::OLE; my $xl = Win32::OLE->new('Excel.Application'); $xl->{Visible} = 1; my $wb = $xl->Workbooks->Add; for my $nSht (2..$wb->Sheets->{Count}) { $wb->Sheets(2)->Delete; } my $filename = 'x:\data\internet-memes-hopscotch-accepted.jpg'; # Make + this whatever you want $wb->sheets(1)->SetBackgroundPicture({Filename => $filename});

    If not, I hope this gives some clue as to what to look for in modules I don't use.

    Regards,

    John Davies

      Thanks. This works for me.
Re: Excel: is there a way to set a background picture using Perl?
by thanos1983 (Parson) on Feb 19, 2019 at 10:33 UTC

    Hello Darkwing,

    I know that Spreadsheet::WriteExcel provides a method insert_image($row,-$col,-$filename,-$x,-$y,-$scale_x,-$scale_y) for inserting pictures in the Excel sheet (sample bellow):

    #!/usr/bin/perl use strict; use warnings; use Spreadsheet::WriteExcel; # Create a new Excel workbook my $workbook = Spreadsheet::WriteExcel->new('perl.xls'); # Add a worksheet my $worksheet = $workbook->add_worksheet(); # Insert image $worksheet->insert_image('A1', 'perl.png');

    I assume that you want specifically to insert an image in the background and not on the foreground.

    If this is the case from a quick look up on the Internet I do not think that there is a module in Perl that can do that :(. But maybe I am wrong, maybe another Monk knows a workaround on this.

    Never the less if you find a solution it would be nice to update the question so someone else in future can benefit on this.

    BR / Thanos

    Seeking for Perl wisdom...on the process of learning...not there...yet!
      Hi, i now use the solution from the answer above (Win32::OLE). However, i would consider it to be more convenient if Spreadsheet::WriteExcel also would support adding background pictures.