20

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

我的下面的代码正在工作,对于工作表 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');
4

4 回答 4

43

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

$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

于 2013-10-16T08:10:39.757 回答
1
for ($s=65; $s<=90; $s++) {
    //echo chr($s);
    $objPHPExcel->getActiveSheet()->getColumnDimension(chr($s))->setAutoSize(true);
}
于 2016-05-01T06:19:46.103 回答
0

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

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

有关更多信息,请参阅此链接

根据文档,现在我们有:

工作表::setDefaultStyle()

// Before
$worksheet->setDefaultStyle($value);

// After
$worksheet->getParent()->getDefaultStyle()->applyFromArray([
    'font' => [
        'name' => $pValue->getFont()->getName(),
        'size' => $pValue->getFont()->getSize(),
    ],
]);
于 2022-02-23T16:04:33.297 回答
0

回答你的extra question

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

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

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

于 2016-05-21T00:19:45.687 回答