web-dev-qa-db-ja.com

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');
18
Tuzki

ワークブック全体(すべてのワークシート)にデフォルトのスタイルを設定できます。

$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にのみ適用されることに注意してください

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

_extra question_に答えるには:

以下を使用して、各ページで繰り返す行を設定できます。

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

ここで、行1、2、3、4、および5が繰り返されます。

0
Philip