2

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

有什么方法可以从我的 Excel 文件中选择所有(或一部分)问题并将它们放入 MySQL 表中的字段(我选择)中?

我环顾四周并加载数据文件听起来像是一个可行的选项,但我想选择哪些问题以及将它们放在哪里。谁能指出我正确的方向?还是我应该简单地复制和粘贴?

任何帮助都会很棒!

4

5 回答 5

4

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

关于后者的信息可以在这里找到,例如:

于 2012-05-10T09:57:30.603 回答
0

对我来说最简单的方法是使用 MS Access 打开 Excel 文件(您可以直接执行此操作:文件 -> 打开 ->...)并使用ODBC将数据导出到 MySQL(右键单击表 -> 导出 -> ODBC 数据库。

顺便说一句,我用“MySQL for Excel”试验了一个错误,输出只有 999 行。理论上会在下一个1.3.4版本解决。

于 2015-02-12T08:33:09.550 回答
0

这现在可能看起来有点老了,但会帮助任何其他寻找解决方案的人。

Excel 有官方的 MySQL 插件,用于在 Excel 中导出、导入、附加和编辑 MySQL 数据。

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

于 2014-05-27T19:32:34.423 回答
0

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

于 2012-05-10T09:55:07.020 回答
0
# 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
于 2014-06-20T20:50:00.867 回答