まずアイデアを整理しましょう~~
最初: ファイルをサーバーにアップロードします
次に: Excel データ列を読み取り、表示します
次に: ユーザーにフィールドの対応関係を選択させます
次に: データと読み取りフィールドの対応関係を送信します
最後に: データを一括でインポートし、一時ファイルを削除します
上記の合計 5 つのステップを段階的に分析してみましょう~~~
ステップ 1: phpexcelparser4 をダウンロードします.rar が添付ファイルにある場合、このファイルは Excel サーバーにアップロードされ、Web フォームに表示されます。これは通常は問題ありません。問題は、プログラムが実際にテーブルを保存せずに一時テーブルとして保存することです。そのため、最初にプログラム コードを変更します。
コードをコピー コードは次のとおりです:
if (trim($_POST["cmd"])=="アップロード")
{
$err_corr = "サポートされていない形式またはファイルが破損しています";
$excel_file_size;
$excel_file = $_FILES['excel_file'];
$uploadservername=$UploadAbsPath."tmpexcel/".$_FILES['excel_file']['name'];
echo($uploadservername);
if (!is_writeable($UploadAbsPath."tmpexcel/"))
{
echo "目录不可写!";出口;
}
else
{
echo "目录可写!";
}
if (move_uploaded_file($_FILES['excel_file']['tmp_name'], $uploadservername))
{
echo("上传成功");
}
else
{
echo("上传失败");
}
$excel_file=$uploadservername;
//if( $excel_file )
// $excel_file = $_FILES['excel_file']['tmp_name'];
if( $excel_file == '' ) Fatal("ファイルがアップロードされていません");
$exc = new ExcelFileParser("debug.log", ABC_NO_LOG);//ABC_NO_LOG ABC_VAR_DUMP);
//echo($excel_file."|");
$style = $_POST['style'];
if( $style == 'old' )
{
$fh = @fopen ($excel_file,'rb');
if( !$fh ) Fatal("ファイルがアップロードされていません");
if( filesize($excel_file)==0 ) Fatal("ファイルがアップロードされていません");
$fc = fread( $fh, filesize($excel_file) );
@fclose($fh);
if( strlen($fc) < filesize($excel_file) )
fatal("ファイルを読み取れません");
$time_start = getmicrotime();
$res = $exc->ParseFromString($fc);
$time_end = getmicrotime();
}
elseif( $style == 'segment' )
{
$time_start = getmicrotime();
$res = $exc->ParseFromFile($excel_file);
$time_end = getmicrotime();
}
switch ($res) {
ケース 0: ブレーク;
ケース 1: 致命的("ファイルを開けません");
ケース 2: Fatal("ファイルが小さすぎて Excel ファイルになりません");
ケース 3: Fatal("ファイル ヘッダーの読み取りエラー");
ケース 4: 致命的("ファイル読み取りエラー");
ケース 5: Fatal("これは Excel ファイルではありません、または Excel <5.0 に保存されたファイルではありません");
ケース 6: 致命的("ファイルが破損しています");
ケース 7: Fatal("ファイル内に Excel データが見つかりません");
ケース 8: Fatal("サポートされていないファイル バージョン");
デフォルト:
fatal("不明なエラー");
}
/*
print '
'; <br>print_r( $exc ); <br>print '';
データ型 | 説明 | |
空のセル | ||
ABCabc | String | |
12345 | 整数 | |
123.45 | Float | |
123.45 | 日付 |
n | n "; "; if( $j> 25) print chr((int)($j/26) 64); //データを表示するためのドロップダウン リストがここに表示されます //循環データであることに注意してください 🎜>echo ("n"); print " | " |
"; | "; if( $j> 25 ) print chr((int)($j/26) 64); print chr(($j % 26) 65)." 列名 } //ヘッダ出力完了 if ($ws['max_row']>9) { $shownum=9; } else { $ showum=$ws['max_row'];//最初の 10 個のデータのみを出力 } for( $i=0; $iprint " | |
".($i 1)." | n";$data = $ws['cell'][$i][$j]; $font = $ws ['cell'][$i][$j]['font']; $style = " style ='".ExcelFont::ExcelToCSS($exc->fonts[$font ])."' "; switch ($data['type']) { // string case 0: print "dt_string"".$style."> ;"; >$ind = $data['data']; if( $exc->sst['unicode'][$ind] ) { $s = uc2html($exc- >sst[' data'][$ind]); } else $s = $exc->sst['data'][$ind]; if( strlen(trim( $s))= =0 ) print " "; else print $s; break; // 整数 case 1: print "dt_int "".$style ."> "; print $data['data']; break; case 2: print "dt_float""> ; "; echo $data['data']; break; // 日付 ケース 3: print "dt_date"".$style." > "; 🎜> $ret = $data[data];//str_replace ( " 00:00:00", "", gmdate("d-m-Y H:i:s",$exc-> xls2tstamp($data[データ])) ); echo ( $ret ); デフォルト: print "dt_unknown"".$style."> } print " | n"; n"; |
n"; | "; //if( $j>25 ) print chr((int)($j/26) 64); //先读取列名 $tmpcolum=trim($_POST["$j"]); //echo($tmpcolum."|"); if ($tmpcolum=="fkhxm") $fkhxmnum=$j; if ($tmpcolum=="fsfzh") $fsfzhnum=$j; if ($tmpcolum=="fyddh") $fyddhnum=$j; if ($tmpcolum=="ftxdz") $ftxdznum=$j; if ($tmpcolum=="femail") $femailnum=$j; if ($tmpcolum=="flxdh") $flxdhnum=$j; if ($tmpcolum=="fkhah") $fkhahnum=$j; if ($tmpcolum=="fbzxx") $fbzxxnum=$j; } for( $i=0; $i<=$ws['max_row']; $i ) { //$fkhxm= //echo($fkhxmnum.$fsfzhnum .$fyddhnum.$ftxdznum.$femailnum.$flxdhnum.$fkhahnum.$fbzxxnum); //print " | |
".($i 1)." | n";