在 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 脚本中将电子表格文件读入数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中
如何删除 vlookup 函数但实用地保留 perl 电子表格中的值