Linux_PHP チュートリアルで Excel データを mssql データベースにインポートする方法

WBOY
リリース: 2016-07-21 15:41:23
オリジナル
941 人が閲覧しました

まずはアイデアを整理しましょう~~
最初: ファイルをサーバーにアップロードします
次に: Excel データ列を読み取って表示します
次に: ユーザーにフィールドの対応関係を選択させます
次に: データを送信して読み取りますフィールドの対応関係
最後に: データをバッチでインポートし、一時ファイルを削除します
上記の合計 5 つのステップを段階的に分析しましょう~~~
ステップ 1: 添付ファイルの phpexcelparser4.rar をダウンロードします。 Excel サーバーにアップロードされ、Web フォームに表示されます。これは通常は問題ありません。問題は、プログラムがテーブルを実際に保存せずに一時テーブルとして保存することです。そのため、まずプログラム コードを

Copy に変更します。コード コードは次のとおりです:

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=$アップロードサーバー名;
//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['スタイル'];
if( $style == 'old' )
{
$fh = @fopen ($excel_file,'rb');
if( !$fh ) Fatal("ファイルがアップロードされていません");
if( filesize($excel_file)==0 ) Fatal("ファイルがアップロードされていません");
$fc = fread( $fh, ファイルサイズ($excel_file) );
@fclose($fh);
if( strlen($fc) < filesize($excel_file) )
fatal("ファイルを読み取れません");
$time_start = getmicrotime();
$res = $exc->ParseFromString($fc);
$time_end = getmicrotime();
}
elseif( $style == 'セグメント' )
{
$time_start = getmicrotime();
$res = $exc->ParseFromFile($excel_file);
$time_end = getmicrotime();
}

switch ($res) {
case 0: ブレーク;
ケース 1: 致命的(「ファイルを開けません」);
ケース 2: Fatal("ファイルが小さすぎて Excel ファイルになりません");
ケース 3: 致命的("ファイル ヘッダーの読み取りエラー");
ケース 4: 致命的("ファイル読み取りエラー");
ケース 5: Fatal("これは Excel ファイルではありません、または Excel 5.0 未満に保存されたファイルではありません");
ケース 6: 致命的(「ファイルが破損しています」);
ケース 7: 致命的("ファイル内に Excel データが見つかりません");
ケース 8: 致命的("サポートされていないファイル バージョン");

デフォルト:
fatal("不明なエラー");
}

/*
print '
'; <br>print_r( $exc ); <br>print '
';
終了;
*/

show_time();

エコー <<凡例:


<フォーム名='doform' アクション='' メソッド='ポスト'>

<入力タイプ='非表示' 名前='excel_file' 値=$excel_file>


データ型説明
 空のセル
ABCabcString
12345整数
123.45Float
123.45日付
<テーブル>




脚;
/*
print "
"; <br>print_r ($exc->ワークシート); <br>print_r($exc->sst); <br>print "
";
*/
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] ;

if( is_array($w​​s) &&
isset($ws['max_row']) && isset($ws['max_col']) ) {
echo "n

<表の境界線=1 セルスペース=0 セルパディング=2>n";

print " n";
for( $j=0; $j<=$ws['max_col' ]; $j++ ) {
print " ";
if( $j>25 ) print chr((int)($j/26)+64);データを表示するリスト
//循環データであることに注意してください

echo("n");
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
{
$shownum=$ws['max_row'];//最初の 10 個のデータのみを出力します
}
for( $i=0; $i<= $shownum; $i++ ) {
print "".($i+1)."n"; ][$i]) && is_array($w​​s['cell'][$i]) ) {
for( $j=0; $j<=$ws['max_col']; $j++ ) {

if ( ( is_array($w​​s['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;
// 整数
case 1:
print "dt_int"" .$style "> ";
print $data['data'];
// 浮動小数点数
case 2:
print "dt_float"".$style.">
echo $data ['data' ];
break;
// 日付
case 3:
print "dt_date"".$style."> ";

$ret = $data[data];//str_replace ( " 00:00:00" , "", gmdate("d-m-Y H:i:s",$exc->xls2tstamp($data[data])) );
echo ( $ret ) );
default:
print "dt_unknown"" .$style."> ";
break;
print "n";
print "n" ; }
} else {
// 空の行を出力します
for( $j=0; $j<=$ws['max_col']; $j++ )
print " < ;/td> ";
print "n";
}
print "n";
}

echo "
n";
} else {
// 空のワークシート
print " - 空
n";
}
print "
";

}
echo("");
echo("");
/* print "フォーマット
";
foreach($exc->format as $value) {
printf( "( %x )",array_search($value,$exc->format));
print htmlentities($value,ENT_QUOTES);
print "
"

print " Xfs & lt; br & gt; ";
For ($ i = 0; $ i & lt; count ($ exc- & gt; xf ['format']);
printf (" フォーマット (%x) フォント (%x)" ,$exc->xf['format'][$i],$exc->xf['font'][$i]);

print "
"
*/



操作の結果は次のとおりです:

2番目のステップはデータを読み取ることです。コードは次のとおりです:
コードをコピーします コードは次のとおりです:

if ($_POST[" action"]=="do")
{
//データの処理
//最初にヘッダーレコードを読み取ります
$excel_file=$_POST["excel_file"];
$fh = @fopen ($excel_file,'rb') ;
$fc = fread( $ fh, filesize($excel_file) );
//echo("execute".$excel_file); , 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();
ケース 0: ブレーク;ファイルを開けません");
ケース 2: 致命的("Excel ファイルとしては小さすぎるファイル");
ケース 3: 致命的("ファイル ヘッダーの読み取りエラー");
ケース 4: 致命的("ファイルの読み取りエラー");
ケース 5: 致命的 ("これは Excel ファイルまたは Excel 5.0 未満に保存されたファイルではありません");
ケース 6: 致命的("ファイルが破損しています");
ケース 7: 致命的("Excel データが見つかりませんin file");
case 8 : Fatal("Unsupported file version");

default:
fatal("Unknown error");
}
//読み取りが完了した後、エラーがなければループできます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"; 0;
$ftxdznum=0;
$fkhahnum=0;
$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; j;
if ($tmpcolum== "femail") $femailnum=$j;
if ($tmpcolum=="fkhah") $fkhahnum= $j;
if ($tmpcolum= ="fbzxx") $fbzxxnum=$j;
}
for( $i=0; $i//$ fkhxm=
//echo($fkhxmnum .$fsfzhnum.$fyddhnum.$ftxdznum.$femailnum.$flxdhnum.$fkhahnum.$fbzxxnum);
//print "". ($i+1)."n";
if(isset($ws['cell'][$i]) && is_array($w​​s['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."
");
}
}
}
//インポート後にファイルを削除
unlink($filename)

;
実行行をコメントアウトしていることに気づきましたか?コメントを削除すれば正しく実行できます。
使用したコードは http://xiazai.jb51.net/201002/yuanma からダウンロードできます。 /php_excel_mysql.rar

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/321150.html技術記事まずアイデアを明確にしましょう。~~ まず、ファイルをサーバーにアップロードする必要があります。次に、Excel データ列を読み取って表示し、次に、ユーザーにフィールドの対応関係を選択させ、次に、データを送信します。 、文字を読んでください...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート