在 Perl 脚本中将电子表格文件读入数据库

Posted

技术标签:

【中文标题】在 Perl 脚本中将电子表格文件读入数据库【英文标题】:Spread sheet file reading into database in Perl script 【发布时间】:2015-02-06 14:03:46 【问题描述】:

我是 perl 的新手。我需要读取 excel 文件并插入数据库。这是我的试用代码:

#!/usr/bin/perl -w
use DBI;
use warnings;
my $dbh = DBI->connect("DBI:mysql:database=afscp;host=135.75.60.120;    mysql_socket=/var/lib/mysql/mysql.sock","blrdev_rw","W.mZk8", 'RaiseError'  => 1);
my $insert_table_2= $dbh->prepare(qINSERT INTO employee_perl  (emp_id,first_nm,last_nm,team_code) VALUES (?, ?,?,?)) or die $dbh->errstr;
open (FILE, "Excel/Book1.xls") or die "Couldn't read file: $!"; 

while (<FILE>)
    
        chomp;
        my @fields = split(',', $_);

        my $emp_id = shift(@fields);
        my $fname = shift(@fields);
        my $lname = shift(@fields);
       my $team_code = shift(@fields);      
       $insert_table_2->execute($emp_id,$fname,$lname,$team_code) or   die        $dbh->errstr;
    

close (FILE);  
$dbh->disconnect();

【问题讨论】:

xls 是一种二进制格式——你需要像search.cpan.org/~dougw/Spreadsheet-ParseExcel-0.65/lib/… 这样的东西来读取二进制格式。 你在哪个平台上?您可以使用Win32::OLE 驱动 Excel。您还可以可能取消选择 xlsx,因为那是一个包含 XML 的 zip 文件。 【参考方案1】:

CPAN 模块 Spreadsheet::ParseExcel 是您阅读 excel 的朋友。 来自文档:

#!/usr/bin/perl -w
use strict;
use Spreadsheet::ParseExcel;
my $parser   = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse('Book1.xls');
if ( !defined $workbook )

    die $parser->error(), ".\n";

for my $worksheet ( $workbook->worksheets() )

    my ( $row_min, $row_max ) = $worksheet->row_range();
    my ( $col_min, $col_max ) = $worksheet->col_range();

    for my $row ( $row_min .. $row_max )
    
        for my $col ( $col_min .. $col_max )
        
            my $cell = $worksheet->get_cell( $row, $col );
            next unless $cell;

            print "Row, Col    = ($row, $col)\n";
            print "Value       = ", $cell->value(),       "\n";
            print "Unformatted = ", $cell->unformatted(), "\n";
            print "\n";
        
    

【讨论】:

我已经尝试了上面的代码,但出现以下错误:Can't locate Spreadsheet/ParseExcel.pm in @INC(@INC 包含:/usr/lib64/perl5/site_perl/5.8.8/x86_64 -linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib /perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) 在 excel.pl第 3 行。 是的。 Spreadsheet::ParseExcel 是一个 CPAN 模块。您需要安装它。此外,您可能会考虑升级您的 Perl 版本。 5.8.8 是九年前发布的。当前版本是 5.20。 这意味着您的系统中没有安装 Spreadsheet::ParseExcel 模块。看看这个如何安装 perl 模块:cpan.org/modules/INSTALL.html【参考方案2】:

您可能会从 CPAN 上分享的出色工作中受益:enter link description here。如果您使用的是 GNU/Linux 操作系统,您可以检查哪些模块可作为编译包使用(例如,您可以使用 aptitude 或emerge 或 MacPorts 安装)。

您还需要考虑到 Excel 是一种支持多种电子表格格式的软件,每种格式都有多个版本。

在某些业务场景中,您可能会考虑将电子表格连接到某个 RDBMS 服务器,以便将 excel 文件变成共享数据存储的前端。

【讨论】:

以上是关于在 Perl 脚本中将电子表格文件读入数据库的主要内容,如果未能解决你的问题,请参考以下文章

将带有单元格中公式的excel文件读入R

以编程方式从 Excel 电子表格中提取数据

如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中

如何删除 vlookup 函数但实用地保留 perl 电子表格中的值

在 Python 中将多个 CSV 文件合并到电子表格的单独选项卡中

如何从 Perl 创建或读取 OpenOffice 电子表格?