• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

PhpSpreadsheet 基本使用和导入 导出 模版生成Excel文件

武飞扬头像
withoutfear
帮助1

一. 基本使用

  1.  
    <?php
  2.  
     
  3.  
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
  4.  
    use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;
  5.  
    use PhpOffice\PhpSpreadsheet\Style\Alignment;
  6.  
    use PhpOffice\PhpSpreadsheet\Style\Fill;
  7.  
    use PhpOffice\PhpSpreadsheet\Style\Border;
  8.  
    use PhpOffice\PhpSpreadsheet\Style\Color;
  9.  
    use PhpOffice\PhpSpreadsheet\IOFactory;
  10.  
    use PhpOffice\PhpSpreadsheet\Helper\Html as HtmlHelper;
  11.  
    use PhpOffice\PhpSpreadsheet\Cell\DataType;
  12.  
    use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  13.  
     
  14.  
    $spreadsheet = new Spreadsheet(); //新建文件
  15.  
    // $spreadSheet = IOFactory::load($inputFileName); //载入文件
  16.  
    $sheet = $spreadsheet->getActiveSheet();
  17.  
    //$spreadSheet->getProperties()->setCreator("hellow");//设置作者
  18.  
    //$spreadSheet->getSheetCount();//工作表总数
  19.  
    //$spreadSheet->getSheetNames();//工作表名数组
  20.  
    //$sheet = $spreadSheet->getSheetByName('Sheet1');//根据表名获取工作表
  21.  
    //$sheet = $spreadSheet->getSheet(0);//根据表索引获取工作表
  22.  
    //$sheet = $spreadSheet->setActiveSheetIndex(0);//切换当前工作表
  23.  
    //$sheet = $spreadsheet->setActiveSheetIndexByName('DataSheet')
  24.  
     
  25.  
    //设置打印选项
  26.  
    $sheet->getPageSetup()->setFitToWidth(1);
  27.  
    $sheet->getPageSetup()->setFitToHeight(0);
  28.  
    $sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE)->setPaperSize(PageSetup::PAPERSIZE_A4);;
  29.  
    $sheet->getPageMargins()->setTop(1)->setRight(0.75)->setLeft(0.75)->setBottom(1);
  30.  
    $sheet->getPageSetup()->setHorizontalCentered(true)->setVerticalCentered(false);
  31.  
    $sheet->setPrintGridlines(true);
  32.  
    $sheet->getPageSetup()->setPrintArea('A1:E5,G4:M20');
  33.  
     
  34.  
    //设置缩放
  35.  
    $sheet->getSheetView()->setZoomScale(75);
  36.  
    //设置worksheet的颜色
  37.  
    $sheet->getTabColor()->setRGB('FF0000');
  38.  
    //设置worksheet名字
  39.  
    $sheet->setTitle('sheet 1');
  40.  
     
  41.  
    //设置默认样式
  42.  
    $spreadsheet->getDefaultStyle()->getFont()->setName('Arial');
  43.  
    $spreadsheet->getDefaultStyle()->getFont()->setSize(8);
  44.  
     
  45.  
    //获取文档所有值
  46.  
    $data = $sheet->toArray();
  47.  
    //获取最大行数
  48.  
    $res = $sheet->getHighestRow();
  49.  
    //获取最大列数
  50.  
    $res = $sheet->getHighestColumn();
  51.  
     
  52.  
    //单元格信息
  53.  
    $cell = $sheet->getCellByColumnAndRow(2, 1); //获取单元格 B1
  54.  
    $cell = $sheet->getCell('A1'); //获取单元格A1
  55.  
    $cell->getValue(); //获取单元格的数据值
  56.  
    $cell->getCoordinate(); //获取行列信息 A1
  57.  
    $column = $cell->getColumn(); //获取列信息 A
  58.  
    $row = $cell->getRow(); //获取行信息 1
  59.  
    $cell->getDataType(); //获取数据类型
  60.  
    $cell->setValue('8888'); //设置值
  61.  
    $cell->getStyle()->getFont()->getName(); //单元格样式
  62.  
     
  63.  
    //设置行高
  64.  
    $sheet->getDefaultRowDimension()->setRowHeight(10, 'mm');
  65.  
    $sheet->getRowDimension(1)->setRowHeight(10, 'mm');
  66.  
    //设置列宽
  67.  
    // $sheet->getColumnDimension('A')->setAutoSize(true);
  68.  
    //$sheet->getColumnDimension('A')->setWidth(300);//设置A列的宽度
  69.  
    $sheet->getDefaultColumnDimension()->setWidth(20); //设置列默认宽度
  70.  
     
  71.  
    //设置换行
  72.  
    $sheet->setCellValue('A2', "hellow\nphp"); //设置换行 双引号 \n setWrapText
  73.  
    $sheet->getStyle('A2')->getAlignment()->setWrapText(true); //设置换行
  74.  
     
  75.  
    //合并拆分单元格
  76.  
    $sheet->mergeCells('B2:B3');
  77.  
    // $sheet->unmergeCells('B2:B3');
  78.  
     
  79.  
    //设置值
  80.  
    // $sheet->setCellValue('A1', "hellow\nphp");
  81.  
    $sheet->setCellValueByColumnAndRow(2, 2, '6666'); //设置B2的值
  82.  
    // $sheet->fromArray($arr, null, 'D5'); //数组,空值时填充值,开始单元格坐标
  83.  
     
  84.  
    //设置超链接
  85.  
    $sheet->setCellValue('B3', "百度"); //设置A链接
  86.  
    $sheet->getCell('B3')->getHyperlink()->setUrl('https://www.百度.com');
  87.  
    // $sheet->setCellValue('E26', 'www.phpexcel.net');
  88.  
    // $sheet->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1");
  89.  
     
  90.  
    //设置字体粗细大小颜色
  91.  
    $sheet->getStyle('B3')->getFont()->setBold(true)->setName('Arial')->setSize(20);
  92.  
    $sheet->getStyle('B3')->getFont()->getName(); //字体名
  93.  
    $sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE'); //设置颜色
  94.  
    $sheet->getStyle('B3')->getFont()->getColor()->getRGB(); //获取颜色值
  95.  
    $sheet->getCell('C3')->setValue('2021-03-27 23:22:59');
  96.  
    //$sheet->getStyle('D2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_DDMMYYYY);//设置日期格式
  97.  
    $sheet->getStyle('D3')->getNumberFormat()->setFormatCode('dd/mm/yyyy'); //设置日期格式 与上文相同
  98.  
     
  99.  
     
  100.  
    //设置单元格背景色
  101.  
    $sheet->getStyle('E3')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setARGB(Color::COLOR_GREEN);
  102.  
     
  103.  
    //设置单元格对齐方式
  104.  
    $sheet->getStyle('B2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
  105.  
    $sheet->getStyle('B2')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
  106.  
     
  107.  
    //设置单元格边框
  108.  
    $sheet->getStyle('C2:E2')->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN);
  109.  
     
  110.  
    //富文本
  111.  
    $html = '<strong>bold</strong>, <em>italic</em>, <strong><em>bold italic</em></strong>';;
  112.  
    $wizard = new HtmlHelper();
  113.  
    $richText = $wizard->toRichTextObject($html);
  114.  
    $sheet->setCellValue('D5', $richText);
  115.  
     
  116.  
    //公式
  117.  
    $sheet->setCellValue('A4', '=IF(C4>500,"profit","loss")');
  118.  
    // $formula = $sheet->getCell('A4')->getValue();
  119.  
    // $value = $sheet->getCell('A4')->getCalculatedValue();
  120.  
     
  121.  
    //插入删除行列
  122.  
    $sheet->insertNewRowBefore(7, 2);
  123.  
    $sheet->removeRow(7, 2);
  124.  
     
  125.  
    //写入图片
  126.  
    $drawing = new Drawing();
  127.  
    $drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6);
  128.  
    $drawing->setRotation(25);
  129.  
    $drawing->getShadow()->setVisible(true);
  130.  
    $drawing->getShadow()->setDirection(45);
  131.  
     
  132.  
    $drawing->setWorksheet($sheet);
  133.  
     
  134.  
    //设置单元格数据类型
  135.  
    $sheet->getCell('A1')->setValueExplicit('25', DataType::TYPE_NUMERIC);
  136.  
     
  137.  
    //格式
  138.  
    $styleArray = [
  139.  
    'font' => [
  140.  
    'bold' => true,
  141.  
    ],
  142.  
    'alignment' => [
  143.  
    'horizontal' => Alignment::HORIZONTAL_RIGHT,
  144.  
    ],
  145.  
    'borders' => [
  146.  
    'top' => [
  147.  
    'borderStyle' => Border::BORDER_THIN,
  148.  
    ],
  149.  
    ],
  150.  
    'fill' => [
  151.  
    'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
  152.  
    'rotation' => 90,
  153.  
    'startColor' => [
  154.  
    'argb' => 'FFA0A0A0',
  155.  
    ],
  156.  
    'endColor' => [
  157.  
    'argb' => 'FFFFFFFF',
  158.  
    ],
  159.  
    ],
  160.  
    ];
  161.  
    $filename = '01simple.xlsx';
  162.  
    $sheet->getStyle('A5:E5')->applyFromArray($styleArray);
  163.  
     
  164.  
    // // 保存xlsx在本地
  165.  
    // $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  166.  
    // $writer->save('01simple.xlsx');
  167.  
     
  168.  
    // 下载xlsx
  169.  
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  170.  
    header('Content-Disposition: attachment;filename="' . $filename . '"');
  171.  
    header('Cache-Control: max-age=0');
  172.  
    header('Cache-Control: max-age=1');
  173.  
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  174.  
    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  175.  
    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  176.  
    header('Pragma: public'); // HTTP/1.0
  177.  
    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  178.  
    $writer->save('php://output');
  179.  
    exit;
学新通

二. 导出(写入)

  1.  
    <?php
  2.  
     
  3.  
    namespace app\admin\controller\Index;
  4.  
     
  5.  
    use app\common\controller\Backend;
  6.  
    use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  7.  
    use PhpOffice\PhpSpreadsheet\Reader\Csv;
  8.  
    use PhpOffice\PhpSpreadsheet\Reader\Xls;
  9.  
    use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  10.  
    use PhpOffice\PhpSpreadsheet\Helper\Sample;
  11.  
    use PhpOffice\PhpSpreadsheet\IOFactory;
  12.  
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
  13.  
    use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  14.  
    use PhpOffice\PhpSpreadsheet\Cell\DataType;
  15.  
    use PhpOffice\PhpSpreadsheet\Style\Fill;
  16.  
    use PhpOffice\PhpSpreadsheet\Style\Color;
  17.  
    use PhpOffice\PhpSpreadsheet\Style\Alignment;
  18.  
    use PhpOffice\PhpSpreadsheet\Style\Border;
  19.  
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  20.  
     
  21.  
    class Index extends Backend
  22.  
    {
  23.  
    // 导出(写入)
  24.  
    public function export(){
  25.  
    $spreadsheet = new Spreadsheet();
  26.  
    $sheet = $spreadsheet->getActiveSheet();
  27.  
    $sheet->setCellValue('A1', 'a1');
  28.  
    $sheet->setCellValue('A2', 'a2');
  29.  
    $sheet->setCellValue('A3', 'a3');
  30.  
    $sheet->setCellValue('A4', 'a4');
  31.  
    $sheet->setCellValue('B1', 'b1');
  32.  
    $sheet->setCellValue('B2', 'b2');
  33.  
    $sheet->setCellValue('B3', 'b3');
  34.  
    $sheet->setCellValue('B4', 'b4');
  35.  
    $writer = IOFactory::createWriter($spreadsheet, 'Xls');
  36.  
    $writer->save('php://output');
  37.  
    return;
  38.  
    }
  39.  
    }
学新通

三. 导入(读取)

  1.  
    <?php
  2.  
     
  3.  
    namespace app\admin\controller\Index;
  4.  
     
  5.  
    use app\common\controller\Backend;
  6.  
    use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  7.  
    use PhpOffice\PhpSpreadsheet\Reader\Csv;
  8.  
    use PhpOffice\PhpSpreadsheet\Reader\Xls;
  9.  
    use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  10.  
    use PhpOffice\PhpSpreadsheet\Helper\Sample;
  11.  
    use PhpOffice\PhpSpreadsheet\IOFactory;
  12.  
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
  13.  
    use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  14.  
    use PhpOffice\PhpSpreadsheet\Cell\DataType;
  15.  
    use PhpOffice\PhpSpreadsheet\Style\Fill;
  16.  
    use PhpOffice\PhpSpreadsheet\Style\Color;
  17.  
    use PhpOffice\PhpSpreadsheet\Style\Alignment;
  18.  
    use PhpOffice\PhpSpreadsheet\Style\Border;
  19.  
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  20.  
     
  21.  
    class Index extends Backend
  22.  
    {
  23.  
    // 导入(读取)
  24.  
    public function import(){
  25.  
    $reader = IOFactory::createReader('Xlsx');
  26.  
    $reader->setReadDataOnly(TRUE);
  27.  
    $spreadsheet = $reader->load('Public/hello.xlsx'); //载入excel表格
  28.  
    $sheet = $spreadsheet->getSheet(0); // 读取第一個工作表
  29.  
    $highest_row = $sheet->getHighestRow(); // 取得总行数
  30.  
    $highest_columm = $sheet->getHighestColumn(); // 取得总列数
  31.  
    for ($row = 1; $row <= $highest_row; $row ){ //行号从1开始
  32.  
    for ($column = 'A'; $column <= $highest_columm; $column ){ //列数是以A列开始
  33.  
    $str = $sheet->getCell($column . $row)->getValue();
  34.  
    dump($str);
  35.  
    }
  36.  
    }
  37.  
    }
  38.  
    }
学新通

四. 模版导出(读写)

  1.  
    <?php
  2.  
     
  3.  
    namespace app\admin\controller\Index;
  4.  
     
  5.  
    use app\common\controller\Backend;
  6.  
    use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  7.  
    use PhpOffice\PhpSpreadsheet\Reader\Csv;
  8.  
    use PhpOffice\PhpSpreadsheet\Reader\Xls;
  9.  
    use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  10.  
    use PhpOffice\PhpSpreadsheet\Helper\Sample;
  11.  
    use PhpOffice\PhpSpreadsheet\IOFactory;
  12.  
    use PhpOffice\PhpSpreadsheet\Spreadsheet;
  13.  
    use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  14.  
    use PhpOffice\PhpSpreadsheet\Cell\DataType;
  15.  
    use PhpOffice\PhpSpreadsheet\Style\Fill;
  16.  
    use PhpOffice\PhpSpreadsheet\Style\Color;
  17.  
    use PhpOffice\PhpSpreadsheet\Style\Alignment;
  18.  
    use PhpOffice\PhpSpreadsheet\Style\Border;
  19.  
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
  20.  
     
  21.  
    class Index extends Backend
  22.  
    {
  23.  
    // 模版导出(读写)
  24.  
    public function templateExport()
  25.  
    {
  26.  
    $template_path = __DIR__ . '/PayrollTemplate.xls';
  27.  
    // 读取模板
  28.  
    $spreadsheet = IOFactory::load($template_file_address);
  29.  
     
  30.  
    // 以下代码行将活动工作表索引设置为第一个工作表:设置Excel Sheet
  31.  
    $spreadsheet->setActiveSheetIndex(0);
  32.  
     
  33.  
    // 指向激活的工作表
  34.  
    $worksheet = $spreadsheet->getActiveSheet();
  35.  
     
  36.  
    $worksheet->getCell('A1')->setValue('John');
  37.  
    $worksheet->getCell('A2')->setValue('Smith');
  38.  
     
  39.  
    // 样式设置 加边框
  40.  
    $styleThinBlackBorderOutline = array(
  41.  
    'borders' => [
  42.  
    'allBorders' => [
  43.  
    'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
  44.  
    'color' => ['argb' => '666666'],
  45.  
    ],
  46.  
    ]
  47.  
    );
  48.  
    $worksheet->getStyle( 'A6:H'.$i)->applyFromArray($styleThinBlackBorderOutline);
  49.  
     
  50.  
    // 结束 进行导出
  51.  
    ob_end_clean(); // 清空(擦除)缓冲区并关闭输出缓冲
  52.  
    ob_start(); // 打开输出控制缓冲
  53.  
     
  54.  
    $date = date("Ymd",time());
  55.  
    $listname = 'hello'.$date;
  56.  
     
  57.  
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  58.  
    header('Content-Disposition: attachment;filename="'.$listname . '.xlsx"');
  59.  
    header('Cache-Control: max-age=0');
  60.  
     
  61.  
    $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
  62.  
    $writer->save('php://output');
  63.  
     
  64.  
    }
  65.  
    }
  66.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfejke
系列文章
更多 icon
同类精品
更多 icon
继续加载