『壹』 thinkphp5.0 如何導入phpexcel插件,能詳細些點嗎
下載phpexcel,將整個文件夾放到vendor文件夾裡面,如下圖
vendor("PHPExcel.PHPExcel");
$objPHPExcel=newPHPExcel();
$file_name=date('YmdHis').'.xls';
header("Content-Disposition:attachment;filename=".$file_name);
$objActSheet=$objPHPExcel->getActiveSheet()->setTitle('成績單');
$objActSheet->SetCellValue('A1','ID');
$objActSheet->SetCellValue('B1','名稱');
$objActSheet->SetCellValue('C1','分數');
$list="";//數據列表
if($list){
foreach($listas$k=>$v){
$i=$k+2;
$objActSheet->SetCellValue('A'.$i,''.$v['id']);
$objActSheet->SetCellValue('B'.$i,''.$v['name']);
$objActSheet->SetCellValue('C'.$i,''.$v['score']);
}
$objWriter=newPHPExcel_Writer_Excel5($objPHPExcel);
$objWriter->save('php://output');//輸出到瀏覽器
exit;
}
『貳』 thinkphp 導出excel 怎麼合並單元格
PHPexcel導出_帶合並單元格/邊框背景/_有效果圖_thinkphp
##供稿單位導出
public function gonggao_excel(){
$color='0xCC000000';
//查詢所有供稿單位
$order='paixu asc,id desc';
$where=array('token'=>$this->token,'status'=>'1');
$data=M('gonggao')->where($where)->order($order)->select();
//增加供稿單位的文章數量
foreach ($data as $key => $value) {
$data[$key]['shuliang']=M('img')->where(array('gonggaoid'=>$value['id']))->count();
$data[$key]['title']=M('img')->where(array('gonggaoid'=>$value['id']))->getfield('title',true);
}
// //查詢出所有行數
// $all_count=0;
// foreach ($data as $key => $value) {
// if(!empty($value['title'])){
// $all_count=$all_count+count($value['title']);
// }else{
// $all_count++;
// }
//重組數組
foreach ($data as $key => $value) {
if(!empty($value['title'])){
foreach ($value['title'] as $k => $v) {
$newData[]=$v;
}
}else{
$newData[]='';
}
}
//mp($newData);
//mp($data);
//die;
// 引用phpexcel類
import('Lib/ORG/PHPExcel');
// 創建對象
$objPHPExcel = new PHPExcel();
// 顯示錯誤信息
error_reporting(E_ALL);
// Set properties
$objPHPExcel->getProperties()->setCreator("趙英傑")
->setLastModifiedBy("趙英傑")
->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");
// 設置寬度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(40);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(60);
// 設置行高度
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20); //設置默認行高
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(30); //第一行行高
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20); //第二行行高
// 字體和樣式
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(12); //字體大小
$objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getFont()->setBold(false); //第二行是否加粗
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true); //第一行是否加粗
$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(16); //第一行字體大小
// 設置垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//邊框樣式
$styleArray = array(
'borders' => array(
'allborders' => array(
//'style' => PHPExcel_Style_Border::BORDER_THICK,//邊框是粗的
'style' => PHPExcel_Style_Border::BORDER_THIN,//細邊框
'color' => array('argb' => $color),
),
),
);
$objPHPExcel->getActiveSheet()->getStyle('A2:D2')->applyFromArray($styleArray);
//邊框
//$objPHPExcel->getActiveSheet()->getStyle('A2:D2')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// 設置水平居中
$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 合並
$objPHPExcel->getActiveSheet()->mergeCells('A1:D1');
// 表頭
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '供稿單位文章統計')
->setCellValue('A2', '編號')
->setCellValue('B2', '供稿單位')
->setCellValue('C2', '文章數量')
->setCellValue('D2', '文章名稱');
// 內容
// for ($i = 0, $len = count($data); $i < $len; $i++) {
// $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 3), $i);
// $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 3), $data[$i]['gonggao']);
// $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 3), $data[$i]['shuliang']);
// $objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $data[$i]['status']);
// $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
// $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16);
// }
//重構內容-文章名稱錄入
for ($i = 0, $len = count($newData); $i < $len; $i++) {
$objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 3), $newData[$i]);
$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//左對齊
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
//邊框設置
//$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// $objPHPExcel->getActiveSheet()->getRowDimension($i + 3)->setRowHeight(16); //重構行高
$objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 3) . ':D' . ($i + 3))->applyFromArray($styleArray);
}
// //查詢出所有行數
// $all_count=0;
// foreach ($data as $key => $value) {
// if(!empty($value['title'])){
// $all_count=$all_count+count($value['title']);
// }else{
// $all_count++;
// }
//合並對應單元格並錄入編號/供稿單位/數量。
$ii=3;//從第三行開始的
for ($i = 0, $len = count($data); $i < $len; $i++) {
if(count($data[$i]['title'])>0){
//合並 注意-1,因為當前單位有內容且是第一篇
$objPHPExcel->getActiveSheet()->mergeCells('A' . ($ii) . ':A' . ($ii-1+count($data[$i]['title']) ));
$objPHPExcel->getActiveSheet()->mergeCells('B' . ($ii) . ':B' . ($ii-1+count($data[$i]['title']) ));
$objPHPExcel->getActiveSheet()->mergeCells('C' . ($ii) . ':C' . ($ii-1+count($data[$i]['title']) ));
//錄入記錄
$objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($ii), $i+1);
$objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($ii), $data[$i]['gonggao']);
$objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($ii), count($data[$i]['title']));
//居中
$objPHPExcel->getActiveSheet()->getStyle('A' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$ii=$ii-1+count($data[$i]['title']);
$ii++;
}else{
//錄入記錄
$objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($ii), $i+1);
$objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($ii), $data[$i]['gonggao']);
$objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($ii), count($data[$i]['title']));
//居中
$objPHPExcel->getActiveSheet()->getStyle('A' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C' . ($ii))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$ii++;
}
}
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('供稿單位文章統計');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// 輸出
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . '供稿單位' . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
『叄』 php導出帶圖片的excel
比較大條的一個類庫,官方最新版已經蹦到7.多M大了。找了個民間精簡版1.多M的。
下面是這個PHP excel類庫
的一些使用方法要點備忘。來自互聯網。
官方網站:http://phpexcel.codeplex.com/
//設置PHPExcel類庫的include path
set_include_path('.'. PATH_SEPARATOR .
'include path' . PATH_SEPARATOR .
get_include_path());
/**
* 如果使用 Excel5 ,輸出的內容應該是GBK編碼。
*/
require_once 'PHPExcel.php';
//團絕扮 uncomment
////require_once 'PHPExcel/Writer/Excel5.php'; // 用於其他低版本xls
// or
////require_once 'PHPExcel/Writer/Excel2007.php'; // 用於 excel-2007 格式
// 創建一個處理對象實例
$objExcel = new PHPExcel();
// 創建文件格式寫入對象實例, uncomment
////$objWriter = new PHPExcel_Writer_Excel5($objExcel); // 用於其他版本格式
// or
////$objWriter = new PHPExcel_Writer_Excel2007($objExcel); //塌灶 用於 2007 格式
//$objWriter->setOffice2003Compatibility(true);
//*************************************
//設置文檔基本屬性
$objProps = $objExcel->getProperties();
$objProps->setCreator(「Zeal Li」宏碼);
$objProps->setLastModifiedBy(「Zeal Li」);
$objProps->setTitle(「Office XLS Test Document」);
$objProps->setSubject(「Office XLS Test Document, Demo」);
$objProps->setDescription(「Test document, generated by PHPExcel.」);
$objProps->setKeywords(「office excel PHPExcel」);
$objProps->setCategory(「Test」);
//*************************************
//設置當前的sheet索引,用於後續的內容操作。
//一般只有在使用多個sheet的時候才需要顯示調用。
//預設情況下,PHPExcel會自動創建第一個sheet被設置SheetIndex=0
$objExcel->setActiveSheetIndex(0);
$objActSheet = $objExcel->getActiveSheet();
//設置當前活動sheet的名稱
$objActSheet->setTitle(『測試Sheet』);
//*************************************
//設置單元格內容
//
//由PHPExcel根據傳入內容自動判斷單元格內容類型
$objActSheet->setCellValue(『A1′, 『字元串內容』); // 字元串內容
$objActSheet->setCellValue(『A2′, 26); // 數值
$objActSheet->setCellValue(『A3′, true); // 布爾值
$objActSheet->setCellValue(『A4′, 『=SUM(A2:A2)』); // 公式
//顯式指定內容類型
$objActSheet->setCellValueExplicit(『A5′, 』847475847857487584′,
PHPExcel_Cell_DataType::TYPE_STRING);
//合並單元格
$objActSheet->mergeCells(『B1:C22′);
//分離單元格
$objActSheet->unmergeCells(『B1:C22′);
//*************************************
//設置單元格樣式
//
//設置寬度
$objActSheet->getColumnDimension(『B』)->setAutoSize(true);
$objActSheet->getColumnDimension(『A』)->setWidth(30);
$objStyleA5 = $objActSheet->getStyle(『A5′);
//設置單元格內容的數字格式。
//
//如果使用了 PHPExcel_Writer_Excel5 來生成內容的話,
//這里需要注意,在 PHPExcel_Style_NumberFormat 類的 const 變數定義的
//各種自定義格式化方式中,其它類型都可以正常使用,但當setFormatCode
//為 FORMAT_NUMBER 的時候,實際出來的效果被沒有把格式設置為」0″。需要
//修改 PHPExcel_Writer_Excel5_Format 類源代碼中的 getXf($style) 方法,
//在 if ($this->_BIFF_version == 0×0500) { (第363行附近)前面增加一
//行代碼:
//if($ifmt === 』0′) $ifmt = 1;
//
//設置格式為PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大數字
//被使用科學記數方式顯示,配合下面的 setAutoSize 方法可以讓每一行的內容
//都按原始內容全部顯示出來。
$objStyleA5
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);
//設置字體
$objFontA5 = $objStyleA5->getFont();
$objFontA5->setName(『Courier New』);
$objFontA5->setSize(10);
$objFontA5->setBold(true);
$objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
$objFontA5->getColor()->setARGB(『FF999999′);
//設置對齊方式
$objAlignA5 = $objStyleA5->getAlignment();
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
//設置邊框
$objBorderA5 = $objStyleA5->getBorders();
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getTop()->getColor()->setARGB(『FFFF0000′); // color
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//設置填充顏色
$objFillA5 = $objStyleA5->getFill();
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objFillA5->getStartColor()->setARGB(『FFEEEEEE』);
//從指定的單元格復制樣式信息.
$objActSheet->plicateStyle($objStyleA5, 『B1:C22′);
//*************************************
//添加圖片
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName(『ZealImg』);
$objDrawing->setDescription(『Image inserted by Zeal』);
$objDrawing->setPath(『./zeali.net.logo.gif』);
$objDrawing->setHeight(36);
$objDrawing->setCoordinates(『C23′);
$objDrawing->setOffsetX(10);
$objDrawing->setRotation(15);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(36);
$objDrawing->setWorksheet($objActSheet);
//添加一個新的worksheet
$objExcel->createSheet();
$objExcel->getSheet(1)->setTitle(『測試2′);
//保護單元格
$objExcel->getSheet(1)->getProtection()->setSheet(true);
$objExcel->getSheet(1)->protectCells(『A1:C22′, 『PHPExcel』);
//*************************************
//輸出內容
//
$outputFileName = 「output.xls」;
//到文件
////$objWriter->save($outputFileName);
//or
//到瀏覽器
////header(「Content-Type: application/force-download」);
////header(「Content-Type: application/octet-stream」);
////header(「Content-Type: application/download」);
////header(『Content-Disposition:inline;filename=」『.$outputFileName.』」『);
////header(「Content-Transfer-Encoding: binary」);
////header(「Expires: Mon, 26 Jul 1997 05:00:00 GMT」);
////header(「Last-Modified: 」 . gmdate(「D, d M Y H:i:s」) . 」 GMT」);
////header(「Cache-Control: must-revalidate, post-check=0, pre-check=0″);
////header(「Pragma: no-cache」);
////$objWriter->save(『php://output』);
這個php的excel類庫
是目前見到功能最好的。
以上引用自:http://sjolzy.cn/PHP-generated-excel-useful-powerful-php-excel-library.html
你用這個,瀏覽器就會提示下載了(chrome默認是保存在 我的文檔/Downloads里,不會提示下載,不知算不算?^_^)