PHP#資料Excel導出的一些策略
PHP#資料Excel導出的一些策略
導出其實在任何類型的後端系統都比較常見的excel導出其實在任何類型的後端系統都比較常見的用
做備份、底稿,理想情況下針對業務資料的任何業務操作都不應該依靠從後端業務系統導出資料然後人工進行干涉處理,但現實很骨感。 。 。資料導出這類的功能在有條件的情況下是須要封裝起來的,只有一個資料出口,在後續的業務規則調整變更時會真正的體現出它的價值。當一個典型的應用系統出現了五花八門的資料匯出需求,說明這個應用系統的業務分析做的不夠好或很差,當使用者只想用應用系統匯出資料來輔助他們的業務流程時,最恐怖的情況就會是使用者和資料庫的距離只是隔著一個匯出按鈕。 。 。
環境
1.PHP5.5.14 (cli) (built: Sep 9 201419:09:25) 2.PHP Excel 1.7.8 (http://www.codeplex.com/PHPExcel
)處理邏輯其實的關鍵點這套規則是否能適應業務流程,最基本的辦法就是將資料導出的流程抽象化為3
個基礎階段,而後每個階段可以再進行逐步的細化:1.
導出規則的定義2.
業務資料與導出規則的適配3.導出規則解析建構
Excel沒有進行任何封裝,沒有關注效能或其它擴展性問題。<?php namespace org\ybygjy\comp\excel; /** * Excel组件封装 * <p>1.统一处理工程中针对excel的数据导出</p> * @author WangYanCheng * @version 2015-1-22 */ class ExcelComp { /** * 构造函数 */ public function __construct() { require_once 'org/ybygjy/library/excel/PHPExcel.php'; } /** * 测试入口 */ public function doTest() { //构造原始数据 $dataArray = $this->buildData(); //导出 $this->doExportData($dataArray); } /** * 解析传递的原始数据并导出 * @param $dataArr */ public function doExportData($dataArr) { $phpObjExcel = new \PHPExcel(); $worksSheet = $phpObjExcel->setActiveSheetIndex(0); //构造表头数据_Begin $tmpColTitles = []; $firstDataEntry = $dataArr[0]; //分配列索引 $colIndex = 0; foreach($firstDataEntry as $key => $val) { if (preg_match('/^_/', $key)) { continue; } if (is_array($val)) { //取array下的列名称 $val = $val[0]; $rowNums = count($val); foreach ($val as $innerKey => $innerValue) { $tmpColTitles[] = array( 'parentKey' => $key, 'key' => $innerKey, 'colIndex' => $colIndex ); $colIndex++; } } else { $tmpColTitles[] = array( 'key'=>$key, 'colIndex'=>$colIndex ); $colIndex++; } } for($i = 0; $i < count($tmpColTitles); $i++) { $tmpObj = $tmpColTitles[$i]; $key = $tmpObj['key']; $colIndex = $tmpObj['colIndex']; $worksSheet->setCellValueByColumnAndRow($colIndex,1,$key); } //构造表头数据_End //填充单元格数据 $currRow = 2; foreach ($dataArr as $dataEntry) { $mergeRow = $dataEntry['_DIMENSION']; foreach ($tmpColTitles as $colEntry) { $key = $colEntry['key']; $colIndex = $colEntry['colIndex']; $parentKey = (isset($colEntry['parentKey']) ? $colEntry['parentKey'] : null); if (empty($parentKey)) { $value = $dataEntry[$key]; if ($mergeRow == 1) { $worksSheet->setCellValueByColumnAndRow($colIndex, $currRow, $value); } else { $worksSheet->mergeCellsByColumnAndRow($colIndex, $currRow, $colIndex, ($currRow + $mergeRow - 1))->setCellValueByColumnAndRow($colIndex, $currRow, $value); } } else { $tmpDataArr = $dataEntry[$parentKey]; $innerRow = $currRow; for($index = 0; $index < count($tmpDataArr); $index++) { $innerDataEntry = $tmpDataArr[$index]; $value = $innerDataEntry[$key]; $worksSheet->setCellValueByColumnAndRow($colIndex, $innerRow, $value); $innerRow++; } } } $currRow += $mergeRow; } header('Content-Type: application/vnd.ms-excel'); header('Content-Type: application/force-download'); header('Content-Type: application/octet-stream'); header('Content-Type: application/download'); header('Content-Disposition: attachment;filename="HelloWord.xls"'); header('Cache-Control: max-age=0'); header('Cache-Control: max-age=1'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: public'); $objWriter = \PHPExcel_IOFactory::createWriter($phpObjExcel, 'Excel5'); $objWriter->save('php://output'); } /** * 构造测试数据 * @return multitype:multitype:string number multitype:multitype:string */ private function buildData() { $rtnData = array( array( 'name'=>'YanCheng_01', 'age'=>'20', 'addr'=>array( array( 'country'=>'China', 'province'=>'ShanDong' ), array( 'country'=>'China', 'province'=>'BeiJing' ) ), '_DIMENSION'=>2 ), array( 'name'=>'YanCheng_02', 'age'=>'21', 'addr'=>array( array( 'country'=>'China', 'province'=>'LanZhou' ), array( 'country'=>'China', 'province'=>'NingXia' ) ), '_DIMENSION'=>2 ), array( 'name'=>'YanCheng_03', 'age'=>'22', 'addr'=>array( array( 'country'=>'China', 'province'=>'JiaYuGuan' ) ), '_DIMENSION'=>1 ) ); return $rtnData; } }
以上就介紹了PHP#資料Excel導出的一些策略,包括了方面的內容,希望對PHP教學有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如果在開啟一份需要列印的文件時,在列印預覽裡我們會發現表格框線不知為何消失不見了,遇到這樣的情況,我們就要及時進行處理,如果你的列印文件裡也出現了此類的問題,那麼就和小編一起來學習下邊的課程吧:excel列印表格框線消失怎麼辦? 1.開啟一份需要列印的文件,如下圖所示。 2、選取所有需要的內容區域,如下圖所示。 3、按滑鼠右鍵,選擇「設定儲存格格式」選項,如下圖所示。 4、點選視窗上方的「邊框」選項,如下圖所示。 5、在左側的線條樣式中選擇細實線圖樣,如下圖所示。 6、選擇“外邊框”

在日常辦公中經常使用Excel來處理數據,時常遇到需要使用「篩選」功能。當我們在Excel中選擇執行「篩選」時,對於同一列而言,最多只能篩選兩個條件,那麼,你知道excel同時篩選3個以上關鍵字該怎麼操作嗎?接下來,就請小編為大家示範一次。第一種方法是將條件逐步加入篩選器。如果要同時篩選出三個符合條件的明細,首先需要逐步篩選出其中一個。開始時,可以先依照條件篩選出姓「王」的員工。然後按一下【確定】,接著在篩選結果中勾選【將目前所選內容新增至篩選器】。操作步驟如下圖所示。 同樣,再次分別執行篩選

在我們日常的工作學習中,從他人處拷貝了Excel文件,打開進行內容添加或重新編輯後,再保存的有時候,有時會提示出現兼容性檢查的對話框,非常的麻煩,不知道Excel軟體,可不可改為正常模式呢?那麼下面就由小編為大家帶來解決這個問題的詳細步驟,讓我們一起來學習吧。最後一定記得收藏保存。 1.開啟一個工作表,在工作表的名稱中顯示多出來一個相容模式,如圖所示。 2.在這個工作表中,進行了內容的修改後保存,結果總是彈出兼容檢查器的對話框,很麻煩看見這個頁面,如圖所示。 3、點選Office按鈕,點另存為,然

e我們常常會用excel來製作一些資料表之類的,有時在輸入參數數值時需要對某個數字進行上標或下標,例如數學公式就會常用到,那麼excel下標怎麼打出來呢?我們一起來看看詳細操作步驟:一、上標方法:1、先Excel中輸入a3(3為上標)。 2、選取數字“3”,右鍵選擇“設定儲存格格式”。 3、點選“上標”,然後“確定”即可。 4、看,效果就是這樣的。二、下標方法:1、與上標設定方法類似,在儲存格中輸入“ln310”(3為下標),選取數字“3”,並右鍵選擇“設定儲存格格式”。 2、勾選“下標”,點選“確定

在處理資料時,有時我們會遇到資料包含了倍數、溫度等等各種符號的時候,你知道excel上標應該如何設定嗎?我們在使用excel處理資料時,如果不會設定上標,這可是會讓我們的許多資料在輸入時就會比較麻煩。今天小編就為大家帶來了excel上標的具體設定方法。 1.首先,讓我們打開桌面上的MicrosoftOfficeExcel文檔,選擇需要修改為上標的文字,具體如圖所示。 2.然後,點擊右鍵,點擊後出現的選單中,選擇「設定儲存格格式」選項,具體如圖所示。 3.接下來,在系統自動彈出的「儲存格格式」對話框

大部分使用者使用Excel都是用來處理表格資料的,其實Excel還有vba程式編寫,這個除了專人士應該沒有多少使用者用過此功能,在vba編寫時常常會用到iif函數,它其實跟if函數的功能差不多,下面小編跟大家介紹下iif函數的用法。 Excel中SQL語句和VBA程式碼中都有iif函數。 iif函數和excel工作表中的IF函數用法相似,執行真假值判斷,根據邏輯計算的真假值,傳回不同結果。 IF函數用法是(條件,是,否)。 VBA中的IF語句和IIF函數,前者IF語句是控制語句可以依照條件執行不同的語句,後者

在軟體的學習中,我們習慣用excel,不僅是因為需要方便,更因為它可以滿足多種實際工作中需要的格式,而且excel運用起來非常的靈活,有種模式是方便閱讀的,今天帶給大家的就是:excel閱讀模式在哪裡設定。 1.開啟電腦,然後再開啟Excel應用,找到目標資料。 2.要想在Excel中,設定閱讀模式,有兩種方式。第一種:Excel中,有大量的便利處理方式,分佈在Excel中佈局中。在Excel的右下角,有設定閱讀模式的快捷方式,找到十字標誌的圖案,點擊即可進入閱讀模式,在十字標誌的右邊有一個小的三

1.開啟PPT,翻頁至需要插入excel圖示的頁面。點選插入選項卡。 2、點選【對象】。 3、跳出以下對話框。 4.點選【由檔案建立】,點選【瀏覽】。 5、選擇需要插入的excel表格。 6.點選確定後跳出如下頁面。 7.勾選【顯示為圖示】。 8.點選確定即可。
