Com объекты

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Com объекты

Сообщение Blondinka » 18.07.2007 (Ср) 15:33

Я не программист и пишу малюсенькие скриптики исключительно для использования в личных целях на локалке...

Код: Выделить всё
<?php
// other code

$xls = new COM("Excel.Application");
$xls->Application->Visible = 0;     
$xls->Workbooks->Open($initial);

// не знаю

$xls->Workbooks[1]->SaveAs($action.'_'.date('d.m').'.xls');
$xls->Quit();                       
$xls->Release();                   
$xls = Null;
$range = Null;

// other code
?>

// $initial - имя исходного файла
// $action - элемент имени файла
// в переменную $old_date я записала ЧТО
// в переменную $new_date я записала ЧЕМ

Мне нужен код, который в $initial найдет $old_date и заменит $new_date

Методы.. объекты.. свойства.. - я НичегО не понимаю :oops:

Просто помогите, плиз, с синтаксисом.

P.S. Прощу прощения, если запостила не в соответсвующий раздел.
Здесь такие умные слова и грамотные дядьки, что я растерялась :roll:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.07.2007 (Ср) 23:05

Вопрос по php в разделе по asp.net это сильно, да.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 19.07.2007 (Чт) 9:03

Хм.... com объекты и php это одно и то же? Вот уж не знала, чес слово....

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 19.07.2007 (Чт) 12:26

Blondinka писал(а):Хм.... com объекты и php это одно и то же?

Гы :)
Если надо что-то вычленить из строки (имя файла), то регулярные выражения рулят. Написал его из слабости к блондинкам, если бы знал, что может лежать в переменной action... Хотя здесь можно и substringом.
Salus populi suprema lex

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 19.07.2007 (Чт) 15:21

В переменной
// $action - элемент имени файла


Если бы можно было разрулить рег.выр, то справилась бы самостоятельно. Мне нужно НАЙТИ и ЗАМЕНИТЬ, а не вычленить из строки, причем в СУЩЕСТВУЮЩЕМ файле Excel и сохранить его под другим именем, но в том же формате. Файлов таких 60 000 (и они постоянно добавляются/обновляются). Считывать Excel Reader(ом) в массив, заносить в цикле (со сменой или менять на выводе - не важно) данные в БД мускула или перезаписывать в ксв, менять и потом опять писать в Excel - нерационально (как, на мой взгляд, и использование функции subString() причем, насколько я знаю, эта функция только ВОЗВРАЩАЕТ часть строки/подстроки, а не МЕНЯЕТ И, если бы мне эта функция подходила, то я бы воспользовалась str_replace( ) в php). Поэтому я хочу обойтись работой с com объектами. Тем более, что речь идет о локальном хосте с осью, как вы понимаете, Windows, что позволяет работать с ними. Но я никогда не работала с com объектами и в сети не могу найти нормальный мануал (для блондинок ;) ) Поэтому и прошу ВСЕГО ЛИШЬ ОДНУ строчку кода.
Я не прошу объяснений, как работает метод Replace (есть справка), не прошу рассказать сказку на ночь о свойстве Excel.cells и о типе Range... Я прошу помочь с тем, что мне совершенно неинтересно, но в данном случае НЕОБХОДИМО. Это работа с com объектами. А еще точнее, тупо СИНТАКСИС.
То, что я использую сейчас - это считаю строки, записываю в переменную (столбец я знаю) и перезаписываю необходимые данные в цикле. Но это тоже не самый оптимальный вариант.
Код: Выделить всё
<?php
...............
for ($n_row = 2; $n_row<$i; $n_row++)
{
$range=$xls->Range('A'.$n_row);   
$range->Value = $new_date;   
}

...............


Ведь эту часть кода можно заменить на более оптимальный в моем случае. Почему к Вам на форум? Потому что в моих женских мозгах com объекты ассоциируются именно с VB.
Но, наверное, господин Администратор прав, перенеся мою тему в Народный треп. Не мне судить о его поступках :)

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 19.07.2007 (Чт) 15:50

Не буду рисковать писать код, не протестировав его у себя, а сейчас я не дома... Завтра напишу, если никто не ответит.
P.S. а вообще-то странно, что молчит т-щ Хакер :)
Salus populi suprema lex

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 19.07.2007 (Чт) 15:52

Спасибо. Буду ждать.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.07.2007 (Чт) 18:06

dr.MIG
т. Хакер сейчас шаманит над фасмом, пытаясь реализовать один заумный алгоритм. Не думаю, что у него дойдут руки до этого топика.
Blondinka
Думаю, если бы языком решения был бы не php, а vbscript на этом форуме откликнулосб бы больше народу(вбскрипт, кстати не требует внешнего интерпритаторо кроме винды.)
Изображение

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 19.07.2007 (Чт) 18:22

