PHP сообщество

любители кода :)

// решено

Bloged in Без рубрики от admin Вторник Май 27, 2008 at about 10:09 дп

Как в spreadsheet_excelwriter'e группировать ячейки?
excel.png - Picamatic - upload your images
Если таки нельзя - есть ли альтернатива, способная это осуществить?

Решение состоит из 2х функций + последней версии Spreadsheet_Excel_Writer + патч:
Worksheet::setOutline:
setOutline (true, false)
Worksheet::setRow:

$worksheet1->setRow(2, NULL, NULL, 0, 1); // создаём группу 1го уровня
$worksheet1->setRow(3, NULL, NULL, 0, 2); // создаём группу 2го уровня
$worksheet1->setRow(4, NULL, NULL, 0, 2);
$worksheet1->setRow(5, NULL, NULL, 0, 2);
$worksheet1->setRow(6, NULL, NULL, 1, 3, 1); // создаём свёрнутую группу 3го уровня
$worksheet1->setRow(7, NULL, NULL, 1, 3, 1);
$worksheet1->setRow(8, NULL, NULL, 1, 3, 1);

excel2.png - upload images with Picamatic
UPD: но есть косяк - группы 3+ уровня становятся открытыми, после открытия 2го уровня.
UPD2: написал небольшой патч для Worksheet.php, добавляющий параметр fCollapsed для setRow. переписал пример под него.

*** Worksheet.php       2008-05-27 22:38:56.000000000 +0700
--- Worksheet_new.php   2008-05-28 11:11:46.000000000 +0700
***************
*** 2120,2127 ****
      * @param mixed   $format XF format we are giving to the row
      * @param bool    $hidden The optional hidden attribute
      * @param integer $level  The optional outline level for row, in range [0,7]
      */
!     function setRow($row, $height, $format = null, $hidden = false, $level = 0)
      {
          $record      = 0x0208;               // Record identifier
          $length      = 0x0010;               // Number of bytes to follow
--- 2120,2128 ----
      * @param mixed   $format XF format we are giving to the row
      * @param bool    $hidden The optional hidden attribute
      * @param integer $level  The optional outline level for row, in range [0,7]
+     * @param bool    $collapsed  =true if the row is collapsed in outlining
      */
!     function setRow($row, $height, $format = null, $hidden = false, $level = 0, $collapsed = false)
      {
          $record      = 0x0208;               // Record identifier
          $length      = 0x0010;               // Number of bytes to follow
***************
*** 2154,2159 ****
--- 2155,2163 ----
          // collapsed. The zero height flag, 0x20, is used to collapse a row.

          $grbit |= $level;
+         if ($collapsed) {
+             $grbit |= 0x0010;
+         }
          if ($hidden) {
              $grbit |= 0x0020;
          }

Комментариев нет

Комментариев нет.

Извините, комментирование на данный момент закрыто.