999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用PHPExcel類實現Excel數據批量操作

2015-04-16 01:30:08胡必波
電腦與電信 2015年9期
關鍵詞:數據庫

胡必波

(廣州工商學院,廣東 廣州 510850)

1 引言

為滿足廣大師生的報修需求,我院后勤集團與信息化處整合了水、電、暖、網絡、固定電話、一卡通等維修類別中師生報修率最高的若干報修項目,推出了校園一站式服務網上“報修投訴平臺”,簡化了以往需要向不同單位申報故障的繁瑣過程,報修申請人只需登錄平臺,進入“我要報修”頁面,填寫信息申請報修。該系統中學生報修信息由一站式服務中心的管理人員以Excel表格的形式提供。本系統采用PHP+MySQL作為開發平臺,開發過程中MySQL數據庫與Excel表有進行導入導出等交互的開發需求。為此我們選用了微軟公司提供的類庫PHPExcel。本文就PHPExcel類庫中有關Excel導入數據庫及將數據庫中的內容導出的實現思路分別作介紹。

2 PHPExcel概述

PHPExcel是用來操作Office Excel文檔的一個PHP類庫,它基于微軟的OpenXML標準和PHP語言。可以使用它來讀取、寫入不同格式的電子表格,如Excel(BIFF).xls、Excel 2007(OfficeOpenXML).xlsx、CSV、Gnumeric、PDF、HTML等。更難得的是還可以在Excel中設置圖片、表格、字體大小、顏色等非常具體的格式。PHPExcel目前最高版本為1.8.0。

3 PHPExcel原理

圖1 PHPExcel基本架構

如圖1所示,PHPExcel在內存中是將數據以電子表格的形式來呈現的,我們只要編寫前端代碼調用PHPExcel對象模型,就可以很方便地創建一個Web電子表格。和我們使用桌面電子表格軟件一樣,PHPExcel所創建的電子表格包含一個或多個工作表,工作表的單元格又包含數據、公式、圖像等。

4 一站式服務系統中Excel批量數據操作功能實現

4.1 數據導入功能的實現

以網絡端口保修數據導出為例。該功能的實現是將網絡端口保修數據導入到MySQL中,將Excel表格中的數據導入數據庫使用的是PHPExcel類庫中的類PHPExcel_Reader_Excel5。具體的實現思路為首先創建PHPExcel_Reader_Excel5的對象$objReader,然后調用它的setReadDataOnly方法設置數據源為可讀,接著調用它的load方法設置要導入的Excel文件,最后通過調用getCellByColumnAndRow方法從Excel獲取數據并將數據插入到數據庫中。

4.2 數據導出功能的實現

該功能的實現是將某階段內的歷史數據從數據庫中導出到指定的Excel表格中。首先通過調用PHPExcel類庫中的PHPExcel類創建Excel文件,并通過調用其方法設置文檔屬性以及Sheet索引。然后通過調用活動單元格對象的方法setCellValue在表格的第一行設置字段名稱。最后通過調用數據庫的數據將數據寫入Excel文件,寫入方法同樣使用的是setCellValue方法。運行效果如圖2所示。

圖2 從一站式服務系統導出的報修數據

實現功能的核心代碼如下:

//生成數據

$column=2;

$objActSheet=$objPHPExcel->getActiveSheet();

