使用php的時候一定會遇到表格導入導出的功能吧(ba),這裡(lǐ)簡單來(lái)解釋一下PHP中PHPExcel的使用如(rú)何來(lái)導入導出數據。
首先要去(qù)PHPExcel官網下載
這是我項目中的phpexcel類庫
先說(shuō)一下導入 主要是要通過文件(jiàn)上傳,然後獲取到這個上傳的文件(jiàn) 然後可(kě)以用PHPExcel的方法去(qù)讀(dú)取文件(jiàn)的内容 并返回一個數組,然後拼裝你(nǐ)要的數據進行數據庫操作(zuò)
這裡(lǐ)我用的封裝好的方法去(qù)讀(dú)取的excel文件(jiàn)的數據
$filename 文件(jiàn)的地址 需要一個相(xiàng)對路(lù)徑
$begin 從(cóng)第幾行開始讀(dú)取 (這裡(lǐ)一般是第二行 **行基本是内容的标題或者描述)
$allColumn 數據最後一列的字母 比如(rú)第G列是最後的數據列 就(jiù)傳G
封裝方法:
function excelImport($filename, $begin,$allColumn) {
Vendor('PHPExcel.PHPExcel');
//建立reader對象
$PHPReader = new PHPExcel_Reader_Excel2007();
if (!$PHPReader->canRead($filename)) {
$PHPReader = new PHPExcel_Reader_Excel5();
if (!$PHPReader->canRead($filename)) {
return array();
}
}
//建立excel對象,此時你(nǐ)即可(kě)以通過excel對象讀(dú)取文件(jiàn),也可(kě)以通過它寫入文件(jiàn)
$PHPExcel = $PHPReader->load($filename);
/* * 讀(dú)取excel文件(jiàn)中的**個工(gōng)作(zuò)表 */
$currentSheet = $PHPExcel->getSheet(0);
/* * 取得(de)最大(dà)的列号 */
// $allColumn = $currentSheet->getHighestColumn();
/* * 取得(de)一共有多少行 */
$allRow = $currentSheet->getHighestRow();
$returnCell = '';
//循環讀(dú)取每個單元格的内容。注意行從(cóng)1開始,列從(cóng)A開始
for ($rowIndex = $begin; $rowIndex <= $allRow; $rowIndex++) {
for ($colIndex = 'A'; $colIndex <= $allColumn; $colIndex++) {
$addr = $colIndex . $rowIndex;
$cell = $currentSheet->getCell($addr)->getValue();
if ($cell instanceof PHPExcel_RichText) {
//富文本轉換字符串
$returnCell[$rowIndex][$colIndex] = $cell->__toString();
} else {
$returnCell[$rowIndex][$colIndex] = $cell;
}
}
}
return $returnCell;
}
讀(dú)取後會輸出一個數組,如(rú)下
獲取到數據後使用循環取出裡(lǐ)面的數據 完成後清空了一下數據數組
這是簡單兩列數據的導入 .
再來(lái)說(shuō)一下導出
我也是使用的PHPExcel
這裡(lǐ)是先創建一個表格**行的标題數組和導出的文件(jiàn)名稱
一個一維數組鍵名要對應 表格列的字母
下面是要拼裝導出數據
這是一個二維數組 需要 每行對應響應的列的字母
這裡(lǐ)給了一個key值來(lái)确定數據是從(cóng)第幾行開始寫入的
因爲有标題的存在所以是從(cóng)第二行開始如(rú)正式數據,
使用下面這個封裝的導出方法進行導出 ,會自(zì)動使用浏覽器下載你(nǐ)要導出的表格
這裡(lǐ)也封裝了一個導出的方法
/**
* 導出成Excel文件(jiàn)
* @param type $filename 文件(jiàn)名
* @param type $data_title 頭部字段
* @param type $data_content 内容
* @param type $Sheet1
* @param type $save_to_file 是否保存成文件(jiàn),true保存
* @param type $save_path 文件(jiàn)保存路(lù)徑
*/
function excelExport($filename, $data_title, $data_content, $Sheet1 = "Sheet1", $save_to_file = false, $save_path = './Static/File/') {
Vendor('PHPExcel.PHPExcel');
//PHPExcel支持讀(dú)模版 所以我還(hái)是比較喜歡先做好一個Excel的模版 比較好,不然要寫很多代碼 模版我放(fàng)在根目錄了
//創建一個對象
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("qiandai");
//獲取當前活動的表
$objActSheet = $objPHPExcel->setActiveSheetIndex(0);
$objActSheet->setTitle($Sheet1); //工(gōng)作(zuò)表标簽
foreach ($data_title as $data_title_key => $data_title_value) {//寫入文件(jiàn)表頭内容
$objActSheet->setCellValue($data_title_key.'1', $data_title_value);
$objPHPExcel->getActiveSheet()->getColumnDimension($data_title_key)->setWidth(30);//設置列的寬度
}
//現在就(jiù)開始填充數據了 (從(cóng)數據庫中) $data_content
foreach ($data_content as $data_content_value) {//寫入 文件(jiàn)内容
foreach ($data_content_value as $data_content_key => $data_content_value2) {
$objActSheet->setCellValue($data_content_key, $data_content_value2);
}
}
//導出
header('Content-Type: application/vnd.ms-excel;charset=utf-8');
header('Content-Disposition: attachment;filename="' . $filename . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
if ($save_to_file) {
$objWriter->save($save_path . $filename);
} else {
$objWriter->save('php://output');
exit;
}
}
如(rú)果有什麽方法不清楚或者想修改表格的其他(tā)設置的可(kě)以去(qù)查看(kàn)手冊進行添加。
導入導出主要還(hái)是明白(bái)封裝的方法和創建對應的數組,希望能對剛接觸到表格導入導出無法入手的人(rén)有所幫助。