まずアイデアを整理しましょう~~ 最初: ファイルをサーバーにアップロードします 次に: 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 ' ';
終了;
*/
show_time();
エコー <<
凡例: <フォーム名='doform' アクション='' メソッド='ポスト'> データ型 説明
空のセル
ABCabc String 12345 整数 123.45 Float 123.45 日付 脚; /* print ""; <br>print_r ($exc-> ワークシート); <br>print_r($exc->sst); <br>print " "; */ for( $ws_num=0; $ws_numworksheet['name']); $ws_num ) { print "ワークシート: ""; if( $exc->worksheet['unicode'][$ws_num] ) { print uc2html($exc->worksheet['name'][$ws_num]); 🎜>}else print $exc->worksheet['name'][$ws_num]; print "" "; $ws = $exc->worksheet[ 'data'][$ws_num]; if( is_array($ws) && isset($ws['max_row']) && isset($ws['max_col']) ) { echo "nn"; print "
n n "; for( $j=0; $jprint " "; if( $j> 25) print chr((int)($j/26) 64); //データを表示するためのドロップダウン リストがここに表示されます //循環データであることに注意してください 🎜>echo ("n"); echo("n選択しないでください "); 🎜>echo ("n顧客名 "); echo("nID カード番号 "); echo("n携帯電話 "); echo("n対応アドレス ") ; echo("nメール "); echo("n電話番号 ") ; 🎜>echo("n顧客の好み "); echo("n備考 "); >echo(" "); print " " print " "; for( $j=0; $jprint " "; 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"; if(isset($ws['cell'][$i ]) && is_array( $ws['cell'][$i]) ) { for( $j=0; $j<=$ws['max_col']; $j ) { if( ( is_array ($ws['cell'][$i]) ) && ( isset($ws['cell'][$i][$j]) ) ){ / / セルデータを出力します print "$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"; } else { print " n"; } } } else { // 空の行を出力します for( $j=0; $j<=$ws['max_col']; $j ) print "< td class=empty> "; print "n"; } print " n"; } echo "< ;/table>< ;br>n"; } else { // 空のワークシート print " - 空 n"; } print " "; } echo(" "); echo("< ;/form>"); /* print "フォーマット "; foreach($exc->format as $value) { printf("( %x )",array_search( $value,$exc->format)); print htmlentities($value,ENT_QUOTES); print " "; print "XFs ;"; for( $i=0;$ixf['format']);$i ) { printf ("(%x) ",$i) ; printf (" フォーマット (%x) フォント (%x)",$exc->xf['format'][$i],$exc->xf['font' ][$i] ); print " "; */ } 操作の効果は次のとおりです: 2 番目のステップは、データを読み取ることです。コードは次のとおりです。 コードをコピーします コードは次のとおりです。 if ($_POST["action"]=="do") { //处理数据 //先读取表头记录 $excel_file=$ _POST["エクセル_ファイル"]; $fh = @fopen ($excel_file,'rb'); $fc = fread( $fh, filesize($excel_file) ); @fclose($fh); //echo("执行".$excel_file); $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 ケース 6: 致命的("ファイルが破損しています"); ケース 7: Fatal("ファイル内に Excel データが見つかりません"); ケース 8: Fatal("サポートされていないファイル バージョン"); デフォルト: fatal("不明なエラー"); } // および读取完了、错误の话が循環可能です MSSQL 内でデータを追加完了! for( $ws_num=0; $ws_numworksheet['name']); $ws_num ) { // print "Worksheet: "" ; // if( $exc->worksheet['unicode'][$ws_num] ) { // print uc2html($exc->worksheet['name'][$ws_num]); // } else // print $exc->worksheet['name'][$ws_num]; // // print """; $ws = $exc->worksheet['data'][$ws_num]; // // // print " n"; $fkhxmnum=0; $fsfzhnum=0; $fyddhnum=0; $ftxdznum=0; $femailnum=0; $flxdhnum=0; $fkhahnum=0; $fbzxxnum=0; for( $j=0; $j//print " "; //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"; if(isset($ws['cell'][$i]) && is_array($ws['cell'][$i]) ) { if ($fkhxmnum!=0&&$ftxdznum!=) 0&&($fyddhnum!=0||$flxdhnum!=0))//请在这里指定必須不空字節 { $sql="k_qlkhxx(fkhxm,fsfzh,fyddh, ftxdz,femail,flxdh,$fkhah,fbzxx,fglry,fglryxm,fdjry,ffzdm)values('".uc2html($exc->sst['data'][$ws['cell'][$i][ $fkhxmnum]['data']])."','".$exc->sst['data'][$ws['cell'][$i][$fsfzhnum]['data']] ."','".$exc->sst['data'][$ws['cell'][$i][$fyddhnum]['data']]."','".uc2html($ exc->sst['data'][$ws['cell'][$i][$ftxdznum]['data']])."','".uc2html($exc->sst[' data'][$ws['cell'][$i][$femailnum]['data']])."','".$exc->sst['data'][$ws['cell '][$i][$flxdhnum]['data']]."','".uc2html($exc->sst['data'][$ws['cell'][$i][$ fkhahnum]['data']])."','".uc2html($exc->sst['data'][$ws['cell'][$i][$fbzxxnum]['data'] ])."','".$_SESSION["uyhmc"]."','".$_SESSION["uyhxm"]."','".$_SESSION["uyhmc"]."','" .$_SESSION["ubm"]."')"; echo($sql." "); } //$conn->Query($sql); } } } //导入完了删除文件 unlink($filename); } 你注意没有、我握执行的那一行注释掉的、只要去掉注释就可以正确执行了! 使用の代暗号打包ダウンロードhttp://xiazai.jb51.net/201002/yuanma/php_excel_mysql.rar
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
2024-10-22 09:46:29
2024-10-13 13:53:41
2024-10-12 12:15:51
2024-10-11 22:47:31
2024-10-11 19:36:51
2024-10-11 15:50:41
2024-10-11 15:07:41
2024-10-11 14:21:21
2024-10-11 12:59:11
2024-10-11 12:17:31