• php 读取和下载execl


    最近用到php 对excel 的操作 下来 小弟为大家 先贴一下自己的代码  有什么补充的 大神们请指点下。感激不尽。

    我用的是yii2   yii2中有类 phpexcel  

    先说说下载吧。 首先下载一个文件是不能 用异步去的 比如ajax  去访问这个方法的是不会下载的 。

    //首先你的引入PHPExcel
    //下载代码
    $fileName = '测试excel';
    $excel = new PHPExcel();
    $excelSheet = $excel->setActiveSheetIndex(0);
    
    $excel->getActiveSheet()->setCellValue('A1', '第一列标题');
    $excel->getActiveSheet()->setCellValue('B1', '第二列标题');
    $excel->getActiveSheet()->setCellValue('C1', '第三列标题');
    $excel->getActiveSheet()->setCellValue('D1', '第四列标题');
    
    // $result  是一个数组。 这是在确定 如果有4列的情况下
    //setCellValueExplicit 也是设置值 我测试的结果是在excel 表格中不会吧数子转化 会直接以文本的格式输出 .
    foreach( $result as $key=> $value){
        $num = $key+2;                      //num 从=2 开始。 key=0
        $excel->getActiveSheet()->setCellValue('A' . $num, $value['值1']);
        $excel->getActiveSheet()->setCellValue('B' . $num, $value['值2']);
        $excel->getActiveSheet()->setCellValueExplicit('C' . $num, $value['值3']); 
        $excel->getActiveSheet()->setCellValueExplicit('D' . $num, $value['值4']);
    }
    
    /**
    *   比如不确定有几列  可以做双循环。  先循环 有多少行 在设置每一列的值
    *   $column  表示有多少列
    *   我这个方法没自己测过 但大致思路是不错的感觉  如有问题大家积极反馈。
    */
    foreach( $result as $key=> $value ){
        $num = $key+2; //由于key=0   num 从=2 开始。num  =1是设置第一列的值
        for( $i='A';$i<=leng($column);$i++){
            //A2,B2,C2,D2    A3,B3,C3,D3  ....  个人觉得效果会是这样。
            $excel->getActiveSheet()->setCellValue( $i . $num, $value['值1']);  
        }
    }
    
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="' . time() . '.xlsx');
    header('Cache-Control: max-age=0');
    
    $objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
    $objWriter->save('php://output');
    exit;

    》》》接下来看 如何读取表格

    $excelRead = new PHPExcel_Reader_Excel2007();
    //canRead  是否能读取文件 不能读取则返回false
    if (!$excelRead->canRead($file)) {
        $excelRead = new PHPExcel_Reader_Excel5();
        if (!$excelRead->canRead($file)) {
            return ['error'=>'不能读取文件'];
        }
    }
    //从文件加载PHPExcel $file 是上传的文件 或者要读取的文件
    $phpExcel = $excelRead->load($file);
    
    $curSheet = $phpExcel->getSheet(0);
    //最大行数
    $rowCount = $curSheet->getHighestRow();
    //最大列数  
    $columnCount = $curSheet->getHighestColumn();
    
    //把读取到的数据放到一个数组中
    
    for ($row = 2; $row <= $rowCount; $row++) {
        $value = [];
        for ($col = 'A'; $col <= $colCount; $col++) {
            $tmp = $col . $row;       //excel 坐标        A2B2 A3B3 A4B4 A5B5 A6B6....
            $value['自定义'] = trim($curSheet->getCell($tmp)->getValue());  //获取对应的值。
        }
        $data[] = $value;
    }
    unset($file); //这里你可以删除临时文件。
    return $data;
  • 相关阅读:
    求全排列,调用C++函数
    ZOJ 3508 (the war)
    HDU 1285
    SDUT--枚举(删数问题)
    SDUT--进制转换
    位运算
    [NOI2015]软件包管理器
    列队[noip2017]
    [APIO2007]动物园
    [NOI2001]炮兵阵地
  • 原文地址:https://www.cnblogs.com/yhl664123701/p/5661318.html
Copyright © 2020-2023  润新知