PHPEcel 简单使用

关于phpexcel 的简单使用 整理经常用的几个方法

后台数据有时候需要导出成excel 公司对账或者统计用, 这时候后台操作就需要对数据进行导出功能, php用到的就是phpexcel这个三方类库了, 不过这个对服务器要求比较高, 大批量数据处理需要多方面处理.

  1. 第一步先下载phpexcel 三方库

  2. 这里直接上代码, 只是简单的几个使用情况, 自己根据情况修改吧, 百度phpexce使用很多. 代码如下

include "PHPExcel.php";

/**
 * 文件路径读取Excel模板
 * @param string $path
 * @return object
 */
function getExcelObjectByPath($path)
{
    if(empty($path) or !file_exists($path)){

        die('file not exists');

    }

    $PHPReader = new PHPExcel_Reader_Excel2007();

    if(!$PHPReader->canRead($path)){
        $PHPReader = new PHPExcel_Reader_Excel5();

        if(!$PHPReader->canRead($path)){
            echo 'no Excel';

            return ;
        }
    }
    $PHPExcel = $PHPReader->load($path);

    return $PHPExcel;
}

读取本地excel文件转换成excel对象返回

/**
 * PHPExcel转换为数组
 * @param object $PHPExcel
 * @param int $startRow
 * @param int $endRow
 * @param int $sheet
 * @return array
 */
function excelToData($PHPExcel, $startRow = 1,  $endRow = 0, $sheet = 0)
{
    /** 读取excel文件中的指定工作表 */
    $currentSheet = $PHPExcel->getSheet($sheet);

    /** 取得最大的列号 */
    $maxColumn = $currentSheet->getHighestColumn();

    /** 取得一共有多少行 */
    $maxRow = $currentSheet->getHighestRow() - $endRow;

    $data = array();

    $rowIndex = $startRow;

    /** 循环读取每个单元格的内容。 列从A开始 */
    for ($rowIndex; $rowIndex <= $maxRow; $rowIndex++)
    {
        $data_row = array();
        for($colIndex ='A'; $colIndex <= $maxColumn; $colIndex++)
        {

            $addr = $colIndex.$rowIndex;
            $cell = $currentSheet->getCell($addr)->getValue();
            if($cell instanceof PHPExcel_RichText)
            {
                /** 富文本转换字符串 */
                $cell = $cell->__toString();
            }

            /** 判断单元格内容是否为公式 */
            $cell_one = substr($cell, 0, 1);

            if($cell_one == '=')
            {
                /** 取公式计算后的结果 */
                $value = $currentSheet->getCell($addr)->getFormattedValue();
                $cell = $value;
            }


            $data_row[] = $cell;



        }

        $data[] = $data_row;

    }


    return $data;
}

/**
 * PHPExcel生成并添加内容
 * @param array $content
 * @param array $title
 * @param int $startRow
 * @param int $sheet
 * @param int $type
 * @return object
 */
function importDataForObj($content = array(), $title = array(), $startRow = 1, $sheet = 0, $type = 2007){


    $PHPExcel = new PHPExcel();

    /** 07版参数设置 */
    if ($type == 2007)
    {
        $PHPExcel->getProperties()->setCreator("ctos")
            ->setLastModifiedBy("ctos")
            ->setTitle("Office 2007 XLSX Test Document")
            ->setSubject("Office 2007 XLSX Test Document")
            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
            ->setKeywords("office 2007 openxml php")
            ->setCategory("Test result file");
    }


    /** 读取excel文件中的指定工作表 */
    $currentSheet = $PHPExcel->getSheet($sheet);

    /** 设置工作薄名称 */
    $currentSheet->setTitle(iconv('gbk', 'utf-8', 'test'));
    /** 设置插入起始行数, 这里用获取的行数计算。可以自行根据模板进行设置固定数值 */

    $startColumn = "A";
    if (!empty($title))
    {
        foreach ($title as $item)
        {
            /** 设置宽cell宽 */
            $currentSheet->getColumnDimension($startColumn)->setWidth(18);
            /** 对齐方式 */
            $currentSheet->getStyle($startColumn)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
            /** 为标题赋值 */
            $currentSheet->setCellValue($startColumn . "1", $item);
            $startColumn++;
        }

        $startRow++;
    }

    $i = $startRow;
    /** 写入数据 */
    foreach($content as $data)
    {
        $startColumn = 'A';
        foreach($data as $value)
        {
            /** excel科学计数很烦 这里举例简单实用解决方式 拼接空字符串 */
            if($startColumn == 'A')
            {
                $currentSheet->setCellValue($startColumn . $i, " ".$value);

            } else
            {
                $currentSheet->setCellValue($startColumn . $i, $value);
            }


            $startColumn++;

        }

        $i++;

    }

    return $PHPExcel;

}


/**
 * PHPExcel转换为数组
 * @param object $PHPExcel
 * @param string $filename
 * @param string $ex
 */

function download($PHPExcel,  $filename = 'HelloWord', $ex = '2007')
{
    ob_end_clean();

    /** 导出excel2007文档*/
    if($ex == '2007') {
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;

        /** 导出excel2003文档 */
    } else if ($ex == '2005'){

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;

    } else if ($ex == 'pdf')
    {

        header('Content-Type: application/pdf');
        header('Content-Disposition: attachment;filename="'.$filename.'.pdf"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'PDF');
        $objWriter->setFont('arialunicid0-chinese-simplified');
        $objWriter->save('php://output');
        exit;

    } else if ($ex == 'csv')
    {

        header("Content-type:text/csv");
        header("Content-Disposition:attachment;filename=".$filename.'.csv');
        header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
        header('Expires:0');
        header('Pragma:public');
        $objWriter = PHPExcel_IOFactory::createWriter($PHPExcel, 'CSV');
        $objWriter->setFont('arialunicid0-chinese-simplified');
        $objWriter->save('php://output');
        exit;
    }


}
image.png

需要说明一下 这里赋值拼接一个空字符串" "解决excel科学计数问题简单实用

image.png

这个方法是解决excel内存在公式问题

image.png

这个把excel转换成pdf 样式很逗(phpexcel 我之前下过一版并不能使用这个方法, 如遇到问题可联系我)

平时我就用这几个方法就够用了, 分享一下方便大家使用.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,837评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,066评论 4 62
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 一、引言 最近几年,随着“互联网+”概念的兴起,越来越多的企业开始涉足互联网,运用互联网工具帮助自身转型升级,提高...
    唐大虞阅读 13,894评论 0 5
  • 人与人之间的差异,其实很简单:你在赖床,他在锻炼,所以他比你健康;你在应付上班,他在用心工作,所以他成了你的领导;...
    小鹿says阅读 161评论 0 0