成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

如何使用PhpSpreadsheet導入導出Excel

本篇文章給大家介紹一下使用PhpSpreadsheet導入導出Excel的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

如何使用PhpSpreadsheet導入導出Excel

PHP對Excel導入&導出操作

最近公司要做報表功能,各種財務(wù)報表、工資報表、考勤報表等,復雜程度讓人頭大,于是特地封裝適用各大場景的導入&導出操作,希望各界大神支出不足之處,以便小弟繼續(xù)完善。

phpspreadsheet 引入

由于PHPExcel早就停止更新維護,所以適用phpspreadsheet。不知道如何通過composer拉取項目包的同學,可以查看Composer學習一文。引入方法:

composer require phpoffice/phpspreadsheet

引入命名空間

由于本人項目中需要居中、背景、單元格格式等各種操作,所以引入較多,大家使用的時候,可以根據(jù)自己實際需要引入。

use PhpOfficePhpSpreadsheetReaderXlsx;use PhpOfficePhpSpreadsheetReaderXls;use PhpOfficePhpSpreadsheetIOFactory;use PhpOfficePhpSpreadsheetCellCoordinate;use PhpOfficePhpSpreadsheetSpreadsheet;use PhpOfficePhpSpreadsheetWorksheetPageSetup;use PhpOfficePhpSpreadsheetCellDataType;use PhpOfficePhpSpreadsheetStyleFill;use PhpOfficePhpSpreadsheetStyleColor;use PhpOfficePhpSpreadsheetStyleAlignment;use PhpOfficePhpSpreadsheetStyleBorder;use PhpOfficePhpSpreadsheetStyleNumberFormat;

Excel導入操作(importExcel)

除了單純的處理Excel數(shù)據(jù)外,還可以將Excel中的合并項、公式項、單元格格式提取,提取后可根據(jù)業(yè)務(wù)需求做對應(yīng)處理后存儲起來,以便后續(xù)的各種操作。

/**  * 使用PHPEXECL導入  *  * @param string $file      文件地址  * @param int    $sheet     工作表sheet(傳0則獲取第一個sheet)  * @param int    $columnCnt 列數(shù)(傳0則自動獲取最大列)  * @param array  $options   操作選項  *                          array mergeCells 合并單元格數(shù)組  *                          array formula    公式數(shù)組  *                          array format     單元格格式數(shù)組  *  * @return array  * @throws Exception  */function importExecl(string $file = '', int $sheet = 0, int $columnCnt = 0, &$options = []){     try {         /* 轉(zhuǎn)碼 */         $file = iconv("utf-8", "gb2312", $file);          if (empty($file) OR !file_exists($file)) {             throw new Exception('文件不存在!');         }          /** @var Xlsx $objRead */         $objRead = IOFactory::createReader('Xlsx');          if (!$objRead->canRead($file)) {             /** @var Xls $objRead */             $objRead = IOFactory::createReader('Xls');              if (!$objRead->canRead($file)) {                 throw new Exception('只支持導入Excel文件!');             }         }          /* 如果不需要獲取特殊操作,則只讀內(nèi)容,可以大幅度提升讀取Excel效率 */         empty($options) && $objRead->setReadDataOnly(true);         /* 建立excel對象 */         $obj = $objRead->load($file);         /* 獲取指定的sheet表 */         $currSheet = $obj->getSheet($sheet);          if (isset($options['mergeCells'])) {             /* 讀取合并行列 */             $options['mergeCells'] = $currSheet->getMergeCells();         }          if (0 == $columnCnt) {             /* 取得最大的列號 */             $columnH = $currSheet->getHighestColumn();             /* 兼容原邏輯,循環(huán)時使用的是小于等于 */             $columnCnt = Coordinate::columnIndexFromString($columnH);         }          /* 獲取總行數(shù) */         $rowCnt = $currSheet->getHighestRow();         $data   = [];          /* 讀取內(nèi)容 */         for ($_row = 1; $_row <= $rowCnt; $_row++) {             $isNull = true;              for ($_column = 1; $_column <= $columnCnt; $_column++) {                 $cellName = Coordinate::stringFromColumnIndex($_column);                 $cellId   = $cellName . $_row;                 $cell     = $currSheet->getCell($cellId);                  if (isset($options['format'])) {                     /* 獲取格式 */                     $format = $cell->getStyle()->getNumberFormat()->getFormatCode();                     /* 記錄格式 */                     $options['format'][$_row][$cellName] = $format;                 }                  if (isset($options['formula'])) {                     /* 獲取公式,公式均為=號開頭數(shù)據(jù) */                     $formula = $currSheet->getCell($cellId)->getValue();                      if (0 === strpos($formula, '=')) {                         $options['formula'][$cellName . $_row] = $formula;                     }                 }                  if (isset($format) && 'm/d/yyyy' == $format) {                     /* 日期格式翻轉(zhuǎn)處理 */                     $cell->getStyle()->getNumberFormat()->setFormatCode('yyyy/mm/dd');                 }                  $data[$_row][$cellName] = trim($currSheet->getCell($cellId)->getFormattedValue());                  if (!empty($data[$_row][$cellName])) {                     $isNull = false;                 }             }              /* 判斷是否整行數(shù)據(jù)為空,是的話刪除該行數(shù)據(jù) */             if ($isNull) {                 unset($data[$_row]);             }         }          return $data;     } catch (Exception $e) {         throw $e;     }}

