使用fromArray填充数据

fromArray定义在 C:\wamp\www\email_notice_qpy\Include\Library\Vendor\PHPExcel\PHPExcel\Worksheet.php中

如果想要修改起始单元格位置,可以使用startCell参数,注意,实参要跟形参一一对应

下载excel时不想要刷新页面

function httpPost(URL, PARAMS, target="") {
    var temp = document.createElement("form");
    temp.action = URL;
    temp.target = target;
//   temp.target = "_blank";
    temp.method = "post";
    temp.style.display = "none";
    for (var x in PARAMS) {
        var opt = document.createElement("textarea");
        opt.name = PARAMS[x]['name'];
        opt.value = PARAMS[x]['value'];
        temp.appendChild(opt);
    document.body.appendChild(temp);
    temp.submit();
    return temp;
function export_data(){
    if(!$("#s_product_id").val()){
        alert("Product can't be null!");
        return false;
    url = "{:U('Admin/Ppa/export_excel/')}";
    conversion_data=$("#convart_data_form_id").serializeArray();
    httpPost(url, conversion_data, target="")
namespace Admin\Controller;
use Think\Controller;
class EngageController extends Controller {
    public function read_excel(){
        header("Content-type: text/html; charset=utf-8");
        // ob_clean();
        // ob_start();
        // set_time_limit(1000000);
        // ini_set('memory_limit','-1');
        set_time_limit(0);//设置不超时
        @ini_set('memory_limit', '512M');//设置PHP能使用的内存大小
        /** PHPExcel_IOFactory */
        vendor('PHPExcel.PHPExcel','','.php');
        vendor('PHPExcel.PHPExcel.IOFactory','','.php');
        // require_once './PHPExcel/IOFactory.php';
        $filename = './Uploads/VPU_PPA_model.xlsx';
        // Check prerequisites
        if (!file_exists($filename)) {
            exit("not found $filename.\n");
        $reader = \PHPExcel_IOFactory::createReader('Excel2007'); //设置以Excel5格式(Excel97-2003工作簿)
        $PHPExcel = $reader->load($filename); // 载入excel文件
        echo "sheetCount: ".$PHPExcel->getSheetCount();
        $sheet = $PHPExcel->getSheet(0); // 读取第一個工作表
        $highestRow = $sheet->getHighestRow(); // 取得总行数
        $highestColumm = $sheet->getHighestColumn(); // 取得总列数
        $str = '';
        $str .= '<table border="1" cellspacing="0" bordercolor="#eeeeee" cellpadding="5" width="100%">';
        //按照excel表格格式输出A-Z列
        $str .= '<tr>';
            $str .= '<td></td>';
        for($column = 'A'; $column <= $highestColumm; $column++){
            $str .= '<td>' .$column. '</td>';
        $str .= '</tr>';
        //按照excel表格的格式从1开始累计
        for ($row = 1; $row <= $highestRow; $row++){//行数是以第1行开始  
            $str .= '<tr>';
                $str .= '<td>' .$row. '</td>';
                //输出excel表格的内容
                for($column = 'A'; $column <= $highestColumm; $column++){
                    $str .= '<td>' .$sheet->getCell($column.$row)->getValue(). '</td>';
            $str .= '</tr>';
        $str .= '<table>';
        echo $str;
View Code
$objPHPExcel = new PHPExcel();  //实例化PHPExcel类库,相当于新建一个Excel表
$objSheet = $objPHPExcel->getActiveSheet();  //获取当前活动sheet
$objSheet->setTitle('sheet的名字');  //给当前的活动sheet起个名称

 3.页面设置

//设置打印 页面 方向与大小(此为横向)
$objSheet->getStyle('A6:G6')->applyFromArray($styleThinBlackBorderOutline);    
//方向
$objSheet->getPageSetup()->setOrientation(\PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); 
//大小
$objSheet->getPageSetup()->setPaperSize(\PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
$objSheet->setCellValue('A1','XXXXXX');  //设置单元格的值
$objPHPExcel->getActiveSheet()->setCellValue('C9', "=SUM(A9:B9)");
$objSheet->getStyle('A1')->getFont()->setName('宋体')->setSize(16)->setBold(true);  //设置单元格的字体,字体大小,是否加粗
$objSheet->mergeCells('A1:G1');  //合并单元格
$objSheet->unmergeCells('A1:H1');  //拆分单元格
$objSheet->setCellValue('A1',"咨询有限公司\n联系人:王小姐\nTEL:8888888\n");  //单元格内容自动根据要求换行,必须要用双引号
$objSheet->getStyle('A1')->getAlignment()->setWrapText(true);  //长度不够显示的时候 是否自动换行
$objSheet->getStyle('B')->getAlignment()->setWrapText(true);   //长度不够显示的时候 是否自动换行
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);   //水平居中
$objSheet->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);   //垂直居中
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);  //向右居中
$objSheet->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);  //向左居中
$objSheet->getStyle('A6:G6')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF808080');  
//设置单元格背景颜色 $styleThinBlackBorderOutline = array( //设置单元格边框   'borders' => array(     'allborders' => array( //设置全部边框     'style' => \PHPExcel_Style_Border::BORDER_THIN, //粗的是thick,BORDER_THIN,BORDER_MEDIUM和BORDER_THICK。     'color' => array ('argb' => '000000'), $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false); // 隐藏D列

1)设置单元格宽与高

$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);  #设置单元格默认行高
$objPHPExcel->getActiveSheet()->getRowDimension('9')->setRowHeight(20);      #设置行高
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);       #设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);       #设置单元格自适应宽度
$objSheet->getDefaultStyle()->getAlignment()->setWrapText(true);   //长度不够显示的时候 是否自动换行

2)设置不同的数据

$objPHPExcel->getActiveSheet()->getCell('C2')->setValueExplicit('861391327543258', PHPExcel_Cell_DataType::TYPE_NUMERIC);  
// 日期
$objPHPExcel->getActiveSheet()->setCellValue('G2', '2008-12-31');   
$objPHPExcel->getActiveSheet()->getStyle('G2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
// 时间戳
$time = gmmktime(0,0,0,12,31,2008); // int(1230681600)
$objPHPExcel->getActiveSheet()->setCellValue('G3', PHPExcel_Shared_Date::PHPToExcel($time));
$objPHPExcel->getActiveSheet()->getStyle('G3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);
// url
$objPHPExcel->getActiveSheet()->setCellValue('G11', 'blog.c1gstudio.com');
$objPHPExcel->getActiveSheet()->getCell('G11')->getHyperlink()->setUrl('http://blog.c1gstudio.com');
// 另一个sheet
$objPHPExcel->getActiveSheet()->setCellValue('G12', 'sheetb');
$objPHPExcel->getActiveSheet()->getCell('G12')->getHyperlink()->setUrl("sheet://'sheetb'!A1");

3)设置行的折叠与展开

//后续再研究
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setVisible(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setOutlineLevel(1);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setVisible(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setCollapsed(true);

4)整体填充数据

4 phpexcel设置所有单元格为默认的水平垂直居中

$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

5 phpexcel 设置excel单元格宽高

$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(20);  #设置单元格行高
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);       #设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);       #设置单元格自适应宽度

参考:https://blog.csdn.net/PhperX/article/details/109742316

//下面的两种写法都可以,E1与A2代表excel的表格位置。
$objPHPExcel->getActiveSheet()->getComment('A1') ->getText()->createTextRun('批注内容');
$objPHPExcel->setActiveSheetIndex(0)->getComment( 'A2')->getText()->createTextRun('批注内容' );
//重点来了:
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//createWriter()的第二个参数必须是 Excel2007 才可以,Excel5不支持。

导出后的带批注excel文件:

// 保护工作表
$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);

10.PHPExcel报错:'break' not in the 'loop' or 'switch' context

ThinkPHP\Library\Vendor\phpexcel\PHPExcel\Calculation  LINE: 581

直接删除581行的 'break'即可!

12.导出excel文件后打不开,提示“文件格式或文件扩展名无效,请确定文件未损坏,并且文件扩展名与文件的格式匹配”

来自:https://www.cnblogs.com/imustun/p/9156851.html

1.发送header()头之前,不知道又啥特殊字符输出(可能是BOM,也可能是其他),导致php报错!然后将报错内容输出到了Excel
2.极大可能是:文件BOM头问题,生成的Excel文件头部添加了BOM头!

解决方案:

1.在输出Excel前,缓冲区中处理BOM头(可能是其他字符)

ob_end_clean();

ob_start();

在header()函数调用之前,清楚之前的错误输出!

  • ob_get_contents() --- 返回输出缓冲区的内容
  • ob_flush() --- 冲刷出(送出)输出缓冲区中的内容
  • ob_clean() --- 清空(擦掉)输出缓冲区
  • ob_end_flush() --- 冲刷出(送出)输出缓冲区内容并关闭缓冲
  • ob_end_clean() --- 清空(擦除)缓冲区并关闭输出缓冲
  • flush() --- 刷新输出缓冲    
  • 2.有人第一步过后,问题未解决。通过ob_get_contents()查看导出内容,并未发现BOM头。

    再就是应用了框架,返回的静态页输出成了excel文件。

    试了以上方法后,还是没有问题,最后查看导出的文件内容,意识到是跳转到静态页导致的。

    加上 exit($contents); 后问题解决。

    }
    else{ $path='./public/Uploads/'.$data['savename']; header("Content-Type:".$data['type']); header('Content-Disposition: attachment; filename="'.$data['name'].'"'); header('Content-Length:'.$data['size']); ob_clean(); flush(); readfile($path);

    ob_clean();
    flush();这个是关键。用了这两函数,图片正常打开,文字也不乱码。

    phpexcel 合并单元格后的动态行高

    思路参考:https://www.it1352.com/1745868.html,如下所示:

    You can also do it like this

  • Merge cells you want, for example: A7:C7
  • Copy context of it to one cell for instance Z7
  • Set the width of the merged cells to Z7
  • Apply Wrap Text to the Z7
  • Make Z7 not visible
  • $objActSheet->getColumnDimension('A')->setWidth(26);
            for($i=1;$i<14;$i++){
                $objActSheet->getColumnDimension($col_name[$i])->setWidth(17);
            $objActSheet->getColumnDimension('Z')->setWidth(43);
            $objActSheet->getStyle('A:Z')->getAlignment()->setWrapText(true); //Adaptive line feed
    ......
    $objActSheet->setCellValue('Z'.$current_row,$val);
    $objActSheet->getColumnDimension('Z')->setVisible(false);
    ......

    PHPExcel 如何只获取 1 个单元格值

    $objPHPExcel->getActiveSheet()->getCell('B8')->getValue();
    // Get cell B8
    $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getValue();
    // Get cell B8
    $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(1, 8)->getCalculatedValue();