2012-05-10 12 views
2

私は50の質問があるExcelファイルを持っています。これは、Javaアプレットのアンケートに含めるものです。このアンケートの回答は、作成したMySQLデータベースに保存されます。ExcelからMySQLへのエクスポート

私のExcelファイルから質問のすべて(またはサブセット)を選択し、それらをMySQLテーブルの中の(選択した)フィールドに配置する方法はありますか?

私は周りを見回して、データのinfileサウンドを動作するオプションのように読み込んでいますが、どの質問をどこに配置するかを選択したいと思います。誰かが私を正しい方向に向けることができますか?または、単にコピーして貼り付ける必要がありますか?

助けがあれば助かります。

答えて

0

データをCSVファイルとして保存し、それをMySQLにロードするExcelを見てみましょう。 MySQLの構造に従って、Excelでデータをフォーマットしてみてください。

0

これかもしれないが、今少し古いようだが、解決策を探して、他の人に役立つだろう。

ExcelでMySQLデータをエクスポート、インポート、追加、編集するための公式のMySQLプラグインがあります。 (: - >開く - > ...ファイルあなたが直接それを行うことができます)とODBCと私のための最も簡単な方法は、ExcelはMS Accessでファイルを開くことでしたhttp://dev.mysql.com/doc/refman/5.6/en/mysql-for-excel.html

+0

ページが見つかりません。 –

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 
0

:ここ

は、リンクですデータをMySQLにエクスポートする(テーブルを右クリック - >エクスポート - > ODBCデータベース)

ところで、私はbugを "MySQL for Excel"で実験しましたが、出力は999行しかありません。次の1.3.4バージョンで解決してください。

関連する問題