从Excel导出到MySQL

我有一个Excel文件,其中有50个问题,我想包括在一个Java小程序的调查问卷。 这个调查问卷的答案将存储在我创build的MySQL数据库中。

有什么办法,我可以从我的Excel文件中select所有(或一个子集)的问题,并将它们放入MySQL表中的字段(我select)?

我环顾四周,加载数据infile听起来像一个可行的选项,但我想select哪些问题,以及在哪里放置它们。 任何人都可以指向正确的方向吗? 或者我应该简单地复制和粘贴?

任何帮助将是伟大的!

将您的Excel数据保存为CSV格式 ,然后使用LOAD DATA命令将其导入到MySQL中。

后面的信息可以在这里find:

看看Excel将数据保存为CSV文件,然后将其加载到MySQL。 尝试根据MySQL结构在Excel中格式化数据。

这可能现在看起来有点老,但会帮助其他人寻找解决scheme。

有Excel的官方MySQL插件导出,导入,追加和编辑Excel中的MySQL数据。

这里是链接: http : //dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html

 # wanna be generic implementation of xls to mysql upsert in perl # by this time you should have your mysql connection open ... use Spreadsheet::XLSX; use Text::Iconv; # # ----------------------------------------------------------------------------- # runs the insert sql by passed data part # by convention is assumed that the first column is unique and update could # be performed on it ... should there be duplicates the update should fail # ----------------------------------------------------------------------------- sub RunUpsertSql { my $self = shift ; my $table_name = shift ; my $refHeaders = shift ; my $refData = shift ; my $data_str = '' ; my @headers = @$refHeaders ; my @data = @$refData ; print ( "\@data : @data" ) ; print ( "\@headers: @headers" ) ; my $sql_str = " INSERT INTO $table_name " ; $sql_str .= '(' ; for ( $i=0; $i<scalar (@headers);$i++ ) { $sql_str .= " $headers[$i] " . ' , ' ; } #eof for for (1..3) { chop ( $sql_str) } ; $sql_str .= ')' ; foreach my $cellValue ( @data ) { # replace the ' chars with \' $cellValue =~ s|\'|\\\'|g ; $data_str .= "'" . "$cellValue" . "' , " ; } #eof foreach ' replacement # remove the " , " at the end for (1..3) { chop ( $data_str ) } ; $sql_str .= " VALUES (" . "$data_str" . ')' ; $sql_str .= ' ON DUPLICATE KEY UPDATE ' ; for ( $i=0; $i<scalar(@headers);$i++ ) { $sql_str .= "$headers[$i]" . ' = ' . "'" . "$data[$i]" . "' , " ; } #eof for for (1..3) { chop ( $sql_str) } ; print ( "sql_str : $sql_str " ); $sth = $dbh->prepare($sql_str ) ; $sth->execute( ); } #eof sub RunUpsertSql # # ----------------------------------------------------------------------------- # walk trough the Excel and build the data part of the insert sql # ----------------------------------------------------------------------------- sub ParseExcel { my $self = shift ; print ( " == START == " ) ; # not sure if it could work without the next line # for utf8 strings - slavic , japanese etc. my $converter = Text::Iconv -> new ("utf-8", "utf-8"); # http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.13-withoutworldwriteables/lib/Spreadsheet/XLSX.pm my $objExcelParser = Spreadsheet::XLSX -> new ("$FileInputExcel", $converter); # iterate the sheets foreach my $objSheet (@{$objExcelParser-> {Worksheet}}) { print("Sheet: " . $objSheet->{'Name'}); my $rowCount = 0 ; # iterate the rows my @headerData = (); foreach my $row ($objSheet -> {'MinRow'} .. $objSheet -> {'MaxRow'}) { my @rowData = (); $objSheet -> {'MaxCol'} ||= $objSheet -> {'MinCol'}; # iterate the coloumns foreach my $col ($objSheet -> {'MinCol'} .. $objSheet -> {'MaxCol'}) { my $cell = $objSheet -> {'Cells'} [$row] [$col]; if ($cell) { #debug printf("( %s , %s ) => %s\n", $row, $col, $cell -> {'Val'}); # the unformatted value #my $cellValue = $cell->{'Val'} ; # push the formatted value push ( @rowData , $cell->value() ) if $rowCount != 0 ; push ( @headerData , $cell->value() ) if $rowCount == 0 ; } #eof if the cell is defined } #eof foreach col # by convention the name of the xls sheet is the same as the table name $self->RunUpsertSql ( $objSheet->{'Name'} , \@headerData , \@rowData) if $rowCount != 0 ; $rowCount++ ; } #eof foreach row } #eof foreach $objSheet print ( " == STOP == " ) ; } #eof sub ParseExcel 

对我来说最简单的方法是用MS Access打开Excel文件(可以直接执行:File – > Open – > …),并用ODBC将数据导出到MySQL(右键单击表格 – >导出 – > ODBC数据库。

顺便说一下,我已经用“MySQL for Excel”试验了一个bug ,输出只有999行。 从理论上讲,它将在下一个1.3.4版本中得到解决。