用perl实现xlsx数据到数据库的插入

fd3cxomn  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(152)

我需要将数据从xlsx插入到数据库中,此代码工作仅执行2行,而不是文件中的所有数据,我需要跳过第一行,cmd告诉我,我插入了4个值,但需要3个值,但我的Excel有3行enter image description here

#!/usr/local/bin/perl
use strict;
use warnings;
use diagnostics;
use Spreadsheet::ParseXLSX;
use DBI;
use Data::Dumper qw(Dumper);

my $parser   = Spreadsheet::ParseXLSX->new();
my $workbook = $parser->parse('test.xlsx');
my $dbh = DBI->connect("DBI:mysql:pokus:localhost", "root", "", { RaiseError => 1}) or die $DBI::errstr;
my $query = 'INSERT INTO soucastky (id, name, age, city) VALUES (?,?,?,?)';
my $sth = $dbh->prepare($query) or die "Prepare failed: " . $dbh->errstr();

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 ) {
        my @values;
        for my $col ( $col_min .. $col_max ) {
            my $cell = $worksheet->get_cell( $row, $col );
            next unless $cell;
            push @values, $cell->value();
        }
        $sth->execute(@values) or die $dbh->errstr;
    }
}

open my $fh, "<", "test" or die $!;
while (<$fh>)
{
        chomp;
        my @vals = split;
        $sth->execute(@vals);
}
close $fh;
g6ll5ycj

g6ll5ycj1#

如果你读documentation for Spreadsheet::ParseExcel,你会看到它说:
Spreadsheet::ParseExcel模块可用于从Excel 95-2003二进制文件中读取信息。
模块无法读取Excel 2007 Open XML XLSX格式的文件。请参阅Spreadsheet::XLSX模块。
电子表格::XLSX的文档中写道:
这个模块在使用正则表达式解析XML的方式上有一些严重的问题。我强烈建议切换到Spreadsheet::ParseXLSX,它采用了更可靠的方法。
所以你需要切换到一个可以解析你正在使用的电子表格的模块。

相关问题