1

sqliteクエリを実行して結果をテキストファイルに保存するための次のPerlコードがあります。しかし、結果をExcelテーブルに保存したいと思います。それができる方法はありますか?

#!/usr/local/bin/perl -w
use strict;
use DBI;
my $dbfile = 'C:\usage.db3';      # your database file
my $dbh = DBI->connect(          # connect to your database, create if needed
    "dbi:SQLite:dbname=$dbfile", # DSN: dbi, driver, database file
    "",                          # no user
    "",                          # no password
    { RaiseError => 1 },         # complain if something goes wrong
) or die $DBI::errstr;

#use Data::Dump::Streamer;


my $array1 = $dbh->selectall_arrayref("SELECT  USR.id,USR.name, ST.license FROM users USR, status ST, upd_ate UD WHERE UD.upt_id = (select max(p2.upt_id) from upd_ate p2) AND ST.id = USR.id AND ST.upt_id = UD.upt_id ORDER BY ST.license,USR.name");



open FILE, ">btc.txt" or die $!;


foreach my $Ilink (@$array1) {
my ($id, $name, $license) = @$Ilink;
print FILE "$id|$name|$license\n";
}
close FILE;

ありがとう

4

2 に答える 2

2

やや似たような目標のためにExcel::Templateモジュールを使用しました。私たちのプロジェクトでは、.xls形式で数百(または数千)のスプレッドシートを作成する必要がありました。これらのスプレッドシートのレイアウトは同じですが、もちろん、内部のデータは大きく異なります。)。

私はこのモジュールの一般的な考え方が好きでした:あなたはこのようなテンプレートファイルを作成します(それを呼びましょうlicense.xml):

<workbook>
  <worksheet name="licenses">
    <loop name="license_data">
      <row>
        <cell text="$id"></cell>
        <cell text="$name"></cell>
        <cell text="$license"></cell>
      </row>
    </loop> 
  </worksheet>
</workbook>

...次に、次のようにデータを渡します。

use strict;
use Excel::Template;

my $template = Excel::Template->new(
    filename => 'license.xml',
);

$template->param('license_data' => [
  { id => 1, name => 'John Doe', license => '77-77-7' },
  { id => 2, name => 'Jack Right', license => '88-88-8' }
]);

$template->write_file('license.xls');

...そして出来上がり!このスクリプトの作業の最後に、完全なXLSファイルがあります。)。

更新:この投稿の最初のリビジョンでテンプレートの構文を完全に台無しにしたのはとても昔のことです。:(これで問題なく動作します。確認しました。)

また、Excel :: Templateの機能には多少の制限があります(たとえば、結合されたセルを挿入するのは非常に複雑なプロセスです)。Excel :: Template :: Plusの方がいくらか機能があることを読みましたが、それを実践するための実際のタスクはまだ見つかりません。)。

于 2012-06-20T21:29:05.313 に答える
0

私はDBI_to_Excel.pmとfrom_dbi_to_excel.plでfbs_load.ymlを使用してそれを行います

于 2012-07-23T16:22:00.270 に答える