1、所用的框架是Thinktp框架
2、所用插件PHPExcel
将我们的下载的PHPExcel放入ThinkPHP\Library\Vendor中具置看自身实际情况
导入读取excl表格vendor('PHPExcel.PHPExcelUser');//引用文件
$excel=new\PHPExcelUser($file);//打开$fileexcl文件;
$data=$excel-excelImport(0);//0代表从第一行开始
导入后通过循环对数据进行处理和保存;
导出数据$excel=new\PHPExcelUser($FileName);//这里的$FileName是文件的导出名称;
$excel-excelExport($data,$title);//这里$data为数据,$title为表格的标题;
导入导出比较简单,这里整理了一些遇到的问题:
导入时间问题在导入表格中的时间格式需要转换一下,转换函数如下:
functionexcelTime($date,$time=false){
if(function_exists('GregorianToJD')){
if(is_numeric($date)){
$jd=GregorianToJD(1,1,1970);
$gregorian=JDToGregorian($jd+intval($date)-25569);
$date=explode('/',$gregorian);
$date_str=str_pad($date[2],4,'0',STR_PAD_LEFT)
.-.str_pad($date[0],2,'0',STR_PAD_LEFT)
.-.str_pad($date[1],2,'0',STR_PAD_LEFT)
.($time?00:00:00:'');
return$date_str;
}
}else{
$date=$date25568?$date+1:25569;
/*TherewasabugifConvertingdatebefore1-1-1970(tstamp0)*/
$ofs=(70*365+17+2)*86400;
$date=date(Y-m-d,($date*86400)-$ofs).($time?00:00:00:'');
}
return$date;
}
这样就能到就是一个标准的时间格式,不然就是一个数字(非时间戳);
长数字字符串在表格中被转换成了科学计数法的数字最简单的方法在字符串前面加个空格或者用
$objActSheet-setCellValueExplicit('A1','330602198804224688',PHPExcel_Cell_DataType::TYPE_STRING);
将a1列的定义为字符串
Unknowncodepage:10008PHPExcel_Shared_CodePage::NumberToName(%d)PHPExcel/Shared/CodePage.php98break()原因是NumberToName()方法中没有10008对应的情况处理,所以会抛出Unknowncodepage:10008异常。
找到PHPExcel/Shared/CodePage.php文件添加
case10008:return'MAC';break;//在mac苹果系统下面会出现这个问题
四、下载出来乱码情况一般是缓冲问题
ob_end_clean();//清除缓冲区,避免乱码
vendor('PHPExcel.PHPExcelUser');
$file=.'/cs.xlsx';//这是路径
$excel=new\PHPExcelUser($file);
$data=$excel-excelImport(1);
//excel表导出
ob_end_clean();//清除缓冲区,避免乱码
header(Content-type:text/html;charset=utf-8);
vendor('PHPExcel.PHPExcelUser');
$file='cs.xlsx';
$excel=new\PHPExcelUser($file);
$data=array();//数据二维数组
$title=array();//数据标题一维数组
$excel-excelExport($data,$title);