Экспорт в excel. Чем пользоваться?

ManManovich

Новичок
Здравствуйте. Встала задача формировать к заказу счёта, накладной. Дали образец, а в нём всё как полагается, рамки, объединение ячеек. Почитал по интернету но так ни на одном решении не остановился. Среди всего мощно выглядит Spreadsheet_Excel_Writer, но на оф сайте последняя версия за 2009, что меня несколько смущает. (а ещё он по ходу не просто класс а юниксовое программное обеспечение) И так вопрос: какой библиотекой посоветуете воспользоваться для таких целей. И, если не сложно вкратце рассказать, то почему.

Может какой хороший мануал на тему посоветуете?
 

stopkran

Дилетант
Почему именно в excel? Можно ведь счёт и накладную прямо в HTML выводить. Какая разница, откуда печатать.
 

ManManovich

Новичок
Почему именно в excel? Можно ведь счёт и накладную прямо в HTML выводить. Какая разница, откуда печатать.
Это мысль, но я уточнил, и нужен ексель. Но вообще, там не только печатать, там ещё и заказчику отсылать. Документы будут генерироваться в бэкэнде, администратором.

Предложенное флопик'ом, кажется, надо откомпилить и установить на сервер. Сайт на хостинге, так что похоже не пойдёт.

Поковырял ещё Нашёл мощную штуку, но с ней голову сломаешь и писанины много получится. http://phpexcel.codeplex.com/
И очень простой вариант Из PHP в Excel: работа с COM-объектами (и иже с ними, там несколько топиков на тему есть.) Но не нашёл как используя этот способ объединять ячейки

Наверно, если ни кто не подскажет как работая с COM объектами объединять несколько ячеек, то тему можно закрыть. Как обычно ударился в панику , пошёл спрашивать, а потом нашёл ответ :(
 

флоппик

promotor fidei
Команда форума
Партнер клуба
И очень простой вариант Из PHP в Excel: работа с COM-объектами (и иже с ними, там несколько топиков на тему есть.) Но не нашёл как используя этот способ объединять ячейки

Наверно, если ни кто не подскажет как работая с COM объектами объединять несколько ячеек, то тему можно закрыть. Как обычно ударился в панику , пошёл спрашивать, а потом нашёл ответ :(
Работает только под виндой же. И с установленным экселем.
 

fixxxer

К.О.
Партнер клуба
1. Сохраняешь ексельник в html офисовским говноэкспортом.
2. В этой каше говна проставляешь свои метки.
3. Скриптом заменяешь метки на что надо, отдаешь прям этот самый хтмл с расширением .xls и Content-Type: application/octet-stream
4. ??
5. PROFIT

(да, есть небольшая вероятность, что на каком-нибудь кастрированном екселе или опенофисом допустим, не откроется).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я обычно вообще просто голый HTML с табличкой отдаю с контент-тайпом application/vnd.ms-excel - в большинстве случаев, хватает.
 

stopkran

Дилетант
Это мысль, но я уточнил, и нужен ексель. Но вообще, там не только печатать, там ещё и заказчику отсылать. Документы будут генерироваться в бэкэнде, администратором.
Заказчику можно отсылать в письме. В смысле, прямо в теле письма. Там даже печать синюю можно поставить автоматом (мы так и делаем). Скажите это администратору - может он передумает. В эксел-то ведь ему руками печать пихать придётся.
 

shelestov

я тут часто
Когда последний раз сталкивался с Spreadsheet_Excel_Writer там с кодировками не все в порядке было, по крайней мере в OpenOffice.
Тогда извращнулся и сгенерил php-шкой python скрипт и выполнил его, тот генерил exel, после чего прочитал созданный файл readfile и отдал в браузер.
В питоне юзался pyExcelerator.

Вот такой вот изврат, но на тот момент все работало на ура.
 

~WR~

Новичок
Ух ты. Не знал про то, что есть сишный экстеншн.
Потестирую. Очень не хватает именно нормальной сишной библиотеки.
 

~WR~

Новичок
Жесть. То, что надо. Где вы раньше были??))

Для огромных отчетов, в которых нужно сохранять форматирование, раньше использовал такой вариант.

Сохранял исходный документ в формате Excel XML 2003.
Открывал его через DOMDocument, добавлял ряды через cloneNode, писал в них значения.
Отдавал в браузер с расширением XLS и нужными заголовками.

Скорость работы, по сравнению с PHPExcel, огромная. 200-500 тысяч рядов выгрузить не проблема.
Но, конечно, на C лучше.
 

ManManovich

Новичок
Спасибо всем зща ответы. В целом и помогло и и по-своему решил делать. Пользовался в результате phpexcel. Оказалось там всё предельно просто. Не надо описывать все поля где сколько объединить, стили итп. Можно взять шаблон, подгрузить его
PHP:
	$excelclass = 'PHPExcel/IOFactory.php';
	$classfile = $path.$excelclass;
	include_once $classfile;
	$pExcel = PHPExcel_IOFactory::load($path."template.xls");
	$pExcel->setActiveSheetIndex(0);
	$aSheet = $pExcel->getActiveSheet();
//вставляем значения в ячейки
	$aSheet->setCellValue('D6',$otherdata['organ_i_vl']);
	$aSheet->setCellValue('D7',$otherdata['a_o']);
Далее вставляем строки, меняем стили у всавленных строк, если надо.

PHP:
$aSheet->insertNewRowBefore('15',($zayaCnt-1));

if ($i < ($zayaCnt-1)){
		$aSheet->getRowDimension($row)->setRowHeight(70);
		$aSheet->getStyle('A'.$row.':M'.$row)->applyFromArray($styleArray);
	}
И по завершению пишем в файл

PHP:
$excelclass2 = $path."PHPExcel/Writer/Excel5.php";
		include $excelclass2;
		$objWriter = new PHPExcel_Writer_Excel5($pExcel);
		$path1file = 'assets/files/'.strftime("%d-%m-%Y--%H-%M-%S", time()).'.xls';
		if (file_exists($path1file)){
			if (unlink($path1file)) $objWriter->save($path1file);
		}
		else{
			$objWriter->save($path1file);
		}
		$output .= '<a href="'.$path1file.'">Чек товарный</a><br/>';
Это на случай если кому когда интересно станет. Для больших объёмов, конечно не пойдёт, но квитанцию сгенерировать в самый раз. Что приятно порадовало, проблем с кодировкой нет, и можно не заморачиваться, какой файл открывать. Можно 2003, 2007 в последствии ему без разницы в какой скажешь, в такой и сохранит.
 

tz-lom

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