Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Работа с PEAR::Spreadsheet_Excel_Writer
вместо таблиц Excel - каракули

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

XiaoPin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла необходимость экспорта данных из скриптов PHP в таблицы Excel.
Ради проверки работоспособности пытаюсь выполнить простейший код (построчно выводит числа 1-10 в бинарном виде):

Код:
 
require_once "Spreadsheet/Excel/Writer.php";
 
$xls =& new Spreadsheet_Excel_Writer();
 
$xls->send("test.xls");
$sheet =& $xls->addWorksheet('Binary Count');
 
for ( $i=0;$i<11;$i++ )  
    $sheet->write($i,0,decbin($i));
 
$xls->close();
 

 Вместо таблиц, подобных excel, получаю примерно следующее: " “Ђя’в8яЂЂЂЂЂ ЂАААЂЂЂ™™я™ ".
В чем может быть дело? Я об этом пыталась что-нибудь найти, но ничего толком не получилось. Очень нуждаюсь в Вашей помощи.
P.S. На сервере ОС unix и установлен пакет PEAR  (включая OLE 0.5 beta и Spreadsheet_Excel_Writer 0.9.0   beta).

Всего записей: 1 | Зарегистр. 12-05-2006 | Отправлено: 18:46 12-05-2006
shewa

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
preadsheet_Excel_Writer 0.9.0
 
Вышла новая версия модуля для PEAR Spreadsheet_Excel_Writer.
 
Изменений достаточно чтобы скачать.
 
Чтобы выгрузить таблицу Темплейта (Table/Dbtable) в Excel, достаточно дать опцию O_EXPORT_XLS:
 
$page[++$i] = new Dbtable($request, '', '', O_EXPORT_XLS);
process($page);
 
Таблица выведется в браузер, а внизу последней строкой будет идти линк на скачивание этой таблицы в Excel. Используется, конечно же, Spreadsheet_Excel_Writer.
 
Комментарии
Показывать комментарии (Как список | Древовидной структурой)
 
А чего нового -то - как было так и осталось - никакого тебе искусственного интеллекта там - раскрасочки полей - подсчета итогов
#1 pea on 2005-11-26 19:06 (Ответить)
Поддержка формата XLS на 100% не было в целях. Слишком много фич и слишком это дорого.
А раскрасить поля можно вручную -- setBgColor или setColor.
А подсчитать можно формулой -- writeFormula.
 
P.S. Release status: beta.
"We call it beta because it's beta than nothing" (c)Dilbert.
#1.1 CDS on 2005-11-27 12:41 (Ответить)
а есть какой то примерчик создания таблицы в Dtable и вывода его на экран и в Excel было бы очень кстати, заранее спасибо)))
а если написать несколько про приемов исспользования Spreadsheet_Excel_Writer так что бы можна было вевести нужные данные сразу в заранее отформатированный файл Excel цены бы этому не было и родина бы сказал спасибо!
#2 shewa on 2007-03-20 23:00 (Ответить)
Оригинальная тема здесь  
http://blog.medexport-omsk.ru/index.php?url=archives/63-Spreadsheet_Excel_Writer_0.9.0.html&serendipity

Всего записей: 39 | Зарегистр. 14-12-2004 | Отправлено: 10:18 21-03-2007
YUry777



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!  
 
Встала проблема, надо генерировать Excel прайс, почитав все отзывы по этому поводу решил, что PEAR::Spreadsheet_Excel_Writer будет самым мощным средством и после этого проблемы полетели одна за одной:  
1. Оказалось, что на хостинге пхп установлен без PEAR, полазил по форумам нашел решение - собрать все файлы необходимые для его работы в одном месте и внутри переписать пути.  
 
2. Возникла проблема, что у некоторых открывается файл, у некоторых скачивается нулевой длинны(внятного ответа, кроме нестабильной работы пакета не нашел)  
 
3. И наконец самая главная проблема: он не хочет работать с русским языком(перепробовал кучу способов предлагаемых на форумах, так ничего у меня не получилось)  
 
Если Вы встречались с этими проблемами и нашли на них ответы буду очень благодарен за помощь, так же если вы укажете мне на что нибудь более рабочее и желательно бесплатное(или украденное) буду очень благодарен.  
 
Заранее благодарен.  
С уважением, Юрий.

