PHPExcel 导入导出

原创
2016-06-07 11:36:06 775浏览
大家帮忙优化下吧

getletter方法是把数组的索引转成excel的表头
// 数字转字母
function getLetter($num) {
$str = "$num";
$num = intval($num);
if ($num <= 26){
$ret = chr(ord('A') + intval($str) - 1);
} else {
$first_str = chr(ord('A') + intval(floor($num / 26)) - 1);
$second_str = chr(ord('A') + intval($num % 26) - 1);
if ($num % 26 == 0){
$first_str = chr(ord('A') + intval(floor($num / 26)) - 2);
$second_str = chr(ord('A') + intval($num % 26) + 25);
}
$ret = $first_str.$second_str;
}
return $ret;
}

// excel 导入
/**
* 导入excel到数据库
* @param string $db 数据库表名
* @param path string 文件名(路径)
* @return boolean
*/
function excelImport($db, $file) {
import("Org.Util.PHPExcel");
$PHPExcel = new PHPExcel();

$PHPReader = new \PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($file)) {
$PHPReader = new \PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($file)){
return false;
}
}

$E = $PHPReader->load($file);
$cur = $E->getSheet(0); // 读取第一个表
$end = $cur->getHighestColumn(); // 获得最大的列数
$line = $cur->getHighestRow(); // 获得最大总行数
// 获取数据数组
$info = array();
for ($row = 1; $row <= $line; $row ++) {
for ($column = 'A'; $column <= $end; $column ++) {
$val = $cur->getCellByColumnAndRow(ord($column) - 65, $row)->getValue();
$info[$row][] = $val;
}
}

$DB = M($db);
$data = array();
for ($i = 2; $i <= count($info); $i ++) {
for ($j = 0; $j < count($info[$i]); $j ++) {
for ($k = 0; $k < count($info[1]); $k ++) {
$data[$i][$info[1][$k]] = $info[$i][$k];
}
}
}
$datalist = array_values($data);
$result = $DB->addAll($datalist);
// echo $DB->getLastSql();exit;
if ($result) {
return true;
}
return false;
}

// 导出excel
/**
* 导出excel方法
* @param array $data 需要导出的数据
* @param array $title excel表头
* @param string $name 导出后的文件名
*/
function excelExport ($data, $title=null, $name=null) {
import("Org.Util.PHPExcel");
$PHPExcel = new PHPExcel();

if(!is_null($title)){
array_unshift($data, $title);
}

if(is_null($name)){
$name = time();
}

foreach ($data as $k => $v) {
for ($i = 1; $i <= count($v); $i++){
$tr = getLetter($i).($k+1);
if ($value == null) {
$value = '';
}
$buffer[$tr]=array_values($v)[$i-1];
$PHPExcel->getActiveSheet()->setCellValue($tr, array_values($v)[$i-1]);
}
}

$PHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $name . '.xls"'); //文件名称
header('Cache-Control: max-age=0');
$result = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel2007');
$result->save('php://output');
}

AD:真正免费,域名+虚机+企业邮箱=0元

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。