in reply to Ghost fill in adobe forms

He Who Must Not Be Named asked if we had any suggestions.

Um, yes. The tired old saw of use strict needs to be brought out. Using warnings would be a good idea. What if one of those variables is undefined and the person submitting the form doesn't notice? Also, from what I can tell, the global variables are apparently being populated with one of your do statements. Ugh. That's a great way to obfuscate the data source and to ensure that your variables are more like to be misspelled. Further, you should factor out common code elements:

# this is too repetitive Tab(); Send("$DueDate"); Tab(); Send("$Period"); Tab(); Send("$Year"); Tab(); Send("$PermitNum");

Instead of the above, try this:

my @vars = ( $DueDate, $Period, $Year, $PermitNum ); foreach ( @vars ) { Tab(); Send( $_ ); }

Cheers,
Ovid

Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.

Replies are listed 'Best First'.
Re: (Ovid) Re: Ghost fill in adobe forms
by jcDelta (Initiate) on Jan 03, 2002 at 07:48 UTC
    Thank you for your comments, it was my code. (I had not joined yet.)
    The use strict; is a good point. I was quite suprised when I looked back and did not find it in there.
    The comment to factor out common elements is on target, but the required output is not consistant. (Often two tabs, or same variable repeated; this is a government form, after all.)
    The reason the variables are being populated from the do statement is that they are coming from a text file generated by a VB script in an Excel worksheet. If there is a better way to handle this I would love to hear it.

      Since you already stepped down the slippery slope of Windows automation, you might as well go the full step and automate Excel from Perl, using Win32::OLE (for Windows) or Spreadsheet::ParseExcel (for Windows or Linux/other *nixes?) and some code grabbed from here (untested code):

      use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; # die on errors... $Win32::OLE::Warn = 3; # get already active Excel application or open new my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); # open Excel file my $Book = $Excel->Workbooks->Open("c:/komodo projects/test.xls"); # You can dynamically obtain the number of worksheets, rows, # and columns through the Excel OLE interface. Excel's # Visual Basic Editor has more information on the Excel OLE # interface. Here we just use the first worksheet, rows 1 # through 4 and columns 1 through 3. select worksheet # number 1 (you can also select a worksheet by name) my $Sheet = $Book->Worksheets(1); foreach my $row (1..4) { foreach my $col (1..3) { # skip empty cells next unless defined $Sheet->Cells($row,$col)->{'Value'}; # print out the contents of a cell printf "At ($row, $col) the value is %s and the formula is %s\n", $Sheet->Cells($row,$col)->{'Value'}, $Sheet->Cells($row,$col)->{'Formula'}; } } # clean up after ourselves $Book->Close;

      Of course, you could also use Perl to manipulate that workbook :

      $sheet->Cells($row, $col)->{'Value'} = 1;
      perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web