2012-01-31 12 views
3

XLSファイルをPHPにインポートしようとしています。ここで情報を編集してmySQLにインポートできます。私はこれに関連することは一度もしていないので、私はそれに近づく方法を掴むのに苦労しています。PHPでXLSでデータを編集してからmySQLにインポート

私はいくつかのオープンソースプロジェクトを見てきました

  • PHPエクセルリーダー
  • ExcelRead
  • PHPExcel

これらのオプションのいずれも完全に私は多分やるかしたいのか合いません私はちょうどドキュメントに深く入っていない。

考慮すべき点がいくつかあります。 XLSファイルは他のファイル形式に変換することはできません。これは、技術者以外のユーザーがアクセスしやすいように作られています。 XLSファイルは、毎回同じ形式(列)を持つ別のWebサイトで生成されたレポートです。 は例えば、とのすべてのXLSファイルには、列の同じ量(これはA1になります)があります。

*ID |Email |First Name |Last Name |Paid |Active |State |Country|* 

をしかし、より多くの列がDBにインポートするために何が起こっているかよりも、XLSファイルにあります。 たとえば、インポートされている行(これはA1になります):データを読み込むためのPHPExcelよう

*ID |Email |First Name |Last Name |Country* 

私はデータを編集には2つの方法の一つはA.使用だろう知っているが何か、編集それをDBまたはBに送ります。PHPExcelのようなものを使ってXLSをCSVに変換し、一時テーブルに生のインポートを行い、データを編集して古いテーブルに挿入します。

私はPHPExcelの多くのドキュメントを読んだことがありますが、データベースにインポートする際に何も持っていないし、インポートの前後にXLSの編集をどこから始めるべきかわからない。

私はたくさんのキーワードを探そうとしており、主にXLSの読み書き/プレビューの方法に関する結果が見つかりました。私は、これらのことすべてを最少かつ簡単なステップで実行する最善の方法についてアドバイスを求めています。

+0

3段階すべてでPHPを使用します。最初に、いくつかのPHPパッケージを使用してExcelのデータを*メモリ*にインポートします。変数を変数に格納し、必要に応じてPHPを使って操作します。次に、同じPHPスクリプトを使用してデータベースに接続し、新しいデータを保存します。 –

+0

PHPExcelにはセルの値を編集するための完全なツールセットが用意されていますが、ブックを再度保存しない場合は、抽出したデータをMySQLに挿入する前に変更しないでください。このドキュメントでは、データをデータベースに格納する方法については説明していません。なぜなら、INSERTステートメントは他の多くのドキュメントで扱われているからです。しかし、rowIteratorの使用を含むさまざまな方法でワークシートからデータを抽出する方法を示す例があります。 –

+0

@Mark私は言ったように、それは技術者以外のユーザーのためであり、誰もが独自の解釈を持ち、データがどのように壊れてしまうのかという理由で、ワークブックを編集したくないからです。 –

答えて

2

this article on using PHP-ExcelReaderを参照してください。特に、「テーブルを回転させる」という短いセクションです。

あなたが持っているすべてのソリューションは、このように見ていることになります:

  1. XLSから行を読む(XLSリーダーが必要です)
  2. データベースのため、必要に応じて行のデータを変更します。
  3. 変更されたデータをデータベースに挿入します。

「データの編集」でこの固定があるようです。これはちょうどPHPです - あなたはXLSリーダーから価値を得て、PHPコードでそれを修正してから、データベースに挿入します。中間ファイルはありません。あなたはXLSを変更しません。それは単なるPHPです。

これは、書かなければならないプログラムの内部ループの、非常に単純で、テストされていない例です。これは一般的なパターンを説明するためのものです。

$colsYouWant = array(1,2,3,4,8); 
$sql = 'INSERT INTO data (id, email, fname, lname, country) VALUES (?,?,?,?,?)'; 
$stmt = $pdo->prepare($sql); 

$sheet = $excel->sheets[0]; 
// the excel reader seems to index by 1 instead of 0: be careful! 
for ($rowindex=2; $rowindex <= $sheet['numRows']; $rowindex++) { 
    $xlsRow = $sheet['cells'][$rowindex]; 
    $row = array(); 
    foreach ($colsYouWant as $colindex) { 
     $row[] = $xlsRow[$colindex]; 
    } 
    // now let's "edit the row" 
    // trim all strings 
    $row = array_map('trim', $row); 
    // convert id to an integer 
    $row[0] = (int) $row[0]; 
    // capitalize first and last name 
    // (use mb_* functions if non-ascii--I don't know spreadsheet's charset) 
    $row[2] = ucfirst(strtolower($row[2])); 
    $row[3] = ucfirst(strtolower($row[3])); 

    // do whatever other normalization you want to $row 

    // Insert into db: 
    $stmt->execute($row); 
} 
+0

私の固定は、エントリの前に行を編集する方法についてよく書かれたチュートリアルを見つけることができないという事実に基づいていると思います。その記事は、私が見つけたよりも詳細に入っているようだ。 –

+1

PHPを知っている場合は、入力前に行を編集する方法が分かります。例えば'$ valueForDb = trim($ cellFromXls)'です。そこでは、あなたはちょうど編集しました。 –

+0

セルで編集したくないので、行ごとに編集したい。そして、セルやレコードの代わりに行を呼び出す方法に関するドキュメントは見つかりません。私は私の元のポストでそれを説明したと思った。私はPHPを知っています、それは問題ではありません。問題は、I.E。 XLSリーダー私はそれが行によって呼び出されることさえできるのかどうかは明らかではない。 –

関連する問題