Всего записей: 17 | Зарегистр. 12-12-2006 | Отправлено: 10:30 25-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YUry777
Я в таком случае поступал проще. Excel прекрасно работает с html, т.е. можно сохранить документ как html, но с расширением xls и все будет прекрасно работать без потерии функционала(ну разве что макросы работать не будут), а для конечного пользователя будет все равно какая начинка у этого xls.
Т.е. я предлагаю такую схему, создаешь шаблон прайса в самом экселе, сохраняешь в html, делишь его на хидер и футер и добавляешь сами строки как для обычной html-ной таблицы. А затем просто отдаешь пользователю.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 12:58 25-05-2007
YUry777



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sTa1kEr
Вариант конечно хороший, но мне не очень нравится вид в котором он открывается.
Но всеравно спасибо за предложение!

Всего записей: 17 | Зарегистр. 12-12-2006 | Отправлено: 14:51 25-05-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вариант конечно хороший, но мне не очень нравится вид в котором он открывается.
Но всеравно спасибо за предложение!

Что значит "вид в котором он открывается"? Он открывается в точности в таком же виде, в котором ты его сохранишь. Попробуй возьми любой оригинальный xls, сохрани его в html, переименуй расширение файла обратно в xls, открой этот файл - никаких отличий от оригинала ты не найдешь.

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 14:59 25-05-2007
YUry777



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все разобрался! У меня просто ячейки не были выделины!
Спасибо за совет! Именно так и буду поступать

Всего записей: 17 | Зарегистр. 12-12-2006 | Отправлено: 15:11 25-05-2007
Black_Spider



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Вместо таблиц, подобных excel, получаю примерно следующее: " “Ђя’в8яЂЂЂЂЂ ЂАААЂЂЂ™™я™ ".  
В чем может быть дело?

 
У меня такое было когда в скрипте использовалось "Print"

Всего записей: 74 | Зарегистр. 31-10-2003 | Отправлено: 03:50 21-09-2007
Black_Spider



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажет кто ни будь как можно установить в ячейках перенос текста по словам?
 
Добавлено:

Цитата:
Подскажет кто ни будь как можно установить в ячейках перенос текста по словам?

Нашел решение:
В форматирование ячейки нужно добавить следующее:

Код:
 
$Format->setTextWrap(1);  
 

Всего записей: 74 | Зарегистр. 31-10-2003 | Отправлено: 03:59 28-09-2007
caston

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подскажите, как сменить типа данных в ячейке. Все генерится в General, а для пары полей надо поставить Text.

Всего записей: 2 | Зарегистр. 17-11-2005 | Отправлено: 01:30 18-03-2008
shewa

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
по умолчанию так установлен текст , работает без проблем ,
 для примера сделай такой код  
$xls =& new Spreadsheet_Excel_Writer();
$cart =& $xls->addWorksheet('test');
$cart->setColumn(0,0,28);
$cart->setColumn(1,13,10);
 
 
$currentRow = 1;
 
$cart->write($currentRow,0,"Количество на : ".date( 'd.m.y', time() ));

Всего записей: 39 | Зарегистр. 14-12-2004 | Отправлено: 09:51 18-03-2008
caston

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот теперь правой кнопью на ячейку и «Format Cells...»
и там будет General
 
Задача изменить этот тип на Text.  
 
Курил ман и гуглил весь вчерашний вечер и ничего не обнаружил на эту тему =/

Всего записей: 2 | Зарегистр. 17-11-2005 | Отправлено: 11:00 18-03-2008
Spy2008

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
1. Оказалось, что на хостинге пхп установлен без PEAR, полазил по форумам нашел решение - собрать все файлы необходимые для его работы в одном месте и внутри переписать пути.  

Можешь расказать поподробнее об установке на хостинг PEAR и Spreadsheet_Excel_Writer.

