代码如下:
<?php include("conn.php"); include_once './Classes/PHPExcel.php';
include_once './Classes/PHPExcel/IOFactory.php';
include_once './Classes/PHPExcel/Reader/Excel5.php'; //输出上传文件的信息
echo "文件名: " . $_FILES["file"]["name"] . "<br />";
echo "类型: " . $_FILES["file"]["type"] . "<br />";
echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "缓存路径: " . $_FILES["file"]["tmp_name"]. " <br />";
echo "是否出错: ". $_FILES["file"]["error"]. " <br />"; //判断上传格式是否正确
if($_FILES["file"]["type"] != 'application/kset' && $_FILES["file"]["type"] != 'application/vnd.ms-excel' && $_FILES["file"]["type"] != 'application/octet-stream'){
echo "Error: 上传文件格式不正确!";
exit;
}
//将文件移动到指定文件夹
if(!move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/".$_FILES["file"]["name"])){
echo "Error: 将文件移动到指定文件夹时失败!";
exit;
}
$filename = "uploads/".$_FILES["file"]["name"];
$objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
//这里有问题
$objPHPExcel = $objReader->load($filename); //$filename可以是上传的文件,或者是指定的文件
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$sheetData = $objPHPExcel->getSheet(0)->toArray(null,true,true,true); echo iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("A1")->getValue())."<br />";
//var_dump($sheetData);
//插入数据库
for($key=2;$key<=$highestRow;$key++){
if($objPHPExcel->getActiveSheet()->getCell("A".$key)->getValue() != NULL){
$value = array();
for($clm='A'; $clm<='R'; $clm++){
$clm_val = iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("$clm$key")->getValue());
if($clm_val == NULL){ $clm_val = " ";}
array_push($value,$clm_val);
}
$sql = "insert into disaster_sites values ('". implode ("','",$value) . "')";
//echo $sql;
mssql_query($sql,$conn);
}
}
//生成测试txt文件
// $test= '1:'.$highestRow.'______2:'.$highestColumn;
// $file_pointer = fopen("aaa.txt","a+");
// fwrite($file_pointer,$test);
// fclose($file_pointer);?>页面显示如下图:如果将$objPHPExcel = $objReader->load($filename); 及以后语句注释则可以访问页面并输出上传文件信息
<?php include("conn.php"); include_once './Classes/PHPExcel.php';
include_once './Classes/PHPExcel/IOFactory.php';
include_once './Classes/PHPExcel/Reader/Excel5.php'; //输出上传文件的信息
echo "文件名: " . $_FILES["file"]["name"] . "<br />";
echo "类型: " . $_FILES["file"]["type"] . "<br />";
echo "大小: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "缓存路径: " . $_FILES["file"]["tmp_name"]. " <br />";
echo "是否出错: ". $_FILES["file"]["error"]. " <br />"; //判断上传格式是否正确
if($_FILES["file"]["type"] != 'application/kset' && $_FILES["file"]["type"] != 'application/vnd.ms-excel' && $_FILES["file"]["type"] != 'application/octet-stream'){
echo "Error: 上传文件格式不正确!";
exit;
}
//将文件移动到指定文件夹
if(!move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/".$_FILES["file"]["name"])){
echo "Error: 将文件移动到指定文件夹时失败!";
exit;
}
$filename = "uploads/".$_FILES["file"]["name"];
$objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
//这里有问题
$objPHPExcel = $objReader->load($filename); //$filename可以是上传的文件,或者是指定的文件
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow(); // 取得总行数
$sheetData = $objPHPExcel->getSheet(0)->toArray(null,true,true,true); echo iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("A1")->getValue())."<br />";
//var_dump($sheetData);
//插入数据库
for($key=2;$key<=$highestRow;$key++){
if($objPHPExcel->getActiveSheet()->getCell("A".$key)->getValue() != NULL){
$value = array();
for($clm='A'; $clm<='R'; $clm++){
$clm_val = iconv('utf-8','gbk',$objPHPExcel->getActiveSheet()->getCell("$clm$key")->getValue());
if($clm_val == NULL){ $clm_val = " ";}
array_push($value,$clm_val);
}
$sql = "insert into disaster_sites values ('". implode ("','",$value) . "')";
//echo $sql;
mssql_query($sql,$conn);
}
}
//生成测试txt文件
// $test= '1:'.$highestRow.'______2:'.$highestColumn;
// $file_pointer = fopen("aaa.txt","a+");
// fwrite($file_pointer,$test);
// fclose($file_pointer);?>页面显示如下图:如果将$objPHPExcel = $objReader->load($filename); 及以后语句注释则可以访问页面并输出上传文件信息
检查输出的指令条数是否有误差另外,你是直接将读取的数据入库的
没考虑到读取的数据中也可能有特殊字符”'“
因为页面无法连接,看不到echo $sql;的输出。
我在 $objPHPExcel = $objReader->load($filename);之前添加一个exit;页面可以正常访问;
在$objPHPExcel = $objReader->load($filename);之后添加一个exit;页面就无法连接了。
这是不是就可以确定是这条语句出错了。
那么你怎么说”即使无法显示网页,但插入数据库的操作已经完成了“(#2)
如果前后都不加exit,它可以把数据插入数据库。但就是显示为图片中那个页面。
导入文件有什么错呢
难道跟我用的是金山WPS有关?
那个文件中有好多空行,不知道这条语句有没有把空行忽略,
if($objPHPExcel->getActiveSheet()->getCell("A".$key)->getValue() != NULL)
反正在数据库中插入的是有数据的那几行。
矛盾吗?
如果 $objReader->load($filename) 会出错的话,那么你的数据有如何能插入的呢?建议你打开 php 的错误显示功能
求解如何搞定。。
header("Location:../experience.php?file=".$_FILES["file"]["name"]); exit;
这里我的experience.php文件在upload_file.php上一级文件夹里,后面加那段是我在experience.php里加了一段对$_GET['file']的验证,这样上传后会有提示,以免多次上传:
<?php
if (isset($_GET['file'])){
echo '<script type="text/javascript">
alert("成功导入'.$_GET['file'].'");
</script> ';
}
?>
给各位做个参考吧,希望大神出来解答出现之前那个问题的原因~
路径转换为真实的路径,不要相对,尝试一下。
http://blog.micsite.net/2014/10/21/254.html
你可以百度一下 “phpexcel load 连接被重置”后来我测试在代码后面加了 die(); 就解决原因是用到 PHPExcel_IOFactory::load() 时会 不停的向本页跳转
增加$objPHPExcel = new PHPExcel()
在
$objPHPExcel = $objReader->load($uploadfile);
前加上
$objPHPExcel = new PHPExcel();
就OK了,看来大家都在用网上找的导入excel的例子。
谢谢大家的回答啊
The filename D:\wamp\xampp\tmp\phpEAB3.tmp is not recognised as an OLE file
请问怎么解决呀!!!!!!!!!!!!!
执行到$objPHPExcel = $objReader->load($uploadfile);就不行了,有人解决了没啊
1.本来导出后缀名为xlsx,被改为xls;导入时将test.xls 改为test.xlsx 之后,好了。
2.
//创建新的PHPExcel对象
$objReader = PHPExcel_IOFactory::createReader('EXCEL2007' );
$objReader->setReadDataOnly (true );
$objPHPExcel = $objReader->load('./upfile/test.xlsx');
试试