国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php通用的excel導(dǎo)出方法

dendoink / 2402人閱讀

摘要:一普遍導(dǎo)出方法在或是系統(tǒng)中導(dǎo)出是常有的事,做過(guò)的此功能人都知道,其主要操作其實(shí)是循環(huán)數(shù)據(jù)列表,然后一格一格地添加數(shù)據(jù)到固定的單元格中。

一.普遍導(dǎo)出方法

在crm或是oa系統(tǒng)中導(dǎo)出excel是常有的事,做過(guò)的此功能人都知道,其主要操作其實(shí)是循環(huán)數(shù)據(jù)列表,然后一格一格地添加數(shù)據(jù)到固定的單元格中。只要做好了一次,其后只要復(fù)制相關(guān)代碼修改修改,其他地方導(dǎo)出功能也就完成了。

但是這樣會(huì)有兩個(gè)問(wèn)題:
1.當(dāng)列表數(shù)據(jù)字段修改時(shí),需要修改大量的代碼,維護(hù)艱難,改著難受;
2.多次出現(xiàn)導(dǎo)出功能時(shí),需要在多個(gè)地方復(fù)制大量的重復(fù)冗余代碼,看著難受;

因此,有必要統(tǒng)一一個(gè)導(dǎo)出excel的方法,使用時(shí),只需要傳入數(shù)據(jù)的表頭,表頭字段名,數(shù)據(jù)列表,以及數(shù)據(jù)表名稱,就能導(dǎo)出excel了。

二.使用通用的導(dǎo)出方法

如下圖所示,只要傳入4個(gè)參數(shù),就能完成導(dǎo)出,使用和維護(hù)就變得簡(jiǎn)單多了。

好的,目標(biāo)已經(jīng)明確了,接下來(lái)就是代碼實(shí)現(xiàn)了。

顯然,要實(shí)現(xiàn)此功能,最大的一個(gè)難題是,根據(jù)單條數(shù)據(jù)的索引和表頭字段次序,自動(dòng)計(jì)算出每條數(shù)據(jù)中的每個(gè)字段在excel中的坐標(biāo)值(如A1,B3)。

那么我們就來(lái)分析下excel的單元格坐標(biāo)吧,從A1開始,縱向遞增數(shù)字的值,橫向遞增字母,當(dāng)橫向字母變?yōu)閆后,下一個(gè)字母為AA,然后AB,...,ZZ,...,AAA...

這樣的話,我們就知道了,縱向坐標(biāo)簡(jiǎn)單,根據(jù)每條數(shù)據(jù)的索引值就可以計(jì)算得出,難的是橫向坐標(biāo),該怎么計(jì)算?再仔細(xì)分析下橫向坐標(biāo),可以發(fā)現(xiàn)是一種類似26進(jìn)制的字母數(shù)字,A如果看作0,那Z表示25。但是這種數(shù)字與我們常見(jiàn)的16進(jìn)制,8進(jìn)制等又不太一樣,因?yàn)楫?dāng)Z進(jìn)位的時(shí)候,下一個(gè)數(shù)不是BA,而是AA。常見(jiàn)的進(jìn)制中,如十進(jìn)制9進(jìn)位,變成10,而不是00;16進(jìn)制0xF進(jìn)位,變?yōu)?x10,而不是0x00。

因此可以參考進(jìn)制轉(zhuǎn)換的算法,然后變化一下,得出計(jì)算excel的橫向坐標(biāo)的方法(10進(jìn)制轉(zhuǎn)偽26進(jìn)制):

//AAA轉(zhuǎn)換
public static function toAAA($dec)
{
    if ($dec < 0) return "";
    $y = $dec % 26;
    $x = floor($dec / 26);
    return self::toAAA($x - 1) . chr($y + 65);
}

2018-01-19 更新:翻看php manual發(fā)現(xiàn)新的簡(jiǎn)單解決方法,字符遞增:


最后,附上完整代碼
框架為Yii2,excel導(dǎo)出組件為moonlandsoft/yii2-phpexcel;
其他類似

