PHPEcel 簡單使用

關于phpexcel 的簡單使用 整理經常用的幾個方法

后臺數據有時候需要導出成excel 公司對賬或者統(tǒng)計用, 這時候后臺操作就需要對數據進行導出功能, 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;

    /** 循環(huán)讀取每個單元格的內容霹肝。 列從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 我之前下過一版并不能使用這個方法, 如遇到問題可聯(lián)系我)

平時我就用這幾個方法就夠用了, 分享一下方便大家使用.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末妄田,一起剝皮案震驚了整個濱河市锡凝,隨后出現的幾起案子扒怖,更是在濱河造成了極大的恐慌甜熔,老刑警劉巖仑撞,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件只搁,死亡現場離奇詭異音比,居然都是意外死亡,警方通過查閱死者的電腦和手機氢惋,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門洞翩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人焰望,你說我怎么就攤上這事骚亿。” “怎么了熊赖?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵来屠,是天一觀的道長。 經常有香客問我震鹉,道長俱笛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任传趾,我火速辦了婚禮迎膜,結果婚禮上,老公的妹妹穿的比我還像新娘浆兰。我一直安慰自己磕仅,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布镊讼。 她就那樣靜靜地躺著宽涌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝶棋。 梳的紋絲不亂的頭發(fā)上卸亮,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音玩裙,去河邊找鬼兼贸。 笑死,一個胖子當著我的面吹牛吃溅,可吹牛的內容都是我干的溶诞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼决侈,長吁一口氣:“原來是場噩夢啊……” “哼螺垢!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤枉圃,失蹤者是張志新(化名)和其女友劉穎功茴,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體孽亲,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡坎穿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了返劲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玲昧。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖篮绿,靈堂內的尸體忽然破棺而出瓦盛,到底是詐尸還是另有隱情七冲,我是刑警寧澤篓吁,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布滑臊,位于F島的核電站,受9級特大地震影響弃榨,放射性物質發(fā)生泄漏菩收。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一鲸睛、第九天 我趴在偏房一處隱蔽的房頂上張望娜饵。 院中可真熱鬧,春花似錦官辈、人聲如沸箱舞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晴股。三九已至,卻和暖如春肺魁,著一層夾襖步出監(jiān)牢的瞬間电湘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工鹅经, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寂呛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓瘾晃,卻偏偏與公主長得像贷痪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹦误,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,095評論 25 707
  • 發(fā)現 關注 消息 iOS 第三方庫劫拢、插件肉津、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,098評論 4 62
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現舱沧,斷路器阀圾,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 一、引言 最近幾年狗唉,隨著“互聯(lián)網+”概念的興起,越來越多的企業(yè)開始涉足互聯(lián)網涡真,運用互聯(lián)網工具幫助自身轉型升級分俯,提高...
    唐大虞閱讀 13,930評論 0 5
  • 人與人之間的差異,其實很簡單:你在賴床哆料,他在鍛煉缸剪,所以他比你健康;你在應付上班东亦,他在用心工作杏节,所以他成了你的領導;...
    小鹿says閱讀 162評論 0 0