【經驗】sae雲平臺上的phpExcel庫的使用詳解
專案背景:
採用新浪sae雲平臺作web開發,使用thinkphp框架,在後臺通過php匯入excel表格,並實現excel表格資料讀寫。
具體步驟:
上傳excel表格至sae雲平臺
- sae機制介紹
SAE採用分散式架構設計, 應用程式碼將部署在多臺前端伺服器上, 每次訪問請求可能到達不同伺服器。 假設現在有A、B、C、D四臺伺服器。使用者上傳一張圖片到A伺服器,第二次訪問請求可能到達B伺服器,此時將無法獲取儲存在A伺服器上的圖片。
SAE使用MemcacheX、Storage等儲存型服務代替傳統IO操作,效率比傳統IO讀寫操作高,有效解決因IO瓶頸導致程式效能低下的問題。
另外,很多網站被攻擊都是因為伺服器有寫的許可權,程式程式碼能被黑客修改,SAE禁止寫操作,也提升了伺服器的安全性。
所以SAE為了提升效能和安全,禁止本地IO寫操作。開發者可以使用Storage,Memcache,KVDB等服務儲存需寫入的資料。
sae提供的一些上傳檔案的方法如下
public function upload() {
if (!empty($_FILES)) {
import("@.ORG.UploadFile");
$config=array(
'allowExts' =>array('jpg','gif','png','xlsx','xls'),
'savePath'=>'./Public/upload/',
'saveRule'=>'time',
);
$upload = new UploadFile($config);
$upload->imageClassPath="@.ORG.Image";
$upload->thumb=true;
$upload ->thumbMaxHeight=100;
$upload->thumbMaxWidth=100;
if (!$upload->upload()) {
$this->error($upload->getErrorMsg());
} else {
$info = $upload->getUploadFileInfo();
$this->assign('filename', $info[0]['savename']);
}
}
$this->display();
}
if (!empty($_FILES)) {
import("@.ORG.UploadFile");
$config=array(
'allowExts'=>array('xlsx','xls'),
'savePath'=>'./Public/upload/',
'saveRule'=>'time',
);
$upload = new UploadFile($config);
if (!$upload->upload()) {
$this->error($upload->getErrorMsg());
} else {
...
}
}
說明,基本與sae提供的示例方法一致,在else部分有我自己的業務邏輯,即如果相同則進行覆蓋。
上傳excel表格
在這裡我嘗試了很多種方法,最後選用了下面這種方法,這裡要注意sae上傳並讀取檔案的方法。注意使用前必須先下載php excel的庫,如果使用thinkphp開發需放在extent的vendor目錄下。
$s=new SaeStorage();
file_put_contents(SAE_TMP_PATH.'/upload.xlsx',$s->read('public','upload/'.$info[0]['savename']));
vendor('phpExcel.PHPExcel');
vendor("PHPExcel.PHPExcel.IOFactory"); $objPHPExcel=PHPExcel_IOFactory::load(SAE_TMP_PATH.'upload.xlsx');
思路就是使用saeStorage讀取檔案,存到sae_temp_path的臨時路徑下,再使用load方法將臨時檔案upload.xlsx獲取到,就可以了
讀取excel表格
上一步獲得$objPHPExcel物件後,就變的和平常的web開發一樣了,在這裡介紹一些php excel讀取時的常用函式,你可以使用迴圈讀取的方法來獲取表格中的資料
$objWorksheet = $objPHPExcel->getActiveSheet();//獲取當前資料表物件
$highestColumn = $objWorksheet->getHighestColumn();//獲取總列數(字串)
$highestRow = $objWorksheet->getHighestRow();//獲取總行數
$highestColumnIndex=PHPExcel_Cell::columnIndexFromString($highestColumn);//將總列數轉換為數字
$value = $objWorksheet ->getCellByColumnAndRow($col,$row)->getValue();//獲取單元格的值
匯出excel表格
匯出excel依然和平常差不多,在這裡繼續介紹一些常用函式
$objPHPExcel->getProperties()->setCreator("sunzhiyu");//建立人
$objPHPExcel->getProperties()->setLastModifiedBy("sunzhiyu");//最後修改人
$objPHPExcel->getProperties()->setTitle("php study");//標題
$objPHPExcel->getProperties()->setSubject("I love coding");//題目
$objPHPExcel->getProperties()->setDescription("I am a coder");//描述
$objPHPExcel->getProperties()->setKeywords("code");//關鍵字
$objPHPExcel->getProperties()->setCategory("excel file");//種類
$objPHPExcel->getActiveSheet()->mergeCells('A1:K1'); //合併單元格
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);//設定行高度,第一行高度為22
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);//設定列寬度,A列寬度為30
$objPHPExcel->getActiveSheet()->setCellValue('A1','編號');//設定內容
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize('18');//設定字型大小
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);//設定字型樣式
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex(3).'2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//設定水平對齊方式
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex(3).'2')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//設定垂直對齊方式
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex($i).'2')->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//設定邊框
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex($i).'2')->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex($i).'2')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex($i).'2')->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objPHPExcel->getActiveSheet()->getStyle(PHPExcel_Cell::stringFromColumnIndex($i).'2')->getAlignment()->setWrapText(true);//設定單元格可換行
$objPHPExcel->getActiveSheet()->getStyle( 'A2:k2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);$objPHPExcel->getActiveSheet()->getStyle( 'A2:k2')->getFill()->getStartColor()->setARGB('FF87CEFF');//設定背景填充
$objPHPExcel->getActiveSheet()->mergeCells(A1:K1);//合併單元格
$objPHPExcel->getActiveSheet()->setTitle('name');//設定sheet名稱
$objPHPExcel->setActiveSheetIndex(0);//設定當前sheet
完成的下載流程如下,執行下列程式碼,即可下載excel表
vendor("phpExcel.PHPExcel");
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->setTitle('name);//設定sheet名稱
$objPHPExcel->setActiveSheetIndex(0);//設定當前sheet
$name = '下載好的表格';
ob_end_clean();//清除緩衝區,避免亂碼
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$name.'.xls"'); //日期為檔名字尾
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); //excel5為xls格式,excel2007為xlsx格式
$objWriter->save('php://output');
本期的介紹就到這裡,希望大家一起享受程式設計的樂趣!
相關推薦
【經驗】sae雲平臺上的phpExcel庫的使用詳解
專案背景: 採用新浪sae雲平臺作web開發,使用thinkphp框架,在後臺通過php匯入excel表格,並實現excel表格資料讀寫。 具體步驟: 上傳excel表格至sae雲平臺 - sae機制介紹 SAE採用分散
【轉】中文分詞之HMM模型詳解
實現 含義 jieba 順序 清晰 bsp 中國 matrix 統計 關於HMM模型的介紹,網上的資料已經爛大街,但是大部分都是在背書背公式,本文在此針對HMM模型在中文分詞中的應用,講講實現原理。 盡可能的撇開公式,撇開推導。結合實際開源代碼作為例子,爭取做到雅俗共賞,
【轉】python文件打開方式詳解——a、a+、r+、w+區別
不能 mos open col strong cnblogs span ast last 原文地址:http://blog.csdn.net/ztf312/article/details/47259805 第一步 排除文件打開方式錯誤: r只讀,r+讀寫,不創建 w新建只寫
【MAVEN】maven系列--pom.xml標簽詳解
als lex script 是否 mod resource ica 資源 bugzilla pom文件作為MAVEN中重要的配置文件,對於它的配置是相當重要。文件中包含了開發者需遵循的規則、缺陷管理系統、組織、licenses、項目信息、項目依賴性等。下面將重點介紹一下該
【shell】Linux shell 之break和continue詳解
shell break linux 腳本 break和continue都可以在循環中使用,但是兩個的功能有點不同,比如break是跳出整個循環,而continue則是跳出本次循環,繼續下個循環,下面我們會通過例子來演示這兩個的不同之處。 ** 例子:打印數字1-10,如果 i>
【轉】Linux rpm 命令參數使用詳解[介紹和應用]
binary 包管理 samba cpio 詳解 -- hash pos 升級 RPM是RedHat Package Manager(RedHat軟件包管理工具)類似Windows裏面的“添加/刪除程序” rpm 執行安裝包二進制包(Binary)以及源代碼包(So
【轉】logback的使用和logback.xml詳解
操作 官方 觀察者 一是 變量定義 world! 是個 歸檔文件 connect from:https://www.cnblogs.com/warking/p/5710303.html 一、logback的介紹 Logback是由log4j創始人設計的另一個開源日誌組件
【Java】HashMap源碼分析——常用方法詳解
fir 設置 直接 dfa 構造方法 change mage null 這也 上一篇介紹了HashMap的基本概念,這一篇著重介紹HasHMap中的一些常用方法:put()get()**resize()** 首先介紹resize()這個方法,在我看來這是HashMap中一個
【原】SQL Sverver 2008R2 安裝(圖文詳解)
1、雙擊SQL Server2008 光碟映像檔案如下圖,管理員身份執行setup 2、進入SQL Server2008 安裝中心介面,選擇全新安裝 3、進入到常規檢查介面 4、根據需要選擇版本,或者輸入金鑰自動識別版本 &n
【轉】MySQL使用者管理及SQL語句詳解
【轉】MySQL使用者管理及SQL語句詳解 1.1 MySQL使用者管理 1.1.1 使用者的定義 使用者名稱+主機域 mysql> select user,host,password from mysql.user; +--------+------------+---------
【iOS】第01講 UIView/UIViewController/UIApplication詳解
一、UIView詳解 Command+Alt+Enter -> 顯示ViewController 按住Ctrl直接把UIView拖到ViewController 1.1 UIView的常見屬性 @property(nonatomic,reado
【laravel】laravel Excel V3.1 匯出方法詳解
放前面說的 本篇文章不適用於 laravel Excel 3.0 以下版本。 放中間說的( 這裡是正文了 ) 介紹 LaravelExcel 旨在成為 Laravel 風格的 PhpSpreadsheet:圍繞 PhpSpreadsheet 的簡單但優雅的包裝,其目標
【轉載】 IntelliJ IDEA(2018)安裝詳解
第一步:進入官網下載IntelliJ IDEA https://www.jetbrains.com/idea/download/#section=windows,選擇適合版本下載; 第二步:雙擊已下載檔案,進行開始安裝; 點選 next
【5】Django項目配置settings.py詳解
cal 哈希 組成 data 模型 apps orm 可調用對象 別人 夫唯不爭,故天下莫能與之爭 ——老子《道德經》 本節內容 1.項目配置文件settings.py介紹 2.數據庫配置【MySQL】 3.創建模型對象並和數據庫同步 4.python官方提供的項目後臺管
【轉】正則表示式–零寬斷言詳解
零寬斷言的意思是(匹配寬度為零,滿足一定的條件/斷言) 我也不知道這個詞語是那個王八蛋發明的,簡直是太拗口了。 零寬斷言用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們像\b,^,$那樣用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它
【轉】關於cocos2dx+lua註冊事件函式詳解
轉載:http://www.taikr.com/article/1605 registerScriptTouchHandler 註冊觸屏事件registerScriptTapHandler註冊點選事件registerScriptHandler 註冊基本事件 包括 觸屏 層的進入 退出 事件registerS
【轉載】LoadRunner性能測試入門教程詳解
replay 測試工程 配置環境變量 註意 標記 不同 ont 增強 sta 第一章:性能測試基礎1-1. 大話性能測試性能測試使用自動化測試工具對產品按一定的性能指標進行測試,解決性能瓶頸,給用戶最好的體驗。性能測試的時代背景,作用BAT網站(baidu),軟件(T),遊
【轉載】C# 中的委託和事件(詳解:簡單易懂的講解) C# 中的委託和事件(詳解)
本文轉載自http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html C# 中的委託和事件(詳解) C# 中的委託和事件
【OpenGL】遊戲程式設計常用TGA影象格式詳解以及載入紋理程式設計實現
TGA格式影象是遊戲中十分常見的一種影象格式,所以有必要了解其內部格式以及程式設計實現。 TGA影象一般有非壓縮和壓縮兩種格式,下面分別進行介紹。 一、非壓縮TGA影象 注:前面的標記綠色的部分(共12位元組)表示對於所有的非壓縮TGA格式影象值都是相同的!所以通常用來
【Unity】Unity中的非同步程式設計技術詳解
非同步程式設計技術對於很多手遊開發者來說,都是不可避免的話題,因為手遊的遊戲邏輯包含太多需要併發或者希望能夠並行的邏輯。現在的手機硬體發展迅速,多核已成為主導趨勢,對於3A級大作來說,如何充分利用手機多核的效能從而解放主執行緒壓力就顯得尤其重要。本文將由Unit