将数据从Excel电子表格或CVS导入MySQL

将数据从Excel电子表格或CVS导入MySQL,mysql,Mysql,我有一个电子表格,实际上只有一个复杂的表格。我基本上将电子表格转换为cvs,并使用groovy脚本生成插入脚本 但是,我不能对一个有28个字段的表执行此操作,这些字段包含电子表格中某些字段中的数据,这使得导入CVS变得更加复杂。因此,新CV中的字段没有正确区分,或者我的脚本没有考虑到这一点 有人对更好的方法有什么建议吗?谢谢。看一下这份声明。它将帮助您将数据从CSV文件导入到表中。不久前,我在网站上回答了一个非常类似的问题,并提供了下面的Perl代码块,作为如何将Excel工作表直接加载到MyS

我有一个电子表格,实际上只有一个复杂的表格。我基本上将电子表格转换为cvs,并使用groovy脚本生成插入脚本

但是,我不能对一个有28个字段的表执行此操作,这些字段包含电子表格中某些字段中的数据,这使得导入CVS变得更加复杂。因此,新CV中的字段没有正确区分,或者我的脚本没有考虑到这一点


有人对更好的方法有什么建议吗?谢谢。

看一下这份声明。它将帮助您将数据从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数据库,其复杂程度和成功程度各不相同

  • 实用程序。完全公开,我是Excel2MySQL的作者。这两个实用程序不是免费的,但它们是最简单的选择,限制最少。它们还包括其他功能,以帮助将Excel数据导入MySQL。例如,Excel2MySQL会自动创建您的表,并自动优化字段数据类型,如日期、时间、浮动等。如果您的用户很忙或无法使用其他选项处理数据,则这些实用程序可能会满足您的需要

  • :这个流行的选项可能是最具技术性的,需要对MySQL命令执行有一些了解。在加载和使用大小适当的VARCHAR字段类型之前,必须手动创建表。因此,您的字段数据类型没有得到优化。加载数据填充导入超过“最大允许数据包”大小的大型文件时遇到问题。需要特别注意避免导入特殊字符和外来unicode字符时出现问题。下面是我最近用于导入名为test.csv的csv文件的示例

  • :首先选择数据库,然后选择导入选项卡。phpMyAdmin将自动创建表并调整VARCHAR字段的大小,但不会优化字段类型。phpMyAdmin无法导入超过“最大允许数据包”大小的大型文件

  • :这是来自Oracle的免费Excel加载项。此选项有点乏味,因为它使用向导,并且导入速度慢,并且对于大文件有问题,但是对于包含VARCHAR数据的小文件,这可能是一个很好的选项。字段未优化


  • 对于逗号分隔值(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