將數(shù)據(jù)處理好后,可以通過額外配置,將導出的Excel做各種不同的配置,例如打印樣式、鎖定行、背景色、寬度等。

Excel導出操作(exportExcel)

/**  * Excel導出,TODO 可繼續(xù)優(yōu)化  *  * @param array  $datas      導出數(shù)據(jù),格式['A1' => 'XXXX公司報表', 'B1' => '序號']  * @param string $fileName   導出文件名稱  * @param array  $options    操作選項,例如:  *                           bool   print       設(shè)置打印格式  *                           string freezePane  鎖定行數(shù),例如表頭為第一行,則鎖定表頭輸入A2  *                           array  setARGB     設(shè)置背景色,例如['A1', 'C1']  *                           array  setWidth    設(shè)置寬度,例如['A' => 30, 'C' => 20]  *                           bool   setBorder   設(shè)置單元格邊框  *                           array  mergeCells  設(shè)置合并單元格,例如['A1:J1' => 'A1:J1']  *                           array  formula     設(shè)置公式,例如['F2' => '=IF(D2>0,E42/D2,0)']  *                           array  format      設(shè)置格式,整列設(shè)置,例如['A' => 'General']  *                           array  alignCenter 設(shè)置居中樣式,例如['A1', 'A2']  *                           array  bold        設(shè)置加粗樣式,例如['A1', 'A2']  *                           string savePath    保存路徑,設(shè)置后則文件保存到服務(wù)器,不通過瀏覽器下載  */function exportExcel(array $datas, string $fileName = '', array $options = []): bool{     try {         if (empty($datas)) {             return false;         }          set_time_limit(0);         /** @var Spreadsheet $objSpreadsheet */         $objSpreadsheet = app(Spreadsheet::class);         /* 設(shè)置默認文字居左,上下居中 */         $styleArray = [             'alignment' => [                 'horizontal' => Alignment::HORIZONTAL_LEFT,                 'vertical'   => Alignment::VERTICAL_CENTER,             ],         ];         $objSpreadsheet->getDefaultStyle()->applyFromArray($styleArray);         /* 設(shè)置Excel Sheet */         $activeSheet = $objSpreadsheet->setActiveSheetIndex(0);          /* 打印設(shè)置 */         if (isset($options['print']) && $options['print']) {             /* 設(shè)置打印為A4效果 */             $activeSheet->getPageSetup()->setPaperSize(PageSetup:: PAPERSIZE_A4);             /* 設(shè)置打印時邊距 */             $pValue = 1 / 2.54;             $activeSheet->getPageMargins()->setTop($pValue / 2);             $activeSheet->getPageMargins()->setBottom($pValue * 2);             $activeSheet->getPageMargins()->setLeft($pValue / 2);             $activeSheet->getPageMargins()->setRight($pValue / 2);         }          /* 行數(shù)據(jù)處理 */         foreach ($datas as $sKey => $sItem) {             /* 默認文本格式 */             $pDataType = DataType::TYPE_STRING;              /* 設(shè)置單元格格式 */             if (isset($options['format']) && !empty($options['format'])) {                 $colRow = Coordinate::coordinateFromString($sKey);                  /* 存在該列格式并且有特殊格式 */                 if (isset($options['format'][$colRow[0]]) &&                     NumberFormat::FORMAT_GENERAL != $options['format'][$colRow[0]]) {                     $activeSheet->getStyle($sKey)->getNumberFormat()                         ->setFormatCode($options['format'][$colRow[0]]);                      if (false !== strpos($options['format'][$colRow[0]], '0.00') &&                         is_numeric(str_replace(['¥', ','], '', $sItem))) {                         /* 數(shù)字格式轉(zhuǎn)換為數(shù)字單元格 */                         $pDataType = DataType::TYPE_NUMERIC;                         $sItem     = str_replace(['¥', ','], '', $sItem);                     }                 } elseif (is_int($sItem)) {                     $pDataType = DataType::TYPE_NUMERIC;                 }             }              $activeSheet->setCellValueExplicit($sKey, $sItem, $pDataType);              /* 存在:形式的合并行列,列入A1:B2,則對應(yīng)合并 */             if (false !== strstr($sKey, ":")) {                 $options['mergeCells'][$sKey] = $sKey;             }         }          unset($datas);          /* 設(shè)置鎖定行 */         if (isset($options['freezePane']) && !empty($options['freezePane'])) {             $activeSheet->freezePane($options['freezePane']);             unset($options['freezePane']);         }          /* 設(shè)置寬度 */         if (isset($options['setWidth']) && !empty($options['setWidth'])) {             foreach ($options['setWidth'] as $swKey => $swItem) {                 $activeSheet->getColumnDimension($swKey)->setWidth($swItem);             }              unset($options['setWidth']);         }          /* 設(shè)置背景色 */         if (isset($options['setARGB']) && !empty($options['setARGB'])) {             foreach ($options['setARGB'] as $sItem) {                 $activeSheet->getStyle($sItem)                     ->getFill()->setFillType(Fill::FILL_SOLID)                     ->getStartColor()->setARGB(Color::COLOR_YELLOW);             }              unset($options['setARGB']);         }          /* 設(shè)置公式 */         if (isset($options['formula']) && !empty($options['formula'])) {             foreach ($options['formula'] as $fKey => $fItem) {                 $activeSheet->setCellValue($fKey, $fItem);             }              unset($options['formula']);         }          /* 合并行列處理 */         if (isset($options['mergeCells']) && !empty($options['mergeCells'])) {             $activeSheet->setMergeCells($options['mergeCells']);             unset($options['mergeCells']);         }          /* 設(shè)置居中 */         if (isset($options['alignCenter']) && !empty($options['alignCenter'])) {             $styleArray = [                 'alignment' => [                     'horizontal' => Alignment::HORIZONTAL_CENTER,                     'vertical'   => Alignment::VERTICAL_CENTER,                 ],             ];              foreach ($options['alignCenter'] as $acItem) {                 $activeSheet->getStyle($acItem)->applyFromArray($styleArray);             }              unset($options['alignCenter']);         }          /* 設(shè)置加粗 */         if (isset($options['bold']) && !empty($options['bold'])) {             foreach ($options['bold'] as $bItem) {                 $activeSheet->getStyle($bItem)->getFont()->setBold(true);             }              unset($options['bold']);         }          /* 設(shè)置單元格邊框,整個表格設(shè)置即可,必須在數(shù)據(jù)填充后才可以獲取到最大行列 */         if (isset($options['setBorder']) && $options['setBorder']) {             $border    = [                 'borders' => [                     'allBorders' => [                         'borderStyle' => Border::BORDER_THIN, // 設(shè)置border樣式                         'color'       => ['argb' => 'FF000000'], // 設(shè)置border顏色                     ],                 ],             ];             $setBorder = 'A1:' . $activeSheet->getHighestColumn() . $activeSheet->getHighestRow();             $activeSheet->getStyle($setBorder)->applyFromArray($border);             unset($options['setBorder']);         }          $fileName = !empty($fileName) ? $fileName : (date('YmdHis') . '.xlsx');          if (!isset($options['savePath'])) {             /* 直接導出Excel,無需保存到本地,輸出07Excel文件 */             header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');             header(                 "Content-Disposition:attachment;filename=" . iconv(                     "utf-8", "GB2312//TRANSLIT", $fileName                 )             );             header('Cache-Control: max-age=0');//禁止緩存             $savePath = 'php://output';         } else {             $savePath = $options['savePath'];         }          ob_clean();         ob_start();         $objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx');         $objWriter->save($savePath);         /* 釋放內(nèi)存 */         $objSpreadsheet->disconnectWorksheets();         unset($objSpreadsheet);         ob_end_flush();          return true;     } catch (Exception $e) {         return false;     }}

推薦學習:php視頻教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
黑人粗大与亚裔乱P视频| 唱歌的大姐姐也想做| Chinese国产HD精品实拍| 爆乳邻居肉欲中文字幕| 国产爆乳无码福利电影| 国产中文三级全黄| 久久国产热这里只有精品| 蜜芽AV在线新地址| 人妻熟妇av又粗又爽| 无码人妻丰满熟妇区96| 亚洲欲色欲色XXXXX在线| FREE东北女人自拍HD| 国产成人无码免费视频在线| 精品国内自产拍在线观看| 麻花豆传媒MV在线播放| 日韩精品一区二区午夜成人版| 午夜私人理论电影| 欲求不满邻居的爆乳在线播放| 把舌头伸进她腿间花缝| 国产偷窥真人视频在线观看| 老牛精品亚洲成AV人片| 日韩产品和欧美产品的区别| 亚洲AV无码乱码国产精品FC2| 在线天天看片视频免费观看| 东北一家人1一6全文阅读小说| 国内精品国产成人国产三级| 男女性色大片免费网站| 污污内射久久一区二区欧美日韩| 亚洲香蕉中文日韩V日本| ZZIJZZIJ亚洲日本少妇| 国模无码一区二区三区| 女人呻吟声大了男人越有劲吗| 天堂BT种子资源在线WWW| 一二三四免费BD高清视频| 成人精品视频99在线观看免费| 韩国的无码AV看免费大片在线| 欧美成人一区二区| 亚欧成人无码AV在线播放| 坐着轮流提双腿能起到什么效果| 国产A级毛片久久久久久精品| 久久精品国产亚洲AV水果派| 日本少妇ASS浓精PICS| 亚洲女人被黑人巨大进入| 不卡无码人妻一区三区| 精品一区二区三区国产在线观看 | 极品少妇高潮XXXXX| 欧亚精品卡一卡二卡三7174| 亚洲AV之男人的天堂网站| YW尤物无码点击进入| 狠狠色丁香久久婷婷综| 日本黑人乱偷人妻中文字幕| 亚洲熟妇无码另类久久久| 高清欧美精品XXXXX在线看| 两性午夜刺激性视频2345| 无码精品人妻 中文字幕| 800AV凹凸视频在线观看| 国精产品999一区二区三区有限| 欧美性大战久久久久久久| 亚洲国产一区二区A毛片| 成熟闷骚女邻居引诱2| 久久久亚洲熟妇熟| 无码免费一区二区三区| CHINESE东北嫖妓女HD| 久久ZYZ资源站无码中文动漫| 丝袜灬啊灬快灬高潮了AV| 6080YYY午夜理论片中无码| 黑人巨大BBWBBW| 少妇ⅩXXOOOZZXXHD| 坐着轮流提双腿能起到什么效果| 果冻传媒一二三工厂免费观看| 日韩大片高清播放器| 中文字幕视频在线观看| 精品国产AV 无码一区二区三区| 私人影院家庭影院| BGMBGMBGM老妇60岁| 久久久久亚洲AV成人网址| 小鲜肉洗澡时自慰网站XNXX| 成 人 黄 色 网 站 ·大| 免费av网站在线观看| 亚洲精品无码一区二区AⅤ污| 国产成人一区二区三区免费| 青草久久久国产线免观蜜芽| 一面亲上边一面膜| 国内精品久久久久久无码| 熟女高潮喷水一区二区三区| JAPANESEHD熟女熟妇伦| 狂猛欧美激情性XXXX在线观看| 亚洲AV永久无码精品无码四虎 | 久久久久成人片免费观看R| 亚洲 A V无 码免 费 成| 国产99久久精品一区二区| 人妻AV一区二区| 7723影视大全在线观看| 久久人人爽人人爽人人AV| 亚洲国产精品VA在线看黑人| 国产精品免费无遮挡无码永久视频| 日本高清视频网站WWW| Chinese辽宁人妻4p| 男女裸交免费无遮挡全过程| 一本色道久久综合狠狠躁| 精品国偷自产在线视频99| 亚洲AV成人片无码网站网| 国产精品久久久久久久网 | 18禁无遮挡啪啪摇乳动态图| 久久国产精品日本波多野结衣 | 性色AV一区二区三区无码| 国产MV在线天堂MV免费观看| 色噜噜AV亚洲色一区二区| 爆乳熟妇一区二区三区霸乳| 欧洲美女粗暴牲交免费观看| 51国偷自产一区二区三区| 蜜臀av一区二区三区人妻| 在线观看免费播放AV片| 久久综合狠狠色综合伊人| 亚洲自偷自偷在线成人网站传媒 | chinese人妻无码人妻| 欧美成人一区二区三区在线观看| 专干熟肥老妇人视频在线看| 美女下部裸体张开腿视频| 中文字幕日本最新乱码视频| 麻豆国产尤物AV尤物在线观看| 岳胀耸的雪乳奶水| 久久亚洲精品中文字幕波多野结衣| 亚洲一线产区二线产区区别在哪儿 | YW尤物爆乳网站点击进入| 全免费A级毛片免费看| 被老外添嫩苞添高潮NP视频| 日韩GAY小鲜肉啪啪18禁| 帝王怀孕肚腹圆隆憋尿| 私人电影院免费看吗| 国产精品自在在线午夜出白浆| 天堂在\/线中文在线8| 国产精品泄火熟女| 亚洲VA欧洲VA日韩VA| 久久精品AⅤ无码中文字字幕| 一二三四在线看日本高清 | 99精品国产福利在线观看| 欧美最猛黑人XXXⅩ猛男欧视频| 扒开双腿疯狂进出爽爽爽免费 | 亚洲欧美日韩中文高清WWW| 久久精品亚洲男人的天堂| 中文曰本熟女久久| 欧美性操大鸡狠狠| 大陆国语对白国产AV片| 无码AV专区丝袜专区| 国内偷自第一区二区三区| 亚洲无人区码一码二码三码区别 | 无码国产激情在线观看| 国色天香精品一卡2卡3卡| 亚洲亚洲人成综合网络| 女人被狂躁c到高潮视频| 成人无码免费一区二区三区| 无码国产69精品久久久孕妇| 精品国产一区二区三区麻豆 | 亚洲国产成人精品无码区在线网站| 精品久久久久久无码专区| 中国VITAFUSION孕妇| 日本丰满的人妻HD高清在线| 国产成人一卡2卡3卡4卡| 亚洲国产精品成人久久| 免费看成人AV片| 非洲人与性动交CCOO| 亚洲AV综合伊人AV一区加勒比 | 翁熄小莹女博士高潮连连| 精品国产一区二区三区不卡在线| 18禁裸体动漫美女无遮挡网站| 日日躁夜夜躁狠狠久久AV| 国色天香一卡2卡3卡4卡| 中文天堂在线最新版在线WWW | 欧美精品成人A在线观看| 公天天吃我奶躁我的B| 亚洲精品无码久久久久去Q| 美女内射无套日韩免费播放| 粉嫩人妻一区二区三区| 亚洲国产精品久久艾草纯爱| 男人强撕开奶罩揉捏我奶头视频| 东京热无码人妻一区二区AV | 精品一区二区三区东京热| CHINAGARY武警体育飞机| 无码精品、日韩专区| 久久天天躁狠狠躁夜夜免费观看 | 亚洲成AV人片乱码色午夜| 男女啪啪免费观看网站| 国产成人欧美精品视频| 一本一久本久A久久精品综合 | 在线中文新版最新版在线| 日韩系列中文无码| 精品人妻中文无码AV在线 | 中文在线最新版天堂| 熟妇高潮一区二区精品| 久久人妻无码一区二区三区av| 成人污污污WWW网站免费| 亚洲日产韩国一二三四区| 日韩AV无码一区二区| 久久精品成人免费国产片| 超碰97人人做人人爱少妇| 亚洲熟妇丰满多毛XXXX| 色妞精品AV一区二区三区| 久久婷婷人人澡人人爽人人爱 | 玩弄老太太的BB|