您的位置:首页 > 编程语言 > PHP开发

PHP学习第N天:用PHPExcel将Excel转化为数组输出

2014-09-06 01:08 295 查看
这些文章都是用来记录php学习经历的,会有很多bug和错误,参考需谨慎。

工作第N天,再过两天就该发工资了,激动一下!

利用PHPExcel将读取和导出Excel文件非常方便,但是初次使用会有很多各种各样的小问题,我将这两天遇到的问题和解决方法整理了一下,希望能够对大家有所帮助。

在整理过程中我参考和使用了大量的互联网上的资料和代码。包括但不仅于下面这些,在这里对各位大牛表示感谢。

PHPExcel下载链接

http://blog.csdn.net/yanhui_wei/article/details/7930502

/article/4973162.html

/article/5594157.html

/article/5017718.html

前端页面代码:

<html>
<body>

<form action="action.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/>
<br/>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>


Excel2arr:

<?php
/**
* 符合条件的文件格式
*/
$filename = $_FILES['file']['name'];
/**
* 文件名
*/
$ext = preg_split("/\./", $filename);
/**
* 分割文件名
*/
$ext = strtolower($ext[1]);
/*
* 获取文件后缀名
*/
$allowed_types = array("xls", "xlsx");
$filePath = dirname(__FILE__) . "/" . $_FILES["file"]["name"];

if (!in_array($ext, $allowed_types)) {
echo "File type is wrong!";
die;
} else if (file_exists($filePath)) {
echo "A file with this name already exists!";
die;
} else {
move_uploaded_file($_FILES["file"]["tmp_name"], $filePath);
}
/**
* @param $val
* @return string
* 检查文件名是否符合要求,如果符合,就保存到指定路径。如果不符合,报错。
*/
require_once dirname(__FILE__) . "/PHPExcel/Classes/PHPExcel.php";
//$filePath=$_FILES["file"]["tmp_name"];
//sleep(50);
$PHPExcel = new PHPExcel();
//默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
$PHPReader = new PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($filePath)) {
$PHPReader = new PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($filePath)) {
return $this->error(null, "no file");
}
}
$PHPExcel = $PHPReader->load($filePath);
$sheetCount = $PHPExcel->getSheetCount();
$sheetNames = $PHPExcel->getSheetNames();
//var_dump($sheetNames);
//die;
/**读取excel文件中有多少个sheet*/
$objExcel = array();
for ($SheetID = 0; $SheetID < $sheetCount; $SheetID++) {
/**读取excel文件中的工作表*/
$name = $sheetNames[$SheetID];
$currentSheet = $PHPExcel->getSheetByName($name);
$name = iconv("utf-8", "gb2312", $name);
/**取得最大的列号*/
$allColumn = $currentSheet->getHighestColumn();
/**取得一共有多少行*/
$allRow = $currentSheet->getHighestRow();
for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
/**从第A列开始输出*/
for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
$val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65, $currentRow)->getValue();
$val = iconv("utf-8", "gb2312", $val);
$objExcel[$name][$currentRow - 1][ord($currentColumn) - 65] = $val;
//编码需要转换成gb2312
/*
$val = urlencode($val);
$objExcel[$name][$currentRow - 1][ord($currentColumn) - 65] = urldecode($val);
*/
}
}
}

unlink($filePath);
/*
* $objExcel = json_encode($objExcel);
* $objExcel = urldecode($objExcel);
* 读取文件中的内容,因为json_encode()的参数必须是utf-8编码。为了保证汉字输出的结果,这里先将数组中的内容用urlencode进行编码,
* 在被json_encode()编码之后,再用urldecode解码。
*/
//return $objExcel;
var_dump($objExcel);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: