Thinkphp
$lists = ''; //sql查询结果;
$total_money = '';
$filename="order_excel"; // 文件名称
$headArr=array("ID","用户名称","专家名称","专家订单","订单价格","消费类型","订单类型","订单时间","订单有效期");
$title = "订单明细"; // 文件标题
$total_name = '总金额';
$this->exportExcel($filename,$title,$headArr,$order_listss,$total_name,$total_money);
第一种:
function exportExcel($filename,$expTitle,$expCellName,$expTableData,$total_name='',$total_money='')
{
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $filename.date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
Vendor("PHPExcel.PHPExcel");
Vendor("PHPExcel.PHPExcel.Writer.Excel5");
Vendor("PHPExcel.PHPExcel.PHPExcel.IOFactory.php");
$objPHPExcel = new \PHPExcel();
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i]);
}
$column = 3;
$objActSheet = $objPHPExcel->getActiveSheet(0);
foreach($expTableData as $keys => $rows){
$span = ord("A");
foreach($rows as $keyName=>$value){
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
if (!empty($total_money) && !empty($total_name))
{
$objActSheet->setCellValue('A'.$column, $total_name);
$objActSheet->setCellValue('B'.$column, $total_money[0]['total_money']);
}
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
第二种:
/**
* excel表格导出
* @param string $fileName 文件名称
* @param array $expTitle 表头名称
* @param array $expTableData 要导出的数据
* @author static7 */
function exportExcel($filename,$expTitle,$expCellName,$expTableData)
{
// $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
// $fileName = $expTitle;//or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
vendor("PHPExcel");
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->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");
ob_clean(); //解决文件损坏
// Add some data
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
// $nowDate = date('Y-m-d H:i', time());
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1'); //合并单元格
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' 导出时间:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i]);
}
$column = 3;
$objActSheet = $objPHPExcel->getActiveSheet(0);
foreach($expTableData as $keys => $rows){ // 行写入
$span = ord("A");
foreach($rows as $keyName => $value){ // 列写入
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
// Rename worksheet 重命名工作表,修改sheet名称
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=$filename.xlsx");
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
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($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
}
YII
一 :导入excel文件
引入phpexcel类库
require(Yii::getAlias('@common').'/library/PHPExcel/PHPExcel.PHP'); //这是yii的引入方式 根据情况自己引入类库
1.要上传文件
if (!empty ( $_FILES ['excel'] ['name'] )){
$tmp_file = $_FILES ['excel'] ['tmp_name'];
$file_types = explode ( ".", $_FILES ['excel'] ['name'] );
$file_type = end($file_types);
/*判别是不是.xls文件,判别是不是excel文件*/
if ((strtolower ($file_type) != "xls") && (strtolower ($file_type) != "xlsx")&& (strtolower ($file_type) != "csv")){
$error ="文件类型不对";
die;
}
//DS 是自己定义的/ 和在Linux里是\ 需要自己定义
$dir=date("Y-m-d",time());
if(!is_dir(ROOT_PATH.DS."upload".DS."excel".DS.$dir)){
mkdir(ROOT_PATH.DS."upload".DS."excel".DS.$dir);
}
//注意,如果upload前加 / 则报错。
$path = 'upload'.DS.'excel'.DS.$dir.DS. time().rand(1000,9999) . '.' . $file_type;
$pic_name = time() . rand(10000, 99999) . "." . $file_type;//图片名称
if (!move_uploaded_file($tmp_file, $path)) { //临时文件转移到目标文件夹
$error ="上传失败";
return $this->redirect(['index',
'error' => $error,
]);
die;
}
2.读取上传的文件
//加载导入类
$PHPExcel=new \PHPExcel();
$PHPReader = new \PHPExcel_Reader_Excel2007();
if(!$PHPReader->canRead($path)){
$PHPReader = new \PHPExcel_Reader_Excel5();
if(!$PHPReader->canRead($path)){
return false;
}
}
$PHPExcel=$PHPReader->load($path);//载入文件
// print_r($PHPExcel);die;
$currentSheet=$PHPExcel->getSheet(0); //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
$allColumn=$currentSheet->getHighestColumn();//获取总列数d
++$allColumn;
$allRow=$currentSheet->getHighestRow();//获取总行数
// echo $allRow;die;
// print_r($allRow);die;
$arr=array();
for($currentRow = 3;$currentRow <= $allRow;$currentRow++){
/**从第A列开始输出*/
$i=0;
for($currentColumn = 'A'; $currentColumn !=$allColumn; $currentColumn++){ //大于26列
if($i>25){
$num =ord($currentColumn)+$i;
}else{
$num =ord($currentColumn);
}
// echo $i.$currentColumn; echo "
";
$val = $currentSheet->getCellByColumnAndRow($num - 65,$currentRow)->getValue(); /*ord()将字符转为十进制数*/
/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
// $arr[$currentRow][]= iconv('utf-8','gb2312', $val)."\t";
$arr[$currentRow][]= trim($val);
$i++;
}
}
//删除全部为空的行
foreach ($arr as $key=>$vals){
$tmp = '';
foreach($vals as $v){
$tmp .= $v;
}
if(!$tmp) unset($arr[$key]);
}
print_r($arr);die;
二:导出excel
public function getExcel($fileName,$headArr,$data){
//$headArr, 设置的表头
//$data 传过来的需要导出的数据 二维数组
$date = date("Y_m_d",time());
$fileName .= "_{$date}.xls";
//创建PHPExcel对象,注意,不能少了\
$objPHPExcel = new \PHPExcel();
$objProps = $objPHPExcel->getProperties();
//设置表头 超过26列
$key = 0;
foreach($headArr as $v){
//注意,不能少了。将列数字转换为字母\
$colum = \PHPExcel_Cell::stringFromColumnIndex($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
}
//设置表头
/* $key = ord("A");
//print_r($headArr);exit;
foreach($headArr as $v){
$colum = chr($key);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
$key += 1;
}*/
$column = 2; //从第二行写入数据 第一行是表头
$objActSheet = $objPHPExcel->getActiveSheet();
//print_r($data);exit;
/*foreach($data as $key => $rows){ //行写入
$span = ord("A");
foreach($rows as $keyName=>$value){// 列写入
$j = chr($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}*/
此处解决列超出26的问题
foreach($data as $key => $rows){ //行写入
$span = 0;
foreach($rows as $keyName=>$value){// 列写入
$j = \PHPExcel_Cell::stringFromColumnIndex($span);
$objActSheet->setCellValue($j.$column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName);
/* //重命名表
$objPHPExcel->getActiveSheet()->setTitle($date);
//设置字体大小
$objPHPExcel->getDefaultStyle()->getFont()->setSize(14);
//设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
//设置默认行高
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(23);
*/
//重命名表
//$objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean();//清除缓冲区,避免乱码
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
exit;