摘要:導(dǎo)出成為在絕大多數(shù)情況下,導(dǎo)出其實(shí)就是將二維數(shù)組轉(zhuǎn)化為表格。要保存的的名字轉(zhuǎn)換為表格的二維數(shù)組設(shè)置表格填充數(shù)據(jù)設(shè)置表格并輸出導(dǎo)入同理,導(dǎo)入其實(shí)就是將的數(shù)據(jù)轉(zhuǎn)化成為二維數(shù)組,這就要求必須符合格式。
遇到問(wèn)題
平時(shí)在工作中,時(shí)常會(huì)出現(xiàn)將數(shù)據(jù)庫(kù)表導(dǎo)出為Excel或者將Excel導(dǎo)入數(shù)據(jù)庫(kù)表的需求。這一需求早早就已經(jīng)實(shí)現(xiàn)過(guò)了,為了方便導(dǎo)入導(dǎo)出,我將其封裝成了兩個(gè)方法,作為記錄。
代碼實(shí)現(xiàn) phpexcel類(lèi)庫(kù)的引用phpexcel擁有強(qiáng)大的Excel處理能力,在packagist上已經(jīng)擁有數(shù)百萬(wàn)次的下載量,不過(guò)實(shí)話(huà)實(shí)說(shuō),excel的處理速度仍然是非常慢,數(shù)據(jù)量較大時(shí)慎重使用。在packagist上下載或者直接用composer require phpoffice/phpexcel之后,便可以使用phpexcel了。
導(dǎo)出成為Excel在絕大多數(shù)情況下,導(dǎo)出excel其實(shí)就是將二維數(shù)組轉(zhuǎn)化為表格。
/** * @param $name string 要保存的Excel的名字 * @param $ret_data 轉(zhuǎn)換為表格的二維數(shù)組 * @throws PHPExcel_Exception * @throws PHPExcel_Reader_Exception */ function exportExcel($name, $ret_data){ $objPHPExcel = new PHPExcelPHPExcel(); //設(shè)置表格 $objPHPExcel->getProperties()->setCreator($name) ->setLastModifiedBy($name) ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); //填充數(shù)據(jù) foreach ($ret_data as $key => $row) { $num = $key + 1; //$row = array_values($row); $i=0; foreach ($row as $key2 => $value2) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue( PHPExelCell::stringFromColumnIndex($i). ($num), $value2); $i++; } } //設(shè)置表格并輸出 $objPHPExcel->getActiveSheet()->setTitle($name); header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment;filename={$name}.xls"); header("Cache-Control: max-age=0"); header("Cache-Control: max-age=1"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: cache, must-revalidate"); header("Pragma: public"); // HTTP/1.0 $objWriter = PHPExcelIOFactory::createWriter($objPHPExcel, "Excel5"); $objWriter->save("php://output"); exit; }導(dǎo)入Excel
同理,導(dǎo)入Excel其實(shí)就是將Excel的數(shù)據(jù)轉(zhuǎn)化成為二維數(shù)組,這就要求Excel必須符合格式。
function getRows($inputFileName) { if (!file_exists($inputFileName)) { throw new Exception("File not existed"); } $inputFileType = PHPExcelIOFactory::identify($inputFileName); $objReader = PHPExcelIOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFileName); $objWorksheet = $objPHPExcel->getActiveSheet(); $highestRow = $objWorksheet->getHighestRow(); $highestColumn = $objWorksheet->getHighestColumn(); $highestColumnIndex = PHPExcelCell::columnIndexFromString($highestColumn);//總列數(shù) $row = 1; $curr = array(); while ($row <= $highestRow) { for ($col = 0; $col < $highestColumnIndex; $col++) { $value = str_replace(array(" ", " ", " "), "", $objWorksheet->getCellByColumnAndRow($col, $row)->getValue()); $curr[$row][] = $value; } $row++; } array_shift($curr);//第一行一般是字段名(Excel中列的標(biāo)題),導(dǎo)入時(shí)要移除 return $curr; }其他
導(dǎo)出時(shí)保存的格式是xlsx,想要改成其他格式需要傳入不同的參數(shù)。
導(dǎo)入時(shí)如果有多個(gè)sheet時(shí)需要在上次打開(kāi)時(shí)在要導(dǎo)入的sheet頁(yè)(以保證當(dāng)前sheet為activeSheet)關(guān)閉,或者根據(jù)sheet名在程序中選擇sheet。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21708.html
關(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 // ...
摘要:本文經(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 文...
摘要:本篇文章主要講述,如何在中使用中導(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-...
摘要:上傳添加需下載類(lèi)文件,引入到項(xiàng)目類(lèi)庫(kù)里接收前臺(tái)文件,接收前臺(tái)文件重設(shè)置文件名設(shè)置移動(dòng)路徑表用函數(shù)方法返回?cái)?shù)組創(chuàng)建一個(gè)讀取數(shù)據(jù),可用于入庫(kù)引用類(lèi)靜態(tài)類(lèi)設(shè)置為代表支持或以下版本,代表版開(kāi)始讀取上傳到服務(wù)器中的文件,返回一個(gè)二維數(shù)組 1.上傳添加excel (需下載PHPExcel類(lèi)文件,引入到項(xiàng)目類(lèi)庫(kù)里) //接收前臺(tái)文件, public function addExcel() ...
摘要:場(chǎng)景和痛點(diǎn)說(shuō)明今天因?yàn)橐粋€(gè)老同學(xué)找我,說(shuō)自己公司的物流業(yè)務(wù)都是現(xiàn)在用處理,按月因?yàn)閿?shù)據(jù)量大,一個(gè)差不多有百萬(wàn)數(shù)據(jù),文件有接近,打開(kāi)和搜索就相當(dāng)?shù)穆?lián)想到場(chǎng)景要導(dǎo)入數(shù)據(jù),可能數(shù)據(jù)量很大,這里利用常用的一些方法比如會(huì)常有時(shí)間和內(nèi)存限制問(wèn)題下面我 場(chǎng)景和痛點(diǎn) 說(shuō)明 今天因?yàn)橐粋€(gè)老同學(xué)找我,說(shuō)自己公司的物流業(yè)務(wù)都是現(xiàn)在用excel處理,按月因?yàn)閿?shù)據(jù)量大,一個(gè)excel差不多有百萬(wàn)數(shù)據(jù),文件有接...
閱讀 2031·2021-10-09 09:41
閱讀 1606·2021-09-28 09:36
閱讀 1108·2021-09-26 09:55
閱讀 1298·2021-09-10 11:17
閱讀 1153·2021-09-02 09:56
閱讀 2769·2019-08-30 12:58
閱讀 2937·2019-08-29 13:03
閱讀 1862·2019-08-26 13:40