この記事では、Drupal で Excel を読み込み、mysql データベースにインポートする方法を紹介します。 ここでは、Excel プラグインの使用方法を紹介します。 PHPExcel は、Office Excel ドキュメントを操作するために使用される PHP クラス ライブラリです。 Microsoft の OpenXML 標準および PHP 言語。これを使用すると、Excel (BIFF) .xls、Excel 2007 (OfficeOpenXML) .xlsx、CSV、Libre/OpenOffice Calc .ods、Gnumeric、PDF、HTML などのさまざまな形式のスプレッドシートの読み取りと書き込みができます。
Drupal Passライブラリ呼び出し PHPExcl
PHPExcel をダウンロードしたら、Drupal ディレクトリにアップロードします: sites/all/libraries/PHPExcel
ライブラリモジュールがプロジェクトにインストールされている場合は、libraries_load($name); を通じて呼び出すことができます。
ライブラリ モジュールがインストールされていない場合は、次のコードを使用してそれを呼び出すことができます:
コードは次のとおりです | コードをコピー |
require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php"); |
Excel を完全にインポートするには、プログラムが完了するまでに長い時間がかかる場合があることに注意してください。
コードの先頭に次のように追加します:
コードは次のとおりです | コードをコピー |
set_time_limit(0); |
無制限の実行時間を確保するため。
Drupal は Excel を読み取り、データベースにインポートします
Excel ファイルをアップロードした後、Drupal は Excel コンテンツを読み取り、データベースに書き込み、インポート結果メッセージを出力します。
まとめると、いくつかのポイントがあります:
DrupalはExcelの複数行、複数列のコンテンツを読み込みます。列数は1からn、行数も1からnです。
Drupal は、データベース構造に従って Excel の列 1 から n を格納するために n 個のフィールドを使用します。Excel に多数の列がある場合、n 列の値を 1 つのフィールドに格納できます。
ここで私が解決したのは、Excelのn列の値をMySQLのnフィールドに保存することです(nはそれほど大きくありません)
これは、Drupal がアップロードされたファイルを最終的に送信した後の関数です:
コードは次のとおりです | コードをコピー |
関数 Excel_upload_form_submit($form, &$form_state) { set_time_limit(0); $タイムスタンプ = 時間(); // Excel ファイルがアップロードされていることを確認してください if ($file = file_save_upload(‘file’)) { $row = 0 //解析された行数 $paseRows = 0; //値のないスキップされた行の数 $insertRows = 0 //挿入された行数 ; $table = array( 「dbfield1」、 「dbfield2」、 「dbfield3、 」 「dbfield4」、 「dbfield5」、 … 「dbfieldn」、 ); require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php"); If(($handle = fopen ( $file->filepath, "r" )) !== FALSE) { $PHPExcel = 新しい PHPExcel (); $PHPReader = 新しい PHPExcel_Reader_Excel2007 (); If (! $PHPReader->canRead ( $file->filepath )) { $PHPReader = 新しい PHPExcel_Reader_Excel5 (); If (! $PHPReader->canRead ( $file->filepath )) { 「Excel はありません」とエコーします } } $PHPExcel = $PHPReader->load ( $file->ファイルパス ); $currentSheet = $PHPExcel->getSheet(0); /**合計で列が何個あるかを取得する*/ $allColumn = $currentSheet->getHighestColumn(); //列の合計数を取得します。この静的メソッドが使用されない場合、取得される $col はファイル列の最大の英大文字です $col = PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn()); /**総行数を取得する*/ $allRow = $currentSheet->getHighestRow(); // ループして各セルの内容を読み取ります。行は 1 から始まり、列は A から始まることに注意してください for($rowIndex = 2; $rowIndex $token_db = $row_db = $field = array(); $i = 0; $query = “; for($colIndex = 0; $colIndex //$addr = $colIndex.$rowIndex; //$cell = $currentSheet->getCell($addr)->getValue(); $cell = $currentSheet->getCellByColumnAndRow($colIndex, $rowIndex)->getValue(); $cell = トリム($cell); If(PHPExcel_RichText の $cell インスタンス) { //リッチテキスト変換文字列 $cell = $cell->__toString(); If ($colIndex == 'A' && !intval($cell)) { $paseRows++; 休憩 $field[] = $table[$i]; $token_db[] = "'%s'";$row_db[] = $cell; $query .= $table[$i]." = ‘%s’, "; } $row++; if ($row_db) { db_query('INSERT INTO {db_import} ('.implode(', ', $field) .', created) VALUES('.implode(', ', $token_db) .', %d)', array_merge($row_db 、配列($タイムスタンプ))); $insertRows++; } } fclose ( $handle ); } Drupal_set_message(t(‘ファイル @file は正常にインポートされました。’, array(‘@file’ => $file->ファイル名))); drupal_set_message(".$row." データの解析が完了し、合計 ".$insertRows." データが追加されました。質問タイプ ID を持つ ".$paseRows." データはありません。"); } 他 { Drupal_set_message(t('インポートするファイルが見つかりません。'), 'エラー'); $form_state['redirect'] = 'admin/content/db/import'; 戻る } } ?> 上記のコード部分のいくつかの点に注意してください: コードは次のとおりです | コードをコピー
| コードをコピー
英語の大文字インデックスを数値としてフォーマットし、インデックス値は 0 から始まります。 | |
|
http://www.bkjia.com/PHPjc/630716.html