keks-n, понятно... FlatASM это хорошо...
Ну будем надеяться, что у меня на интернете завтра ещё будут деньги :)
А кстати да, если на сервере стоит винда, то почему бы и не на VBScript.
Salus populi suprema lex

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.07.2007 (Чт) 19:38

P.S. а вообще-то странно, что молчит т-щ Хакер :)


У товарища Хакера всё это время не было доступа в интернет. И таки да, keks-n прав, я пишу одну очень критичную по времени выполнения функцию на ассемблере. Поэтому свободного времени не так много.

Blondinka

Код: Выделить всё
<?php
// other code

$xls = new COM("Excel.Application");
$xls->Application->Visible = 0;     
$wb = $xls->Workbooks->Open($initial);

$xls->Application->SendKeys('^a');
$xls->Selection->Replace($old_date, $new_date);

$wb->SaveAs($action.'_'.date('d.m').'.xls');
$xls->Quit();                       
// $xls->Release();  Не надо! , PHP сам уменьшает счётчик ссылок!
$xls = NULL;
$wb = NULL;

// other code
?>





Я вот так подумал. По почему бы вам действительно не использовать VBScript вместо PHP ?

Создаёте файл c расширением .vbs и пишите туда следующий код:

Код: Выделить всё
Dim exc
dim wb
set exc = CreateObject("Excel.Application")   
exc.Application.Visible = False

Set wb = exc.Workbooks.Open(you_var_initial) ' Ваша $initial
exc.Application.SendKeys "^a"
Exc.Selection.replace CStr(you_var_old_date), CStr(you_var_new_date) ' Что на что заменяем?

wb.SaveAs you_var_action + "_" + format(now, "dd.mm") + ".xls"

exc.Quit
Set exc = Nothing


Учтите, я к именам всех ваших переменных прибавил you_var_

И да. Код не проверялся. Ни первый не второй :)
Будем надеяться, что я не ошибся :)

ЗЫ. Знатокам VBA. Есть ли более прямой способ сделать SelectAll, нежели делать отсылку CTRL+A ?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 19.07.2007 (Чт) 20:12

Может так

Код: Выделить всё
exc.Application.Cells.Select


По крайне мере при записи макроса на нажатие CTRL + A вывалилась такая вот строка
Утро добрым не бывает!

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 19.07.2007 (Чт) 21:53

Товарищ Хакер :) Спасибо огромное! Интересовала именно эта ОДНА строчка кода:
Код: Выделить всё
$xls->Selection->Replace($old_date, $new_date);

Все остальное - лишнее!
Потому как SelectAll - у меня есть решение на php.
Нужно было именно НАЙТИ и ЗАМЕНИТЬ. Больше ничего.
// $xls->Release(); Не надо! , PHP сам уменьшает счётчик ссылок!

В учебнике было написано:
$xls->Release(); //Высвобождаем объекты.
Наверное, я опять что-то не так поняла, но методы-деструкторы, управляющие памятью, появились только в PHP5. Я его себе еще не поставила. :oops:

keks-n
Думаю, если бы языком решения был бы не php, а vbscript на этом форуме откликнулосб бы больше народу

А я думаю, что меня закусали бы раньше, чем я вообще хоть чему-то научилась ;)
(вбскрипт, кстати не требует внешнего интерпритаторо кроме винды.)

dr.MIG
А кстати да, если на сервере стоит винда, то почему бы и не на VBScript.

Хакер
Я вот так подумал. По почему бы вам действительно не использовать VBScript вместо PHP ?

Для многих задач, которые я решаю, нужна связка Apache+PHP+MySQL ...
И если я php хотя бы немного знаю, то VBScript - совсем ноль.
И com объекты я воспринимала не как технологию в любой среде, а как что-то совершенно отдельное. Даж не знаю, как объяснить.
Закончу школу - думаю, появится возможность выучить все по-человечески, чтобы не задавать больше глупых вопросов :roll:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.07.2007 (Чт) 23:10

$xls->Release(); //Высвобождаем объекты.


Если в учебнике именно так написано то "в печку его" (с) Профессор Преображениский :)


Мануал по PHP с официального сайта - лучший вам учебник. Там написано, что не требуется ничего такого:
... You should never need to use this method...




Но сама фраза "Высвобождаем объекты" - ужас...

Если серьёзно, то объект "высвободится" когда счётчик ссылок на него достигнет нуля. Release всего лишь уменьшает этот счётчик (но ничего не высвобождает).

И если я php хотя бы немного знаю, то VBScript - совсем ноль.
И com объекты я воспринимала не как технологию в любой среде, а как что-то совершенно отдельное. Даж не знаю, как объяснить.

