将数据从Excel电子表格或CVS导入MySQL
我有一个电子表格,实际上只有一个复杂的表格。我基本上将电子表格转换为cvs,并使用groovy脚本生成插入脚本 但是,我不能对一个有28个字段的表执行此操作,这些字段包含电子表格中某些字段中的数据,这使得导入CVS变得更加复杂。因此,新CV中的字段没有正确区分,或者我的脚本没有考虑到这一点将数据从Excel电子表格或CVS导入MySQL,mysql,Mysql,我有一个电子表格,实际上只有一个复杂的表格。我基本上将电子表格转换为cvs,并使用groovy脚本生成插入脚本 但是,我不能对一个有28个字段的表执行此操作,这些字段包含电子表格中某些字段中的数据,这使得导入CVS变得更加复杂。因此,新CV中的字段没有正确区分,或者我的脚本没有考虑到这一点 有人对更好的方法有什么建议吗?谢谢。看一下这份声明。它将帮助您将数据从CSV文件导入到表中。不久前,我在网站上回答了一个非常类似的问题,并提供了下面的Perl代码块,作为如何将Excel工作表直接加载到MyS
有人对更好的方法有什么建议吗?谢谢。看一下这份声明。它将帮助您将数据从CSV文件导入到表中。不久前,我在网站上回答了一个非常类似的问题,并提供了下面的Perl代码块,作为如何将Excel工作表直接加载到MySQL的一个快速而肮脏的示例。绕过了通过CSV导出/导入的需要,因此希望保留更多的特殊字符,并且消除了对转义内容的担忧
#!/usr/bin/perl -w
# Purpose: Insert each Worksheet, in an Excel Workbook, into an existing MySQL DB, of the same name as the Excel(.xls).
# The worksheet names are mapped to the table names, and the column names to column names.
# Assumes each sheet is named and that the first ROW on each sheet contains the column(field) names.
#
use strict;
use Spreadsheet::ParseExcel;
use DBI;
use Tie::IxHash;
die "You must provide a filename to $0 to be parsed as an Excel file" unless @ARGV;
my $sDbName = $ARGV[0];
$sDbName =~ s/\.xls//i;
my $oExcel = new Spreadsheet::ParseExcel;
my $oBook = $oExcel->Parse($ARGV[0]);
my $dbh = DBI->connect("DBI:mysql:database=$sDbName;host=192.168.123.123","root", "xxxxxx", {'RaiseError' => 1,AutoCommit => 1});
my ($sTableName, %hNewDoc, $sFieldName, $iR, $iC, $oWkS, $oWkC, $sSql);
print "FILE: ", $oBook->{File} , "\n";
print "DB: $sDbName\n";
print "Collection Count: ", $oBook->{SheetCount} , "\n";
for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++)
{
$oWkS = $oBook->{Worksheet}[$iSheet];
$sTableName = $oWkS->{Name};
print "Table(WorkSheet name):", $sTableName, "\n";
for(my $iR = $oWkS->{MinRow} ; defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++)
{
tie ( %hNewDoc, "Tie::IxHash");
for(my $iC = $oWkS->{MinCol} ; defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++)
{
$sFieldName = $oWkS->{Cells}[$oWkS->{MinRow}][$iC]->Value;
$sFieldName =~ s/[^A-Z0-9]//gi; #Strip non alpha-numerics from the Column name
$oWkC = $oWkS->{Cells}[$iR][$iC];
$hNewDoc{$sFieldName} = $dbh->quote($oWkC->Value) if($oWkC && $sFieldName);
}
if ($iR == $oWkS->{MinRow}){
#eval { $dbh->do("DROP TABLE $sTableName") };
$sSql = "CREATE TABLE IF NOT EXISTS $sTableName (".(join " VARCHAR(512), ", keys (%hNewDoc))." VARCHAR(255))";
#print "$sSql \n\n";
$dbh->do("$sSql");
} else {
$sSql = "INSERT INTO $sTableName (".(join ", ",keys (%hNewDoc)).") VALUES (".(join ", ",values (%hNewDoc)).")\n";
#print "$sSql \n\n";
eval { $dbh->do("$sSql") };
}
}
print "Rows inserted(Rows):", ($oWkS->{MaxRow} - $oWkS->{MinRow}), "\n";
}
# Disconnect from the database.
$dbh->disconnect();
这是关于stackoverflow的一个反复出现的问题。以下是最新的答案 实际上,有几种方法可以将excel文件导入MySQL数据库,其复杂程度和成功程度各不相同
对于逗号分隔值(CSV)文件,工作台中的“结果视图”面板具有“从外部文件导入记录”选项,可将CSV数据直接导入结果集中。执行该命令并单击“应用”提交更改
对于Excel文件,请考虑使用Suffic.这可能与可扩展的Excel2MySQL直接处理CSV文件很相似吗?我的csv太大,无法转换为Excel。@panofish您的Excel2MySql是唯一适合我的解决方案。Navicat出错,访问出错,尝试了所有操作。但是你的软件工作得非常完美,只是在我运行了很长一段时间的导入之后才提到试用版会留下一些空白行。希望我事先知道,哈哈,谢谢你的反馈。也许,我会在许可之前添加关于空白记录的通知,以避免其他人的困惑。Excel2MySQL非常可靠,不客气。是的,我确实在同一天购买了许可证,这救了我。。。。。无数的时间、努力、头痛,完美无瑕。非常感谢。perl源代码不应与应用程序Excel2mysql混淆。这个应用程序更快更容易,但它不是免费的。
# ./Excel2mysql.pl test.xls
FILE: test.xls
DB: test
Collection Count: 1
Table(WorkSheet name):Sheet1
Rows inserted(Rows):9892