私は2つのファイルがa.xls
とb.xls
と言うことができます。第1のものは2枚のシートを含み、第2のシートは3枚のシートを含む。 Perlやバッチスクリプトを使ってそれらをマージすることができれば誰かに教えてもらえますか?2つのExcel(xls)ファイルをPerlまたはバッチでマージするにはどうすればよいですか?
XLS
ファイルに5枚の出力が必要です。
私は2つのファイルがa.xls
とb.xls
と言うことができます。第1のものは2枚のシートを含み、第2のシートは3枚のシートを含む。 Perlやバッチスクリプトを使ってそれらをマージすることができれば誰かに教えてもらえますか?2つのExcel(xls)ファイルをPerlまたはバッチでマージするにはどうすればよいですか?
XLS
ファイルに5枚の出力が必要です。
Perlソリューションの場合は、ファイルを読むにはSpreadsheet::ParseExcel、出力を保存するにはSpreadsheet::WriteExcelを使用します。両方のモジュールにはよく文書化されており、多くのサンプルコードが付属しています(例: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、その後Alasqlパッケージをインストールする必要がありますので、Node.jsのと連携して動作します。
次のコマンドを使用することができます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})"
これは非常に1であります長い行。この例では、すべてのファイルに "Sheet1"シートのデータがあります。
シートには何が含まれていますか?どのチャートや数式ですか?どのオペレーティングシステムですか?そして、Excelをインストールしましたか? –
単純なExcelファイル以外のものを扱う場合は、Win32 :: OLEも必要です(ただし、Excel機能を利用するにはExcelをインストールしたWindowsマシン上に置く必要があります)。http://www.perlmonks.org/?node_id= 855945 – mrk