Всего записей: 1 | Зарегистр. 27-05-2008 | Отправлено: 21:27 27-05-2008
chupurnov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здавствуйте. При записи  
$cart->write($currentRow,0,'dasdasdadasdasd"""');
все внутринние кавычки заменяются на двойные, а мне нужно хранить в поле обычный html. как быть?(
Если писать как урл $cart->writeUrl($currentRow,0,'dasdasdadasdasd"""'); то хранится отлично если не считать что становится ссылкой.
Помимо этого еще оказывается стоит ограничение на размер записываемых данных чтото около 4000 знаков

Всего записей: 29 | Зарегистр. 08-07-2009 | Отправлено: 14:03 21-08-2009 | Исправлено: chupurnov, 15:30 21-08-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chupurnov

Цитата:
все внутринние кавычки заменяются на двойные

заменяются вами или кодом? экранировать пробовали?  

Цитата:
Помимо этого еще оказывается стоит ограничение на размер записываемых данных чтото около 4000 знаков

а это не ограничение самого excel?
http://www.dokeos.com/doc/dokeos_api_1.8.5/Spreadsheet_Excel_Writer/Spreadsheet_Excel_Writer_BIFFwriter.html

Цитата:
 
Excel limits the size of BIFF records. In Excel 5 the limit is 2084 bytes. In Excel 97 the limit is 8228 bytes. Records that are longer than these limits must be split up into CONTINUE blocks.
 
This function takes a long BIFF record and inserts CONTINUE records as necessary.

возможно связано с форматом файла для какой то версии excel

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:34 21-08-2009 | Исправлено: Cheery, 20:36 21-08-2009
DmitryNikitin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте.
 
Формирую файл. Все получается, но на весь документ накладываются границы/рамки. И на пустые, и на заполненные. В ячейках, в которых я задаю границы, показываются эти границы, которые задаю. Где не задаю - там видна эта сетка. Как её убрать?
 
Интересно, что если выделить ячейки и вставить в новый пустой документ, рамки пропадают.

Всего записей: 2 | Зарегистр. 20-10-2009 | Отправлено: 14:49 20-10-2009
DmitryNikitin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разве никто с этим не сталкивался?

Всего записей: 2 | Зарегистр. 20-10-2009 | Отправлено: 22:59 24-10-2009
zeff1986

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
с этим Spreadsheet_Excel_Writer'ом одни проблемы! то ли руки кривые, то ли библиотека глючит: сначала вроде все работало нормально, но после того, как началась вставка данных динамически: в цикле из бд, пошла ошибка при открытии файла:Общая ошибка. Общая ошибка ввода-вывода. Вроде код не сложный, но не рабтает, чтоб его! подскажите пожалуйста, в чем может быть проблема?
Вот код:
require_once 'Z:/usr/local/php5/PEAR/Spreadsheet/Excel/Writer.php';
 
        //We give the path to our file here
        $workbook=new Spreadsheet_Excel_Writer('Z:/home/'.$_SERVER[SERVER_NAME].'/www/egroupware/addressbook/inc/docs/test.xls');
        
        $worksheet=& $workbook->addWorksheet('Лист1');
 
        $worksheet->write(1, 0,'дата проведения:',$format);
        $format_a = array('left' => 0,  
                    'bottom' => 0,  
                    'right' => 0,  
                    'top' => 0,  
                    'bold'=>'1',  
                    'size' => '10',  
                    'color'=>'black',  
                    'align' => 'center');
        $format =& $workbook->addformat($format_a);
        $worksheet->write(0, 0,'Смета на артистов (затраты/стоимость)',$format);
        $worksheet->setmerge(0, 0, 0, 7);
        
        $format_a = array('bold'=>'1',  
                    'size' => '10',  
                    'color'=>'black');
        $format =& $workbook->addformat($format_a);
        
        $worksheet->write(1, 0,'Дата проведения:',$format);
        
        $worksheet->write(2, 0,'Место:',$format);
        $worksheet->write(3, 0,'Основание:',$format);
        $worksheet->write(4, 0,'Заказчик:',$format);
        $worksheet->setcolumn(0,0, 17);
        
        $worksheet->setmerge(1, 1, 1, 7);
        $worksheet->setmerge(2, 1, 2, 7);
        $worksheet->setmerge(3, 1, 3, 7);
        $worksheet->setmerge(4, 1, 4, 7);
        
        $format_a = array('left' => 1,  
                    'bottom' => 1,  
                    'right' => 1,  
                    'top' => 1,  
                    'bold'=>'1',  
                    'size' => '10',  
                    'color'=>'black',  
                    'valign' => 'vcenter',
                    'align' => 'center');
        $format =& $workbook->addformat($format_a);
        $worksheet->write(6, 0,'Наименование услуги',$format);
        $worksheet->setmerge(6, 0, 6, 1);
        
        $worksheet->write(6, 2,'Исполнитель',$format);
        
        $worksheet->setcolumn(6, 2, 27);
        
        $format_b = array('left' => 1,  
                    'bottom' => 1,  
                    'right' => 1,  
                    'top' => 1,  
                    'bold'=>'1',  
                    'size' => '10',  
                    'color'=>'black',  
                    'valign' => 'vequal_space',
                    'align' => 'center');
        $formatb =& $workbook->addformat($format_b);
        $worksheet->setrow(6, 29);
        
        $worksheet->write(6, 3,'Кол.',$format);
        $worksheet->setcolumn(6, 3, 4);
        
        $worksheet->write(6, 4,'Цена',$format);
        $worksheet->setcolumn(6, 4, 8);
        
        $worksheet->write(6, 5,'Сумма',$format);
        $worksheet->setcolumn(6, 5, 8);
        
        $worksheet->write(6,6,'Себ-ть общ.',$formatb);
        $worksheet->setcolumn(6, 6, 10);
        
        $worksheet->write(6,7,'Прибыль общ.',$formatb);
        $worksheet->setcolumn(6, 7, 10);
        
        $format_a = array('left' => 1,  
                    'bottom' => 1,  
                    'right' => 1,  
                    'top' => 1,  
                    'bold'=>'0',  
                    'size' => '10',  
                    'color'=>'black',  
                    'valign' => 'vcenter',
                    'align' => 'center');
        $format =& $workbook->addformat($format_a);
        // вот после добавления следующих строк, ошибка не уходит вообще
        $cr=7;
        
        $ysl=$this->db->query('SELECT naimenovanie, ispolnitel_fio, kol_vo, symma, seb_ed * kol_vo AS seb_symm, (
                            symma - seb_ed * kol_vo
                            ) AS pribil, data_nachala, mesto
                            FROM yslygi
                            WHERE nomer_dokymenta ="'.$nomer_dogovora.'"');
        foreach($ysl as $y)
        {
            $worksheet->write($cr, 0,$y['naimenovanie'], $format);
            $worksheet->setmerge($cr, 0, $cr, 1);
            $worksheet->write($cr, 2, $y['ispolnitel_fio'], $format);
            $worksheet->write($cr, 3, $y['kol_vo'],$format);
            $worksheet->write($cr, 4, $y['symma'],$format);
            $worksheet->write($cr, 5, $y['seb_symm'],$format);
            $worksheet->write($cr, 6, $y['pribil'],$format);
            $dtn=explode(" ", $y['data_nachala']);
            $mesto[$y['mesto']]=$y['mesto'];
            list($d,$m,$y) = explode('.',$dtn[0]);
            $data_proved[$dtn[0]]=$d.' '.$this->mesyac($m).' '.$y;    
            $cr=$cr+1;
        }
        $vmesto=implode("; ", $mesto);
        $data_mesta=implode("; ", $data_proved);    
        // we still need to explicitly close the workbook
        $worksheet->hidegridlines();
        $workbook->close();    
 
P.S. Границы убираются след. образом:    $worksheet->hidegridlines();
Затем устанавливается форматом для нужных ячеек:
$format_b = array('left' => 1,  
                    'bottom' => 1, //соотв.нижняя граница, правая и тд
                    'right' => 1,  
                    'top' => 1,  
                    'bold'=>'1',  
                    'size' => '10',  
                    'color'=>'black',  
                    'valign' => 'vequal_space',
                    'align' => 'center');

Всего записей: 2 | Зарегистр. 30-11-2009 | Отправлено: 18:05 30-11-2009
zeff1986

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кажется проблема не в этом коде, а в том, что для перехода к выполнению этого кода используется window.open javascript. Хотя не понимаю, как это может быть связано. И возможно влияет то, что делалось до вызова окна с этим кодом, по крайней мере когда-то он выполняется, а когда-то нет

Всего записей: 2 | Зарегистр. 30-11-2009 | Отправлено: 10:13 02-12-2009
cawoon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день. В процессе работы возник следующий вопрос: возможно ли дописывать данные к уже существующему файлу на хостинге? к примеру, в файле создана шапка таблицы и передавать этот файл Spreadsheet_Excel_Writer'у что бы он дописал туда только данные.

Всего записей: 1 | Зарегистр. 04-12-2009 | Отправлено: 13:22 04-12-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Работа с PEAR::Spreadsheet_Excel_Writer


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru

Рейтинг.ru