VBScript, мне кажется, намного легче PHP. Правда и менее функциональнее.
COM - это технология, и для любой среды (а точнее - для любого языка) она одинакова. Точнее, оня языко-независима, и позволяет связывать компоненты, написанные на разных языках.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 0:25

Мануал по PHP с официального сайта - лучший вам учебник.
Млин... Ну, не БОР же...
Именно там: free the object (освобождение/высвобождение объекта, насколько я могу понять)
и вариации:
$excel = null;
$excel->Release();
unset($excel);
VBScript, мне кажется, намного легче PHP.

Не знаю, не пробовала. PHP, MySQL, CSS, HTML, JS, FLASH - всего по чуть-чуть, что-то лучше, что-то хуже. Но вот VBScript... Просто не пробовала. Разве что макросы записывала и код потом правила по примеру... Но разве это пробовать? Как-то мне php все-таки роднее и гораздо понятнее.
А по поводу COM - уже осилила :) 6 главу "ActiveX-Создание Web-приложений" Тома Армстронга, там достаточно внятно описывается модель компонентного объекта.

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 0:54

Ну вот... Не зря я тут ко всем приставала. :D Время обработки 1-го файла по-старому: 1.149108 секунд, по-новому: 0.990984 секунд. Легко посчитать, какую тучу времени я выиграла на своем объеме файлов. ОГРОМНОЕ СПАСИБО!!!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.07.2007 (Пт) 1:27

Blondinka
$excel = null;
$excel->Release();
unset($excel);


Где вы такое откопали?

Не туда, видимо, смотрите.

модель компонентного объекта.

эмм... :roll:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 8:53

эмм...

Component Object Model - СОМ
Снова не туда смотрю? :cry:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2007 (Пт) 9:10

Объектная модель компонента ;-)
Изображение

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 9:32

Том Армстронг
"ActiveX-Создание Web-приложений"

ГЛАВА 6. Введение в COM.

Часть 1. Общие сведения и немного истории.
Модель компонентного объекта
Двоичный стандарт (или независимость от языка программирования)
Независимость от местоположения
Понятия OLE и ActiveX
Средства, основанные на СОМ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2007 (Пт) 9:48

Подумаешь, книжка... Вот в соседнем топике обсуждали книжку, где в конце функции предлагали писать "Exit Function x", и что с того?
Изображение

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 10:19

Я ж ничего против не имею. Просто все, в чем я ошибаюсь я взяла не с потолка, а из какого-то источника. Получается, что все книжки надо спалить... Мне вот интересно, а учителя в институте тоже будут говорить одно - а на самом деле будет другое? Может, мне вообще не думать о поступлении в ВУЗ, а поторатить эти 5-6 лет на САМОобразование? :roll: Практика и форумы..... Форумы и практика....

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 20.07.2007 (Пт) 10:42

Blondinka
Реально за 3-4 года, помимо основной деятельности учась программингу с использованием форумов, достигнуть очень неплохих результатов.
Изображение

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 20.07.2007 (Пт) 10:49

у меня нет основной деятельности :) я ток перешла в 11 класс

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.07.2007 (Пт) 12:16

Вот учёба в школе и есть твоя основная деятельность, пока что :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.07.2007 (Пт) 13:06

Blondinka писал(а):Мне вот интересно, а учителя в институте тоже будут говорить одно - а на самом деле будет другое?

Само собой. Заявляю как отработавший год университетским преподом :-)

Blondinka писал(а):Может, мне вообще не думать о поступлении в ВУЗ, а поторатить эти 5-6 лет на САМОобразование? :roll: Практика и форумы..... Форумы и практика....

Одно другому не мешает.
Изображение

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 20.07.2007 (Пт) 13:11

Blondinka
Так держать! Keks-n прав, если есть желание научится (а оно судя по всему есть :) ) то форумы очень хорошее подспорье в этом. Вот только как отнесется будущий работодатель к "блондинке без диплома" уверяющей его что она очень хороший программер?
Мое мнение - диплом нужен. Хотя бы для того, что очень часто одним из требований при приеме на работу является наличие ВО.
А вот как его получать (очно ли заочно) тут решать тебе. Может быть действительно тебе будет лучше пойти на заочку чтобы было больше времени для САМОобразования.
P.S. Насчет блондинок ничего личного ибо у самого жена блондинка да еще и с двумя ВО по одному из которых и работает. Просто такой уж стереотип сложился :)
Утро добрым не бывает!

Blondinka
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 18.07.2007 (Ср) 14:48

Сообщение Blondinka » 22.07.2007 (Вс) 0:26

:colors: Спасибки Вам всем!


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 115

    TopList