Генерирование сложного Excel-файла.

young

Новичок
Генерирование сложного Excel-файла.

интересует можно ли на php создавать Excel-файлы с одкрываемым деревом, пример такго файла находится тут
http://www.107.ru/price/107_ru.zip

Если это невозможно (а я подозреваю, что это именно так), то есть ли более продвинутый верстальщик XLS чем http://pear.php.net/package/Spreadsheet_Excel_Writer ?

инетерсуют возможности создания листов и прочих фич.
 

crocodile2u

http://vbolshov.org.ru
Листы-то прекрасно создаются с помощью Spreadsheet_Excel_Writer... И форматирование там богатое. Но такие фишки, как в твоем файле, там вряд ли создашь. Я не знаю способа, и подозреваю, что на данный момент его и не существует.
 

Blindman

Новичок
Spreadsheet_Excel_Writer неплохо справляется с созданием outlines, приблизительно так
PHP:
<?php
  include "Spreadsheet/Excel/Writer.php";
  $workbook =& new Spreadsheet_Excel_Writer("test.xls");
  $worksheet =& $workbook->addWorksheet("test");
  $worksheet->setRow(5, NULL, 0, false, 1);
  $worksheet->setRow(4, NULL, 0, false, 1);
  $worksheet->setRow(3, NULL, 0, false, 1);
  $worksheet->setRow(2, NULL, 0, false, 1);

  $worksheet->setRow(3, NULL, 0, false, 2);
  $worksheet->setRow(4, NULL, 0, false, 2);

  $workbook->close();
?>
ключевым является последний параметр метода setRow.
 

young

Новичок
Ола :) я готов станцевать с бубном :)
Ну типа если когда-нибудь встретимся - с меня пиво :)
 

crocodile2u

http://vbolshov.org.ru
Originally posted by Blindman
Spreadsheet_Excel_Writer неплохо справляется с созданием outlines, приблизительно так
PHP:
<?php
  include "Spreadsheet/Excel/Writer.php";
  $workbook =& new Spreadsheet_Excel_Writer("test.xls");
  $worksheet =& $workbook->addWorksheet("test");
  $worksheet->setRow(5, NULL, 0, false, 1);
  ...
?>
ключевым является последний параметр метода setRow.
из документации:
void Worksheet::setRow (integer $row, integer $height [, mixed $format=0])

$worksheet->setRow(5, NULL, 0, false, 1); - откуда столько параметров? и что означают последние два? И чем это может помочь young?

PS: Мне эта тема тоже очень интересна, т. к. клиенты часто хотят всяких фишек в Excel, и генерация "сложных" файлов с наподобие приведенного была бы очень кстати. PHP Community не поможет?
 

crocodile2u

http://vbolshov.org.ru
Young, не мог бы ты немного пояснить свою радость? В общем, помоги тупому...

-~{}~ 22.03.04 13:44:

Так что это за параметры таинственные? незадокументированные?
 

Blindman

Новичок
young Будете у нас на Колыме - милости просим :)

crocodile2u Обновиться бы надо ...
 

young

Новичок
Blindman
Только смущают небольшие различия - минусики в моеми примере сверху, а в том, что получается при генерации - они снизу.
более детальное тестирование приведу чуть позже, тогда и сообщу о результатах
 

Blindman

Новичок
young Это дело поправимое

$worksheet->setOutline(true, false, false);

я подозреваю, что у этого класса много возможностей, о которых я даже не подозреваю ...
 

young

Новичок
crocodile2u Обновиться бы надо ...
тут ты не прав
официальный ман о твоих хитрых параметрах молчит
http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.spreadsheet-excel-writer-worksheet.setrow.php

откуда ваши сведения?

-~{}~ 22.03.04 13:05:

/**
* This method is used to set the height and format for a row.
*
* @access public
* @param integer $row The row to set
* @param integer $height Height we are giving to the row.
* Use NULL to set XF without setting height
* @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 = 0, $hidden = false, $level = 0)
сырцы форевер
 

Макс

Старожил PHPClub
young
иногда очень полезно читать комментарии в исходниках.
Да и не только комментарии:
PHP:
    /**
    * This method is used to set the height and format for a row.
    *
    * @access public
    * @param integer $row    The row to set
    * @param integer $height Height we are giving to the row. 
    *                        Use NULL to set XF without setting height
    * @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 = 0, $hidden = false, $level = 0)
    {
-~{}~ 22.03.04 14:06:

:) вижу, уже сам нашел
 

crocodile2u

http://vbolshov.org.ru
Круто! блин че ж я сам-то в коментах не позырил... ну правда, мне пока екселевских деревьев не заказывали. Сохраню себе топик. Полезный.
 

young

Новичок
Господа, есть вопрос. Очень нужна помощь в его решении.

Строится оное дерево в Excel, все ок.
Показан только первый уровень, и там везде плюсики, что бы его развернуть.

Но вот когда кликаешь на + показывается не следующий уровень - а все вложенные уровни, в развернутом состоянии.

Можно ли как-то сделать что бы показывался только следующий уровень. А более глубокие уровни оставались свернутые?

-~{}~ 04.04.04 13:29:

PS: Почему мне часто с авторами некоторых исходников хочется сделать что-то противоестесвтенное и особенно извращенное.

Проблема решена модификацией куска исходного кода файла "Writer/Worksheet.php" с
PHP:
       $grbit |= $level;
        if ($hidden) {
            $grbit |= 0x020;
        }
        $grbit |= 0x0040; // fUnsynced
        if ($format) {
            $grbit |= 0x0080;
        }
        $grbit |= 0x0100;
на

PHP:
       $grbit |= $level;
        if ($hidden) {
            $grbit |= 0x030;
        }
        $grbit |= 0x0040; // fUnsynced
        if ($format) {
            $grbit |= 0x0080;
        }
        $grbit |= 0x0100;
Спрашиваетя, зачем мне простому смертному пользователю тратить час на поиск этого злочасного бита?
 
Сверху