PHPExcel为电子表格中的所有工作表设置边框和格式

时间:2013-10-16 07:54:00

标签: php phpexcel

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

下面的代码适用于工作表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');

3 个答案:

答案 0 :(得分:39)

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

$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 :(得分:1)

for ($s=65; $s<=90; $s++) {
    //echo chr($s);
    $objPHPExcel->getActiveSheet()->getColumnDimension(chr($s))->setAutoSize(true);
}

答案 2 :(得分:0)

回答extra question

您可以使用以下方式设置每页上应重复的行:

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

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