Thinkphp擴展類一般都放在extend下
寫導入導出的公共方法,方便再控制器中調用
導入excel文件/**
*?導入excel文件
thinkphp源碼安裝教程,*?@param??string?$file?excel文件路徑
*?@return?array????????excel文件內容數組
*/
function?import_excel($file){
//?判斷文件是什么格式
thinkphp6教程、$type?=?pathinfo($file);
$type?=?strtolower($type["extension"]);
$type=$type==='csv'???$type?:?'Excel5';
ini_set('max_execution_time',?'0');
Loader::import('PHPExcel.PHPExcel');
thinkphp5.1開發手冊。//?判斷使用哪種格式
$objReader?=?PHPExcel_IOFactory::createReader($type);
$objPHPExcel?=?$objReader->load($file);
$sheet?=?$objPHPExcel->getSheet(0);
//?取得總行數
thinkphp博客,$highestRow?=?$sheet->getHighestRow();
//?取得總列數
$highestColumn?=?$sheet->getHighestColumn();
//循環讀取excel文件,讀取一條,插入一條
$data=array();
thinkphp5菜鳥教程、//從第一行開始讀取數據
for($j=1;$j<=$highestRow;$j++){
//從A列讀取數據
for($k='A';$k<=$highestColumn;$k++){
//?讀取單元格
$data[$j][]=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue();
}
}
return?$data;
}
數組轉xls格式的excel文件/**
*?數組轉xls格式的excel文件
*?@param??array??$data??????需要生成excel文件的數組
*?@param??string?$filename??生成的excel文件名
*??????示例數據:
$data?=?array(
array(NULL,?2010,?2011,?2012),
array('Q1',???12,???15,???21),
array('Q2',???56,???73,???86),
array('Q3',???52,???61,???69),
array('Q4',???30,???32,????0),
);
*/
function?create_xls($data,$filename='simple.xls'){
ini_set('max_execution_time',?'0');
Loader::import('PHPExcel.PHPExcel');
$filename=str_replace('.xls',?'',?$filename).'.xls';
$phpexcel?=?new?PHPExcel();
$phpexcel->getProperties()
->setCreator("Maarten?Balliauw")
->setLastModifiedBy("Maarten?Balliauw")
->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");
$phpexcel->getActiveSheet()->fromArray($data);
$phpexcel->getActiveSheet()->setTitle('Sheet1');
$phpexcel->setActiveSheetIndex(0);
header('Content-Type:?application/vnd.ms-excel');
header("Content-Disposition:?attachment;filename=$filename");
header('Cache-Control:?max-age=0');
header('Cache-Control:?max-age=1');
header?('Expires:?Mon,?26?Jul?1997?05:00:00?GMT');?//?Date?in?the?past
header?('Last-Modified:?'.gmdate('D,?d?M?Y?H:i:s').'?GMT');?//?always?modified
header?('Cache-Control:?cache,?must-revalidate');?//?HTTP/1.1
header?('Pragma:?public');?//?HTTP/1.0
$objwriter?=?PHPExcel_IOFactory::createWriter($phpexcel,?'Excel5');
$objwriter->save('php://output');
exit;
}
數據轉csv格式的excle/**
*?數據轉csv格式的excle
*?@param??array?$data??????需要轉的數組
*?@param??string?$header???要生成的excel表頭
*?@param??string?$filename?生成的excel文件名
*??????示例數組:
$data?=?array(
'1,2,3,4,5',
'6,7,8,9,0',
'1,3,5,6,7'
);
$header='用戶名,密碼,頭像,性別,手機號';
*/
function?create_csv($data,$header=null,$filename='simple.csv'){
//?如果手動設置表頭;則放在第一行
if?(!is_null($header))?{
array_unshift($data,?$header);
}
//?防止沒有添加文件后綴
$filename=str_replace('.csv',?'',?$filename).'.csv';
ob_clean();
Header(?"Content-type:??application/octet-stream?");
Header(?"Accept-Ranges:??bytes?");
Header(?"Content-Disposition:??attachment;??filename=".$filename);
foreach(?$data?as?$k?=>?$v){
//?如果是二維數組;轉成一維
if?(is_array($v))?{
$v=implode(',',?$v);
}
//?替換掉換行
$v=preg_replace('/\s*/',?'',?$v);
//?解決導出的數字會顯示成科學計數法的問題
$v=str_replace(',',?"\t,",?$v);
//?轉成gbk以兼容office亂碼的問題
echo?iconv('UTF-8','GBK',$v)."\t\r\n";
}
}
使用示例:
導入原理:
將要導入的文件先通過Thinkphp方法上傳到服務器,再根據上傳后的路徑去調用公共導入方法,傳入要導入的excel的文件路徑,如下public?function?importUser(){
$data=import_excel('./a.xls');
print_r($data);
exit;
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态