Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use warnings;
  4. use strict;
  5.  
  6. use FindBin qw($Bin);
  7. use File::Spec::Functions qw( catfile );
  8.  
  9. use Win32::OLE qw(in);
  10. use Win32::OLE::Const 'Microsoft Excel';
  11. $Win32::OLE::Warn = 3;
  12.  
  13. my $excel = get_excel();
  14. $excel->{Visible} = 1; # for illustration only
  15.  
  16. my @src = map $excel->Workbooks->Open($_),
  17. map catfile($Bin, $_),
  18. qw(one.xls two.xls)
  19. ;
  20.  
  21. my $target = $excel->Workbooks->Add(xlWBATWorksheet);
  22. my $before = $target->Worksheets->Item(1);
  23.  
  24. for my $book ( @src ) {
  25. my $sheets = $book->Worksheets;
  26. my $it = Win32::OLE::Enum->new($sheets);
  27.  
  28. while (defined(my $sheet = $it->Next)) {
  29. $sheet->Copy($before);
  30. }
  31. }
  32.  
  33. $before->Delete;
  34.  
  35. $_->Close for @src;
  36. $target->SaveAs(catfile($Bin, 'test.xls'));
  37. $target->Close;
  38.  
  39. sub get_excel {
  40. my $excel = Win32::OLE->GetActiveObject('Excel.Application');
  41. unless(defined $excel) {
  42. $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit })
  43. or die "Oops, cannot start Excel: ",
  44. Win32::OLE->LastError, "n";
  45. }
  46. return $excel;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement