ホームページ >php教程 >php手册 >Linux で Excel データを mssql データベースにインポートする方法

Linux で Excel データを mssql データベースにインポートする方法

WBOY
WBOYオリジナル
2016-06-13 12:19:231035ブラウズ

まずアイデアを整理しましょう~~
最初: ファイルをサーバーにアップロードします
次に: 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' アクション='' メソッド='ポスト'>















脚;
/*
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($w​​s) &&
isset($ws['max_row']) && isset($ws['max_col']) ) {
echo "n

データ型説明
  空のセル
ABCabcString
12345整数
123.45Float
123.45日付
n";

print "n ";
for( $j=0; $jprint ""

print " ";
for( $j=0; $jprint "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 "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 "
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."
");
}
//$conn->Query($sql);
}
}
}
//导入完了删除文件
unlink($filename);

}


你注意没有、我握执行的那一行注释掉的、只要去掉注释就可以正确执行了!
使用の代暗号打包ダウンロードhttp://xiazai.jb51.net/201002/yuanma/php_excel_mysql.rar
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)."$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 "
";
//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)."
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。