in reply to How to resolve the sound error while executing this program?

Welcome, before responding your question I'd like to point out that the formatting of your post could be better. Formatting advice is displayed when posting, but in case you missed it see the start if How do I post a question effectively?. If you have the time PerlMonks for the Absolute Beginner is also worth reading. Not a huge deal, but the easier you make it for people to help you, the more likely they are to do so.

On to the problem at hand. Is the beep the only thing you're having problems with? If I recall correctly (please let me know if this is wrong) DisplayAlerts may be what you want to disable. You could quickly test this by substituting the following lines in your code:

$Word->{DisplayAlerts} = 1; to $Word->{DisplayAlerts} = 0;

and

$Excel->{DisplayAlerts}=1; to $Excel->{DisplayAlerts}=0;

Unfortunately I currently don't have access to a Windows environment with these applications available for testing.

Replies are listed 'Best First'.
Re^2: How to resolve the sound error while executing this program?
by SriramGrandhi (Initiate) on Mar 19, 2012 at 05:52 UTC
    Hi,

    Thanks for suggestion but its no working. Here is a simple code

    use warnings; use strict; # we are going be working with MS Word Objects use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Variant; $word->{Displayalerts} = 0; my $text = ""; my $directory = "foo"; opendir (DH, $directory) || die "can't opendir $directory: $!"; # we are working with Word application my $Word = Win32::OLE->new('Word.Application', 'Quit'); my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $excelfile = "E:\\assin\\foo\\sample.xlsx"; my $root = "E:\assin\foo"; my $doc = "E:\\assin\\foo\\Functional.doc"; $Word->Documents->Open("$doc") || die("Unable to open +$doc ", Win32::OLE->LastError()); $Word->{Visible}= 0; # we don't need to see Word in an + active window my $Book = $Excel->Workbooks->Open($excelfile); my $Sheet = $Book->Worksheets(1); my $row; my $col; my @text; # get the first table my $table = $Word->ActiveDocument->Tables(1); for($row=1;$row<3;$row++) { for($col=1;$col<3;$col++) { my $text = $table->Cell($row,$col)->Range->{Text}; $Sheet->Cells($row,$col)->{'Formula'}=$text; } closedir DH;

      Thanks for the correct formatting, this makes it much easier for people to read your code. I can see right away that this script isn't going to run properly. If you cut your example down to just:

      use warnings; use strict; # we are going be working with MS Word Objects use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Variant; $word->{Displayalerts} = 0;

      And run it you'lll see:

      Global symbol "$word" requires explicit package name at strict.pl line + 8. Execution of strict.pl aborted due to compilation errors.

      Basically, you've done this before you've created your Word OLE instance. So move this line to after declaring $Word. Also variable names are case sensitive. You have $word->{Displayalerts} = 0; but the word object is $Word. I've reworked the code so far, removed some blank lines:

      use warnings; use strict; # we are going be working with MS Word Objects use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Variant; my $text = ""; my $directory = "c:\\"; opendir (DH, $directory) || die "can't opendir $directory: $!"; # we are working with Word application my $Word = Win32::OLE->new('Word.Application', 'Quit'); $Word->{Displayalerts} = 0; # hide alerts $Word->{Visible}= 0; # we don't need to see Word in an active window my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); $Excel->{Displayalerts} = 0; # hide alerts my $excelfile = "E:\\assin\\foo\\sample.xlsx"; my $root = "E:\\assin\\foo"; my $doc = "E:\\assin\\foo\\Functional.doc";

      I don't have the documents you're using. Much of what remains is an exercise for you to resolve. Your next problem is the for loops. You have:

      # get the first table my $table = $Word->ActiveDocument->Tables(1); for($row=1;$row<3;$row++) { for($col=1;$col<3;$col++) { my $text = $table->Cell($row,$col)->Range->{Text}; $Sheet->Cells($row,$col)->{'Formula'}=$text; }

      There are some problems here. Firstly, you are missing a closing brace, you have two for loops with their opening braces and one closing brace.

      for( $row = 1; $row < 3; $row++ ){ for( $col = 1; $col < 3; $col++ ){ my $text = $table->Cell($row,$col)->Range->{Text}; $Sheet->Cells($row,$col)->{'Formula'}=$text; } }

      I suggest you do some reading and some research, then make these changes to your code and test it again with the documents you have. You should get some warnings about variables being declared but never used (e.g. @test). Properly indenting your code and using an editor with Syntax_highlighting helps to see where problems are.

      "Thanks for suggestion but its no working."

      It's not working isn't a helpful reply, you didn't mention what happened when you ran your program, what errors and warnings you encountered. To learn some more about what you're working with, and how to improve your posts here I suggest you read the following: