2013-10-16 42 views
17

我目前正在尝试为我的电子表格设置所有边框,并且还设置了诸如autosize之类的格式。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); 

EXTRA问题: 我当前设置标题。标题出现在表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'); 

回答

37

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

$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作家

+0

我得到了一个错误选项1:致命错误:未捕获的异常'异常'的消息'只能获取主管伪边界。'在第384行 (!)的C:\ wamp \ www \ site \ Excel \ Classes \ PHPExcel \ Style \ Borders.php中例外:只能为管理员获取伪边框。在线384 – Tuzki

+0

C:\ wamp \ www \ site \ Excel \ Classes \ PHPExcel \ Style \ Borders.php我的不好,你必须设置单独的边框,或者使用applyFromArray()方法来设置allborders –

+0

我已经决定使用Excel5及其现在的工作:选项1,但是有什么办法可以限制从我上面的代码绘制的边框的数量,从A2? – Tuzki

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

ascii大写字母偏移量。 – TARKUS

0

回答你extra question

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

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

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

相关问题