【问题标题】:PHPExcel set border and format for all sheets in spreadsheetPHPExcel为电子表格中的所有工作表设置边框和格式
【发布时间】:2013-10-16 07:53:59
【问题描述】:

我目前正在尝试为我的电子表格设置所有边框,以及自动调整大小等格式。

我的下面的代码正在工作,用于工作表 1。电子表格中的所有其他工作表都完全保持不变。我一直试图让它与此电子表格中的所有其他工作表一起使用,但没有运气。

关于如何全局设置格式以使所有工作表都有边框和自动调整大小的任何想法?此电子表格中所有工作表的布局都相同。我正在导出到 XLSX 文件。

干杯,

/**autosize*/
for ($col = 'A'; $col != 'P'; $col++) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}


/** Borders for all data */
   $objPHPExcel->getActiveSheet()->getStyle(
    'A2:' . 
    $objPHPExcel->getActiveSheet()->getHighestColumn() . 
    $objPHPExcel->getActiveSheet()->getHighestRow()
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);



/** Borders for heading */
   $objPHPExcel->getActiveSheet()->getStyle(
    'A1:O1'
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);

额外问题: 我目前已经设置了标题。标题确实出现在工作表 1 上,但没有出现在任何其他工作表中。是否可以在所有工作表中显示标题? 标题设置在第 1 行。结果从第 2 行开始。

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Asset_id');
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Asset_name');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Asset_type');
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Asset_make');
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Asset_model');

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    您可以为整个工作簿(所有工作表)设置默认样式:

    $objPHPExcel->getDefaultStyle()
        ->getBorders()
        ->getTop()
            ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    $objPHPExcel->getDefaultStyle()
        ->getBorders()
        ->getBottom()
            ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    $objPHPExcel->getDefaultStyle()
        ->getBorders()
        ->getLeft()
            ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    $objPHPExcel->getDefaultStyle()
        ->getBorders()
        ->getRight()
            ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    

      $styleArray = array(
          'borders' => array(
              'allborders' => array(
                  'style' => PHPExcel_Style_Border::BORDER_THIN
              )
          )
      );
    $objPHPExcel->getDefaultStyle()->applyFromArray($styleArray);
    

    这可以用于所有样式属性,而不仅仅是边框。

    但列自动调整大小是 structural 而不是 stylistic,并且必须为每个工作表上的每一列单独设置。

    编辑

    请注意,默认工作簿样式仅适用于 Excel5 Writer

    【讨论】:

    • 我收到选项 1 的错误:致命错误:未捕获的异常 'Exception' 并带有消息 'Can only get pseudo-border for supervisor.'在 C:\wamp\www\site\Excel\Classes\PHPExcel\Style\Borders.php 中的第 384 行(!)异常:只能为主管获取伪边框。在 C:\wamp\www\site\Excel\Classes\PHPExcel\Style\Borders.php 第 384 行
    • 我的错,你必须设置单独的边框,或者使用 applyFromArray() 方法设置所有边框
    • 我决定使用 Excel5 并且它现在可以工作:选项 1,但是有什么方法可以限制从上面的代码中绘制的边框数量,从 A2 开始?
    • 如果您设置默认值,则无法限制它;因为从本质上讲,除非您另行指定,否则默认值适用于所有内容……工作簿默认值自动适用于所有工作表中的所有单元格。但是您可以覆盖单个单元格或单元格范围的默认值
    • 还有一个问题,我在原始问题中发布了另一个编辑。谢谢
    【解决方案2】:
    for ($s=65; $s<=90; $s++) {
        //echo chr($s);
        $objPHPExcel->getActiveSheet()->getColumnDimension(chr($s))->setAutoSize(true);
    }
    

    【讨论】:

    • ascii 大写字母偏移量。
    【解决方案3】:

    回复你的extra question

    您可以使用以下方法设置应在每个页面上重复哪些行:

    $objPHPExcel-&gt;getActiveSheet()-&gt;getPageSetup()-&gt;setRowsToRepeatAtTopByStartAndEnd(1, 5);

    现在,将重复第 1、2、3、4 和 5 行。

    【讨论】:

      【解决方案4】:

      2022年(phpoffice/phpspreadsheet v1.22.0),基于最新的变化,将样式应用于整个工作表的解决方案是:

      $worksheet->getParent()->getDefaultStyle()->applyFromArray([
          'font' => [
              'name' => $pValue->getFont()->getName(),
              'size' => $pValue->getFont()->getSize(),
          ],
      ]);
      

      更多信息,请参考link

      根据文档,现在我们有:

      工作表::setDefaultStyle()

      // Before
      $worksheet->setDefaultStyle($value);
      
      // After
      $worksheet->getParent()->getDefaultStyle()->applyFromArray([
          'font' => [
              'name' => $pValue->getFont()->getName(),
              'size' => $pValue->getFont()->getSize(),
          ],
      ]);
      

      【讨论】:

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