使用perl将sqlite查询结果保存在excel中

时间:2012-06-20 20:45:12

标签: perl excel sqlite

我有以下perl代码来执行sqlite查询并将结果保存在文本文件中。但我想将结果保存在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;

由于

2 个答案:

答案 0 :(得分: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更有能力,但还没有找到真正的任务来实践它。 )

答案 1 :(得分:0)

我使用DBI_to_Excel.pmfrom_dbi_to_excel.pl使用fbs_load.yml

执行此操作