Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2009, 09:02   #1
crazy horse
ios developer
Старожил
 
Аватар для crazy horse
 
Регистрация: 16.11.2007
Сообщений: 2,885
По умолчанию php2xls com parser

Преамбула: надоело мне как-то раз постоянно делать одни и те-же телодвижения, чтобы конвертнуть отчет в экселе в хтмл и выложить на сервер.
Перебрал много скриптов, начиная от Excel parser pro и заканчивая PHPExcel.
Поняв, что это не для меня (то с форматами принимаемыми сложности, то с несколькими страницами не умеет работать,) начал искать свое решение. Поскольку в наличии имеется пару серверов под Win2003 было принято решение не мутить голову, а использовать COM.
Амбула: вот, собственно и сам парсер, может кому-то окажется полезным. Все в комментариях:

Код:
 <?php
 //Открываем исходный excel-файл
$dh = opendir('C:\otgruzka\\');
while($excel_file = readdir($dh)):
	if ($excel_file!='.' && $excel_file!='..') {
		break;
	} endwhile;
$excel_file='C:\otgruzka\\'.$excel_file;

//Строим путь к конечному Html
$d = date("j");
$m = date("m");

switch($m){
	case "01":
		$month = "january";
		break;
	case "02":
		$month = "february";
		break;
	case "03":
		$month = "martch";
		break;
	case "04":
		$month = "april";
		break;
	case "05":
		$month = "may";
		break;
	case "06":
		$month = "jun";
		break;
	case "07":
		$month = "july";
		break;
	case "08":
		$month = "august";
		break;
	case "09":
		$month = "september";
		break;
	case "10":
		$month = "october";
		break;
	case "11":
		$month = "november";
		break;
	case "12":
		$month = "december";
		break;
	default:
		$month = "";
} // switch

$htm = '\\\Ez-server-1\asu\2008\unload\\'.$month.'\\'.$d.'.htm';



xls2html($excel_file,$htm);

//Собственно сам парсер. На сервере обязан присутствовать microsoft excel. Тестировалось на 2007.
function xls2html($doc,$htm)
{
	$empty = new VARIANT();
	$w = new COM("excel.application") or trigger_error("invalid device");
	//нефиг сервер грузить excel'евским UI
	$w->Visible = 0;

	//Открываем исходный файл
	if (file_exists($doc))
	{
		$w->Workbooks->open($doc);
	}else return false;

	//выделяем значащую область ячеек
	$s = $w->ActiveSheet->UsedRange;
	//Ctrl+c
	$s->Copy();
	//Ctrl+n
	$w->workbooks->add();
	//Ctrl+v
	$w->Activesheet->Paste();
	//тут прикол - если попытаться закрыть первый лист сразу, мастдай
	//будет визжать что в буфере находится много инфы и задавать глупые вопросы
	//на тему - сохранять ли ее после закрытия. Грузить свою умную голову сложными формулами
	//не стал (О, МСДН!) и поступил просто:
	$w->Workbooks[1]->Worksheets[1]->Range("A1:A1")->Copy(); //тык в ячейку, Ctrl+c
	//Закрываем без вопросов
	$w->Workbooks[1]->Close(false);
	//выравниваем оставшийся лист по содержимому
	$w->Workbooks[1]->Worksheets[1]->UsedRange->Columns->AutoFit;
	//Сохраняем как Html - второй параметр отвечает за формат
	//(О, МСДН! Я долго бился и нашел - оказывается, 44!)
	$w->Workbooks[1]->SaveAs($htm,44);
	//снова в клозет и без вопросов!
	$w->Workbooks[1]->Close(false);
	//И нечего нам память жрать!
	$w->Quit();
	$w = null;
	unset($w);
}
?>
Зы. За обработку ошибок ногами не пинать, кому надо - тот сам прикрутит. Не делал еще.
Делайте что хотите, но чтобы через полчаса в лесу было светло, сухо и медведь!

Последний раз редактировалось crazy horse; 08.10.2009 в 09:05.
crazy horse вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HTML Parser на Delphi 2009 Rubaka Работа с сетью в Delphi 3 11.08.2009 08:35
XML Parser Aynas Общие вопросы Delphi 3 09.08.2008 22:05
PHP vs Perl vs ASP vs Parser vs Other Mixasik PHP 3 21.07.2008 10:26