foreach($data as$key=> $rows){//行寫入

$span=ord("B");

foreach($rows as$keyName=>$value){//列寫入

$j=getExcelColumnValue($span-65);

$objActSheet->setCellValue("A".$column,$column-1);

$objActSheet->setCellValue($j.$column,$value);

$span++;

4.3 經驗與技巧

4.3.1 亂碼的處理

(1)解決生成文件名的導出Excel亂碼

亂碼原因:客戶使用的中文版Windows系統平臺,Windows平臺的文件名編碼為gb2312(gbk),而我們網頁編碼一般都采用utf-8(國際化)編碼,這時當我們:header("Content-Disposition∶inline;filename="".$filename.".xls"")時就會出現亂碼,假如你的網頁編碼就是gb2312那就不用考慮編碼問題了。

解決辦法:對$filename轉碼,執行:iconv('utf-8","gb2312",$filename)。假如你的環境不支持iconv函數可以換別的函數,只要能將$filename的編碼轉為gbk就行。但是這樣問題又會來了,linux用戶又會出現文件名亂碼(因為linux平臺文件名不是gbk編碼)。考慮到這個問題采用兩個辦法:第一,放棄一部分客戶,畢竟windows系統用戶占絕大部分;第二,像gmail一樣,提供兩個下載地址:一個文件名gbk編碼,一個文件名utf-8編碼。

(2)解決Excel內數據的亂碼

PHP導出Excel亂碼的原因:網頁編碼與Excel編碼不一致。

解決辦法:定義Excel的字符集:header("Content-Type∶application/vnd.ms-excel;charset=UTF-8"),讓其與你的網頁編碼一致即可解決Excel內數據亂碼的問題。

PHPExcel導出到xls文件的時候出現內存亂碼,解決代碼如下:ob_end_clean();//清除緩沖區,避免亂碼,通過這個函數清除緩沖區,避免不必要的數據干擾生成的Excel文件導致Excel文件打不開。

4.3.2 分頁導出

實現分頁導出的思路是進入導出頁面時,傳遞查詢相關的參數。導出頁面再做相關的分頁查詢處理。

<li><a href="simple-download-xls.php?xiaoqu=<?php echo$GLOBALS['xiaoqu_query'];?>

&name=<?php echo$GLOBALS['name_query'];?>&start=<?php echo$start_row;?>">導出數據</a></li>

4.3.3 內存溢出

云平臺下使用PHPExcel進行excel數據批量導入,小數據量下測試都沒有問題,可是一到正式環境下,數據超過千條(一行十列為一條數據),就報內存溢出。在不進行特殊設置的情況下,PHPExcel將讀取的單元格信息保存在內存中,我 們 可 以 通 過 代 碼 PHPExcel_Settings∶setCacheStorage-Method()來設置不同的緩存方式,已達到降低內存消耗的目的。可采用的處理方式如下:

(1)將單元格數據序列化后保存在內存中

PHPExcel_CachedObjectStorageFactory∶cache_in_memory_serialized;

(2)將單元格序列化后再進行Gzip壓縮,然后保存在內存中

PHPExcel_CachedObjectStorageFactory∶cache_in_memory_gzip;

(3)緩存在臨時的磁盤文件中,速度可能會慢一些

PHPExcel_CachedObjectStorageFactory∶cache_to_dis -cISAM;

(4)保存在php∶//temp

PHPExcel_CachedObjectStorageFactory∶cache_to_php -Temp;

(5)保存在memcache中

PHPExcel_CachedObjectStorageFactory∶cache_to_memcache

這里限于篇幅不再展開論述。

5 結語

本文以實際項目校園一站式服務系統導出的Excel表為計算基礎,介紹了PHPExcel的基本原理,分析了一站式服務系統中Excel批量數據導入導出的實現思路。并以導出具體操作為例,給出了實現其功能的相關算法。在項目實施過程中,針對可能出現的導出文件亂碼問題、內存溢出問題,進行了分析和研究,并提出了相應的解決辦法。在此基礎上還進行了功能拓展,介紹了實現分頁批量導出Excel表數據技巧。在此應用基礎上,還需要進一步研究的問題有:優化Excel批量數據導出效果,提高導出文件美化效果。

[1]鄭阿奇.PHP實用教程(第2版)[M].北京:電子工業出版社,2014.

[2]唐俊.PHP+MySQL網站開發技術(項目式)[M].北京:人民郵電出版社,2013.

[3]Maarten Balliauw,Mark Baker.PHPExcel developer documentation.2014.

[4]丁月光.PHPExcel文件讀寫[J].電腦編程技巧與維護,2013,(9):14-18.

猜你喜歡
數據庫
數據庫
財經(2017年15期)2017-07-03 22:40:49
數據庫
財經(2017年2期)2017-03-10 14:35:35
兩種新的非確定數據庫上的Top-K查詢
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
數據庫
財經(2015年3期)2015-06-09 17:41:31
數據庫
財經(2014年21期)2014-08-18 01:50:18
數據庫
財經(2014年6期)2014-03-12 08:28:19
數據庫
財經(2013年6期)2013-04-29 17:59:30
主站蜘蛛池模板: 亚洲热线99精品视频| 尤物在线观看乱码| 丝袜无码一区二区三区| 日韩国产黄色网站| 国产精品久久久久久久伊一| 国产在线无码一区二区三区| 国产一区二区网站| 久久精品嫩草研究院| 亚洲无码电影| 精品超清无码视频在线观看| 欧美啪啪视频免码| 国产新AV天堂| 野花国产精品入口| 少妇精品在线| 久久国产乱子伦视频无卡顿| 国内精品免费| 亚洲一区二区成人| 亚洲综合精品第一页| 少妇精品久久久一区二区三区| 人妻精品久久久无码区色视| 色妺妺在线视频喷水| 亚洲欧美另类久久久精品播放的| 日本手机在线视频| 久久久国产精品无码专区| 为你提供最新久久精品久久综合| 国产最新无码专区在线| 亚洲午夜国产精品无卡| 国产无人区一区二区三区| 欧美一区福利| 亚洲精品国产精品乱码不卞| av在线无码浏览| 四虎成人免费毛片| 色哟哟国产精品| 亚洲aaa视频| 色偷偷一区| 偷拍久久网| 亚洲欧美综合另类图片小说区| 国产真实乱子伦精品视手机观看 | 免费人成又黄又爽的视频网站| 人妻中文字幕无码久久一区| 热re99久久精品国99热| 不卡色老大久久综合网| 亚洲精品第一页不卡| 欧美国产在线一区| 国产91丝袜在线播放动漫| 日本成人精品视频| 18黑白丝水手服自慰喷水网站| 91破解版在线亚洲| 真实国产乱子伦视频| 无码区日韩专区免费系列| 中文字幕波多野不卡一区| 视频在线观看一区二区| 免费国产在线精品一区 | 色AV色 综合网站| 欧美一区国产| 五月婷婷伊人网| 99中文字幕亚洲一区二区| 曰韩免费无码AV一区二区| 久久婷婷五月综合色一区二区| 毛片免费试看| 亚州AV秘 一区二区三区| 毛片手机在线看| 亚洲中字无码AV电影在线观看| 亚洲无码视频一区二区三区| 亚洲三级a| 亚洲欧洲美色一区二区三区| 国产无套粉嫩白浆| 又大又硬又爽免费视频| 国产成人免费手机在线观看视频| 日韩精品久久久久久久电影蜜臀| 精品国产美女福到在线不卡f| 欧美一区二区人人喊爽| 麻豆精品在线| 波多野结衣一二三| 一本大道东京热无码av| 亚洲五月激情网| 亚洲国产精品无码久久一线| 波多野结衣国产精品| 成人无码区免费视频网站蜜臀| 國產尤物AV尤物在線觀看| 大香伊人久久| 丁香亚洲综合五月天婷婷|