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

i am using the Win32:OLE to work with a excelsheet. I need to enter a formula in a cell. the formula is
=IF(A1=B1,"PASS","FAIL")
i am using
$Sheet->Cells(3,1)->{Value} = "=IF(A1=B1,"PASS","FAIL")";
i am getting an error
"Win32::OLE(0.1703)error 0x80020009" "Exception occured" in PROPERTYPUT "Value" at excel.plx line 37
how do i enter the formula in the sheet ?

Edit: g0n - code tags

Replies are listed 'Best First'.
Re: how to enter formula in excel
by Samy_rio (Vicar) on Feb 14, 2006 at 09:14 UTC

    Hi, Try this,

    $Sheet->Cells(3,1)->{Value} = "=IF(A1=B1,\"PASS\",\"FAIL\")";

    Untested

    Updated Tested code as

    use Win32::OLE; use strict; use warnings; my $ex; eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')}; die "Excel not installed" if $@; unless (defined $ex) { $ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;}) or die "Oops, cannot start Excel"; } my $book = $ex->Workbooks->Add; my $sheet = $book->Worksheets(1); $sheet->Cells(1,1)->{Value} = "foo"; $sheet->Cells(1,2)->{Value} = "foo"; $sheet->Cells(3,1)->{Value} = "=IF(A1=B1,\"PASS\",\"FAIL\")"; + $book->SaveAs( 'test.xls' ); __END__ foo foo PASS

    I am not familiar with Excel. So i have just created a new excel sheet.

    Regards,
    Velusamy R.


    eval"print uc\"\\c$_\""for split'','j)@,/6%@0%2,`e@3!-9v2)/@|6%,53!-9@2~j';

Re: how to enter formula in excel
by McDarren (Abbot) on Feb 14, 2006 at 09:20 UTC
    I've never used Win32::OLE, but just from looking at what you've posted I'd guess that you need to properly escape the quotes in your string. Try this:
    $Sheet->Cells(3,1)->{Value} = "=IF(A1=B1,\"PASS\",\"FAIL\")";
    Cheers,
    Darren :)

      Or rather:

      $Sheet->Cells(3,1)->{Value} = q/=IF(A1=B1,"PASS","FAIL")/;

      Please don't ever actually write a string in Perl with escaped embedded quotes.