簡體   English   中英

如何在 Perl 或批處理中合並兩個 Excel (xls) 文件?

[英]How can I merge two Excel (xls) files in Perl or batch?

我有兩個文件,可以說a.xlsb.xls 第一張包含 2 張紙,第二張包含 3 張。 有人可以告訴我是否可以使用 Perl 或批處理腳本合並它們嗎?

我想要一個 output,在一個XLS文件中有 5 張紙。

對於 Perl 解決方案,使用Spreadsheet::ParseExcel讀取文件並使用Spreadsheet::WriteExcel保存您的 output。 這兩個模塊都有很好的文檔記錄,並帶有大量示例代碼(例如WriteExcel

如果您在 Windows 上運行,安裝了 Excel 並且可以使用Win32::OLE (例如,腳本不會被 web 服務器等調用),以下應該可以工作:

#!/usr/bin/perl

use warnings;
use strict;

use FindBin qw($Bin);
use File::Spec::Functions qw( catfile );

use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;

my $excel = get_excel();
$excel->{Visible} = 1; # for illustration only

my @src = map $excel->Workbooks->Open($_),
          map catfile($Bin, $_),
          qw(one.xls two.xls)
          ;

my $target = $excel->Workbooks->Add(xlWBATWorksheet);
my $before = $target->Worksheets->Item(1);

for my $book ( @src ) {
    my $sheets = $book->Worksheets;
    my $it = Win32::OLE::Enum->new($sheets);

    while (defined(my $sheet = $it->Next)) {
        $sheet->Copy($before);
    }
}

$before->Delete;

$_->Close for @src;
$target->SaveAs(catfile($Bin, 'test.xls'));
$target->Close;

sub get_excel {
    my $excel = Win32::OLE->GetActiveObject('Excel.Application');
    unless(defined $excel) {
        $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit })
            or die "Oops, cannot start Excel: ",
                   Win32::OLE->LastError, "\n";
    }
    return $excel;
}

您可以使用 Alacon - Alasql數據庫的命令行實用程序來完成。

它適用於 Node.js,因此您需要安裝Node.jsAlasql package:

要從 Excel 文件中獲取數據,您可以使用以下命令:

> node alacon "SELECT * INTO XLSX("main.xls",{headers:true}) 
               FROM XLSX('data1.xlsx', {headers:true}) 
               UNION ALL SELECT * FROM XLSX('data2.xlsx', {headers:true})
               UNION ALL SELECT * FROM XLSX('data3.xlsx', {headers:true})
               UNION ALL SELECT * FROM XLSX('data4.xlsx', {headers:true})
               UNION ALL SELECT * FROM XLSX('data5.xlsx', {headers:true})"

這是一條很長的線。 在此示例中,所有文件在“Sheet1”工作表中都有數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM