【问题标题】:Styling cell borders with PhpSpreadsheet PHP使用 PhpSpreadsheet PHP 设置单元格边框样式
【发布时间】:2017-10-26 16:22:04
【问题描述】:

我使用 PhpSpreadsheet 读取或写入 Excel 文件。我想在我的 excel 中添加边框样式,所以我使用了以下代码:

<?php
    $fxls ='myfile.xlsx';
    $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($fxls);
    $xls_data = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
    $sheet = $spreadsheet->getActiveSheet();

    $styleArray = array(
        'borders' => array(
            'outline' => array(
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                'color' => array('argb' => 'FFFF0000'),
            ),
        ),
    );

    $sheet ->getStyle('B2:G8')->applyFromArray($styleArray);

    /* Generate the Excel File */
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="myNEWFile.xlsx"');
    header('Cache-Control: max-age=0');
    header('Cache-Control: max-age=1');
    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: cache, must-revalidate');
    header ('Pragma: public');
    $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
    $writer->save('php://output');
    exit;

我没有收到任何错误,但创建的 excel 文件没有边框。我想念什么!??

【问题讨论】:

  • 你的脚本适合我。我所做的只是包含自动加载器并调整 excel 文件名。

标签: php excel phpexcel


【解决方案1】:

tl;博士

除了style array way,你还可以通过方法链的方式来实现:

use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Color;

$spreadsheet
    ->getActiveSheet()
    ->getStyle('B2')
    ->getBorders()
    ->getOutline()
    ->setBorderStyle(Border::BORDER_THICK)
    ->setColor(new Color('FFFF0000'));

公然抄自official docs on cell formatting

可用的边框模式

docs on cell formatting 包含一个可用模式列表及其在样式数组表单中使用的键。对于方法链接形式,只需在键的大写版本之前打一个get。这些方法都可以在-&gt;getActiveSheet()-&gt;getStyle('B2')-&gt;getBorders() 下使用,就像在示例中一样。

  • 在单个单元格上:
    • 左:-&gt;getLeft()
    • 右:-&gt;getRight()
    • 顶部:-&gt;getTop()
    • 底部:-&gt;getBottom()
    • 对角线:-&gt;getDiagonal()
  • 在一个区域:
    • 所有边界:-&gt;getAllBorders()
    • 大纲:-&gt;getOutline()
    • 内:-&gt;getInside()
    • 垂直:-&gt;getVertical()
    • 水平:-&gt;getHorizontal()

可视化的模式(也来自docs):

可用的边框样式

Border::BORDER_DASHDOT
Border::BORDER_DASHDOTDOT
Border::BORDER_DASHED
Border::BORDER_DOTTED
Border::BORDER_DOUBLE
Border::BORDER_HAIR
Border::BORDER_MEDIUM
Border::BORDER_MEDIUMDASHDOT
Border::BORDER_MEDIUMDASHDOTDOT
Border::BORDER_MEDIUMDASHED
Border::BORDER_NONE
Border::BORDER_SLANTDASHDOT
Border::BORDER_THICK
Border::BORDER_THIN

【讨论】:

    【解决方案2】:
    $styleArray = array(
        'borders' => array(
            'outline' => array(
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                'color' => array('argb' => 'FFFF0000'),
            ),
        ),
    );
    

    替换为:

    $styleArray = array(
        'borders' => array(
            'outline' => array(
                'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                'color' => array('argb' => 'FFFF0000'),
            ),
        ),
    );
    

    See 在第 169-203 行。

    borderStyle 已在 2017-11-26 的 1.0.0-beta2 版本之后添加。

    之前,边框配置还是style

    【讨论】:

    • 这两部分完全相同。
    • 不是:'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK, 到 'style' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
    • 对不起。我一定是瞎了。但这是错误的。 style 用于 PHPExcel。他们在 PhpSpreedsheet 中将其更改为 borderStylephpspreadsheet.readthedocs.io/en/develop/topics/recipes/#styles - OP 代码对我有用。
    • 确实是的,但它是 2017-12-25 更新的 1.0.0 版本的配置,这篇文章已于 2017 年 10 月发布,当时 phpspreadsheet 处于 1.0.0-beta -> @987654323 @,你可以在 github 上看到配置仍然是“style”而不是“borderStyle”-> github.com/PHPOffice/PhpSpreadsheet/blob/1.0.0-beta/src/… 在第 169-203 行
    • 请将该信息添加到您的答案中。如果不进行编辑,我无法更改我的投票。
    【解决方案3】:

    您需要为工作表重新分配值:

    $styleArray = array(
        'borders' => array(
            'outline' => array(
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                'color' => array('argb' => 'FFFF0000'),
            ),
        ),
    );
    
    $sheet = $sheet ->getStyle('B2:G8')->applyFromArray($styleArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      相关资源
      最近更新 更多