//導(dǎo)出xls
public static function exportXls($array)
{
    set_time_limit(0);
    include(Url::to("@vendor/moonland/phpexcel/PHPExcel.php"));
    include(Url::to("@vendor/moonland/phpexcel/PHPExcel/Writer/Excel2007.php"));
    $titles = $array["titles"];
    $fields = $array["fields"];
    $list = $array["list"];
    $name = $array["name"];
    $count = count($titles);
    $keys = [];//A=>chr(65)
    foreach ($titles as $k => $v) {
        $keys[] = self::toAAA($k);
    }
    $objPHPExcel = new PHPExcel();
    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
    $objPHPExcel->setActiveSheetIndex(0);
    $activeSheet = $objPHPExcel->getActiveSheet();
    $activeSheet->setTitle($name);
    $activeSheet->getStyle("A1:{$keys[$count-1]}1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    $activeSheet->mergeCells("A1:{$keys[$count-1]}1");
    $activeSheet->setCellValue("A1", $name);

    //設(shè)置title,樣式
    foreach ($titles as $key => $title) {
        $activeSheet->setCellValue($keys[$key] . "2", $title);
        $activeSheet->getColumnDimension($keys[$key])->setWidth(20);
        $activeSheet->getRowDimension(($key + 1))->setRowHeight(18);
    }
    $i = 3;
    foreach ($list as &$item) {
        foreach ($keys as $k => $v) {
            $val = isset($item[$fields[$k]]) ? $item[$fields[$k]] . " " : " ";
            $activeSheet->setCellValue($v . $i, $val);
        }
        $i++;
    }
    $fileName = $name . "_" . date("Y_m_d_His") . ".xlsx";
    header("Cache-Control: public");
    header("Pragma: public");
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=" . iconv("utf-8", "GB2312//TRANSLIT", $fileName));
    header("Content-Type:APPLICATION/OCTET-STREAM");
    ob_clean();
    ob_start();
    $objWriter->save("php://output");
    ob_end_flush();
}
//AAA轉(zhuǎn)換
public static function toAAA($dec)
{
    if ($dec < 0) return "";
    $y = $dec % 26;
    $x = floor($dec / 26);
    return self::toAAA($x - 1) . chr($y + 65);
}
三.導(dǎo)出結(jié)果示例

導(dǎo)出結(jié)果:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26270.html

相關(guān)文章

  • 如何在 Laravel 項(xiàng)目中處理 Excel 文件

    摘要:本文經(jīng)授權(quán)轉(zhuǎn)自社區(qū)說(shuō)明是一款強(qiáng)大的文件處理擴(kuò)展包能夠快速完成文件的的導(dǎo)出解析等功能本項(xiàng)目由團(tuán)隊(duì)成員整理發(fā)布首發(fā)地為社區(qū)文章的項(xiàng)目截圖運(yùn)行代碼請(qǐng)見(jiàn)請(qǐng)參照此文檔運(yùn)行文章概覽安裝基礎(chǔ)用法更多功能接下來(lái)是詳細(xì)解說(shuō)安裝使用安裝該擴(kuò)展包安裝完成后, 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 說(shuō)明 maatwebsite/excel 是一款強(qiáng)大的 Excel 文件處理擴(kuò)展包, 能夠快速完成 Excel 文...

    chadLi 評(píng)論0 收藏0
  • 使用PHP_XLSXWriter代替PHPExcel

    摘要:能不能單獨(dú)設(shè)置某個(gè)單元格的值這個(gè)目前并沒(méi)有實(shí)現(xiàn),現(xiàn)在數(shù)據(jù)的寫入都是逐行寫入的,不支持這么細(xì)的粒度,不過(guò)折中的做法是把不需要填充的單元格寫入即可如果有什么使用問(wèn)題,可以在下面留言,一起探討使用方式 二者有何區(qū)別? PHPExcel 是一個(gè)處理Excel,CVS文件的開源框架,它基于微軟的OpenXML標(biāo)準(zhǔn)和PHP語(yǔ)言。可以使用它來(lái)讀取、寫入不同格式的電子表格,這也是PHP至今最通用的Ex...

    TZLLOG 評(píng)論0 收藏0
  • 在 Laravel 5 中使用 Laravel Excel 實(shí)現(xiàn) Excel/CSV 文件導(dǎo)入導(dǎo)出

    摘要:本文非原創(chuàng),基于學(xué)院在中使用實(shí)現(xiàn)文件導(dǎo)入導(dǎo)出功能這篇文章在實(shí)際中測(cè)試調(diào)整。簡(jiǎn)介在中集成套件中的,從而方便我們以優(yōu)雅的富有表現(xiàn)力的代碼實(shí)現(xiàn)文件的導(dǎo)入和導(dǎo)出。 本文非原創(chuàng),基于laravel 學(xué)院《在 Laravel 5 中使用 Laravel Excel 實(shí)現(xiàn) Excel/CSV 文件導(dǎo)入導(dǎo)出功能》 這篇文章在實(shí)際中測(cè)試調(diào)整。 showImg(https://segmentfault.c...

    XFLY 評(píng)論0 收藏0
  • ThinkPHPPHPExcle導(dǎo)出Excel文件

    摘要:本篇文章主要講述,如何在中使用中導(dǎo)出文件,是博主在實(shí)踐了好多篇?jiǎng)e人的帖子之后,總結(jié)歸納出來(lái)的文章,親測(cè)可用。我的博客歡迎騷擾原文地址用導(dǎo)出文件。將文件,重命名成。文章結(jié)束,歡迎轉(zhuǎn)載。 本篇文章主要講述,如何在thinkPHP中使用PHPExcel中導(dǎo)出Excel文件,是博主在實(shí)踐了好多篇?jiǎng)e人的帖子之后,總結(jié)歸納出來(lái)的文章,親測(cè)可用。thinkPHP版本是3.2。 我的博客:Mine-...

    rollback 評(píng)論0 收藏0
  • php 導(dǎo)出 excel

    關(guān)于 PHP 導(dǎo)出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。 高性能 Excel 擴(kuò)展 sudo apt-get install -y zlib1g-dev git clone https://github.com/jmcnamara/libxlsxwriter.git cd libxlsxwriter make && sudo make install // ...

    付永剛 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

dendoink

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<