PHPExcel的一些小tips

前言

用了PHPExcel有大半年了,这里是关于PHPEXCEL的一些小心得、踩过的坑

1、导出的Excel内容缺失或打开时报“部分内容有问题,是否让我们尽量尝试恢复”

两种可能:
1、脚本申请的内存不足,可以使用

ini_set('memory_limit', '256M'); //升级为256M内存

2、导出的数据中可能含有phpexcel中无法识别的编码

//直接过滤一遍即可
foreach ($row as $k => $v) {
        $row[$k] = iconv('gb2312', 'utf-8//IGNORE', iconv('utf-8', 'gb2312//IGNORE', $v));
}

2、如果字符串中有“=”符号,PHPEXCEL将会报错

可以选择用str_replace()为等号加上双引号来避免错误,或者直接去掉等号

str_replace('=', "'='", $tongyi_url)

3、需要Z以上的列数(AA-ZZ)

private function chrNext(&$a)
    {
        $strList = preg_split("//u", $a, -1, PREG_SPLIT_NO_EMPTY);
        if ($strList[count($strList) - 1] == 'Z') {
            $str = '';
            foreach ($strList as $key => $value) {
                if ($key != count($strList) - 1)
                    $str .= $value;
            }
            if ($str == '') {
                $str = chr(ord('A') - 1);
            }
            $str = $this->chrNext($str) . 'A';
        } else {
            $strList[count($strList) - 1] = chr(ord($strList[count($strList) - 1]) + 1);
            $str = implode('', $strList);
        }
        $a = $str;
        return $a;
    }

4、两种保存方式

a.本地保存

$objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel5');
$objWriter->save($filename);

b.浏览器直接输出(在导出大量数据时为避免超时则需要在服务器配置文件中设置超时时间)

browser_export('Excel5', $customer_name . '_' . date('Y-m-d_H-i-s') . '_database');
PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5')->save('php://output');
exit;
/**
 * 在浏览器导出Excel
 * @param $type
 * @param $file_name
 */
private function browser_export($type, $file_name)
{
	switch ($type) {
	    case 'Excel5':
	        header('Content-Type: application/vnd.ms-excel');//告诉浏览器将输出excel2003文件
	        header('Content-Disposition: attachment;filename="' . $file_name . '.xls"');//告诉浏览器将输出文件的名称
	        break;
	    case 'Excel2007':
	        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器将输出excel2007文件
	        header('Content-Disposition: attachment;filename="' . $file_name . '.xlsx"');//告诉浏览器将输出文件的名称
	        break;
	    default:
	        header('Content-Type: application/vnd.ms-excel');//告诉浏览器将输出excel2003文件
	        header('Content-Disposition: attachment;filename="' . $file_name . '.xls"');//告诉浏览器将输出文件的名称
	}
	header('Cache-Control: max-age=0');//禁止缓存
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccheers_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值