Язык программирования PHP, Проблемы и пути их решения |
Здравствуйте, гость ( Вход | Регистрация )
Язык программирования PHP, Проблемы и пути их решения |
8.6.2006, 13:36
Сообщение
#1
|
|
Призрак форума Группа: Участник форума Сообщений: 3698 Регистрация: 24.10.2004 Из: Iceland Пользователь №: 15 |
Попрошу минуточку внимания.
Создавая этот форум я рассчитываю на Вашу сознательность. Прошу не флудить. Не надо спрашивать о том, что конкретно может быть описано в мануалах. В таких случаях Вы банально будете отосланы а Гуглу и RTFM(FAQ). Я хочу поговорить о интересных проблемах и путях их решения. Для затравочки выкладываю интересную статью, которую искал довольно долго. Рейтинг редкости материала: ~7-8 баллов Из PHP в Excel: работа с COM-объектами Введение Данная серия статей посвящена созданию документов Excel при помощи PHP. Данная возможнось может понадобиться, например, если нужно предоставить пользователю загружаемые данные в виде листов Excel. Это могут быть прайсы на продукцию, автоматически генерируемые из базы данных на сервере, либо какие-то документы, которые также необходимо представить в виде документов Excel. Здесь рассматривается возможность работы с Excel-документами через COM-объект. К сожалению работа с COM-объектами в PHP возможна только на Windows-платформах. По-этому если Вы используете Unix-хостинг, то создавать и редактировать Excel-документы приведенным ниже способом не получится. Работа с COM-объектами производится при помощи синтактсиса Код $com_object = new COM($object); где $com_object - новый COM-объект; $object - id-класс требуемого объекта. Для создания Excel-документов переменной $object необходимо задать значение "Excel.Application" либо "Excel.sheet". Код $xsl = new COM("Excel.Application"); После создания нового COM-объекта, можно обращаться к его свойствам и методам: Код <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ $rangeValue = $xls->Range("A1"); $rangeValue->Value = "В выделенном блоке текст будет жирный, подчеркнутый, наклонный"; $rangeValue = $xls->Range("A2"); $rangeValue->Value = "Шрифт будет иметь высоту 12"; $rangeValue = $xls->Range("A3"); $rangeValue->Value = "Имя шрифта - Times New Roman"; $range=$xls->Range("A1:J10"); // Определяем область ячеек $range->Select(); // Выделяем ее $fontRange=$xls->Selection(); // Присваиваем переменной выделенную область // Далее задаем параметры форматирования текста в выделенной области $fontRange->Font->Bold = true; // Жирный $fontRange->Font->Italic = true; // Курсив $fontRange->Font->Underline = true; // Подчеркнутый $fontRange->Font->Name = "Times New Roman"; // Имя шрифта $fontRange->Font->Size = 12; // Размер шрифта ?> Открытие, запись, закрытие документа Общие возможности: В Excel при помощи PHP можно произвести следующие действия с документами: создать новый документ; открыть ранее созданный документ; сохранить открытый документ; закрыть документ. Создание нового документа: Создание нового документа в Excel происходит в три действия: - Создаем "связь" между PHP и Excel (создается дескриптор, как при работе с файлами); - Указываем, будет ли визуально открыта программа или нет; - Указываем программе через дескриптор, что нужно открыть новый документ. Для создания дескриптора ("связи") нужно использовать обращение к Excel через COM-объект: Код $xls = new COM("Excel.Application"); Теперь через дескриптор $xls мы можем обращаться ко всем свойствам и методам Excel. Будет ли отображаться Excel или нет, указывается в свойстве Visible() объекта Application(). Если мы этому свойству присвоим значение 1, то программа будет отображаться, если 0, то нет: Код $xls->Application->Visible = 1; Ну и, наконец, добавить новый документ можно при помощи метода Add() объекта Workbooks(): Код $xls->Workbooks->Add(); Т.е. чтобы просто запустить при помощи PHP Excel нужно выполнить следующий код: Код <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); // Добавляем новый документ ?> Первые две строки этого примера нужно использовать всегда при работе с Excel через PHP. Открытие ранее созданного документа: Открытие документа можно сделать при помощи метода Open() объекта Workbooks(). В передаваемом методу Open() параметре нужно указать имя открываемого файла: Код <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Open("C:\test.xls"); // Открываем ранее сохраненный документ ?> Если указать не полный а относительный путь, то поиск открываемого файла будет происходить не на сервере а на компьютере пользователя (по умолчанию это папка "Мои документы"). Сохранение открытого документа: Сохранение открытого документа производится при помощи метода SaveAs() объекта Workbooks(): Код <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); $range=$xls->Range("A1"); // Выбрали ячейку A1 $range->Value = "Проба записи"; // Вставили значение // Сохраняем документ $xls->Workbooks[1]->SaveAs("test.xls"); $xls->Quit(); //Закрываем приложение $xls->Release(); //Высвобождаем объекты $xls = Null; $range = Null; ?> Закрытие документа: Закрытие документа производится методом Quit(). Код <?php $xls = new COM("Excel.Application"); // Создаем новый COM-объект $xls->Application->Visible = 1; // Заставляем его отобразиться $xls->Workbooks->Add(); $range=$xls->Range("A1"); // Выбрали ячейку A1 $range->Value = "Что-то записываем"; // Вставили значение // Сохраняем документ $xls->Workbooks[1]->SaveAs("test.xls"); $xls->Quit(); //Закрываем приложение $xls->Release(); //Высвобождаем объекты $xls = Null; $range = Null; ?> Чуть позже я могу подготовить материал по разделам: - Формат ячеек: Выравнивание - Формат ячеек: Шрифт - Работа со строками - Работа с колонками - Добавление / Удаление / Переименование листов - Рисование таблиц - Копирование / вставка ячеек если кому-то будет это интересно -------------------- -> Я глаз даю, что умных в этом мире
-> Всего лишь двое: Я и Пентиум четыре. Следует помнить, что тебя отделяет от инвалидности лишь 5 минут и два прута от арматуры. Чем ты лучше? |
|
|
Гость_katjonka_* |
16.8.2006, 15:36
Сообщение
#2
|
Гость |
мегаблагодарность! очень нужная инфа!
анонсированные статьи тоже было б славно=) |
|
|
16.8.2006, 22:23
Сообщение
#3
|
|
Призрак форума Группа: Участник форума Сообщений: 3698 Регистрация: 24.10.2004 Из: Iceland Пользователь №: 15 |
Ну что ж... Раз просят, сделаем
-------------------- -> Я глаз даю, что умных в этом мире
-> Всего лишь двое: Я и Пентиум четыре. Следует помнить, что тебя отделяет от инвалидности лишь 5 минут и два прута от арматуры. Чем ты лучше? |
|
|
18.8.2006, 23:56
Сообщение
#4
|
|
MORPECH Группа: Участник форума Сообщений: 960 Регистрация: 7.4.2006 Из: 4e Пользователь №: 580 |
Народ, как пробить Порт, на php??? Как-то невдавался, а щя понадобилось...
ip пробивается так: <? $ip = $REMOTE_ADDR; ?> Тут переменная "ip" принимает значение ip адреса клиента.(для расширения кругозора на вс.пож.) -------------------- BMW CLUB INSTERBURG
|
|
|
19.8.2006, 3:39
Сообщение
#5
|
|
Призрак форума Группа: Участник форума Сообщений: 3698 Регистрация: 24.10.2004 Из: Iceland Пользователь №: 15 |
Я так понимаю тебе нужны сетевые функции.
Вот они: Код checkdnsrr - проверяет записи DNS, соответствующие данному имени Internet-хоста или IP-адресу closelog - закрывает соединение с системным логером/logger debugger_off - отключает внутренний отладчик PHP debugger_on - включает внутренний отладчик PHP define_syslog_variables - инициализирует все константы, относящиеся к syslog fsockopen - открывает соединение сокета домена Internet или Unix gethostbyaddr - получает имя Internet-хоста, соответствующее данному IP-адресу gethostbyname - получает IP-адрес, соответствующее имени данного Internet-хоста gethostbynamel - получает список IP-адресов, соответствующих имени данного Internet-хоста getmxrr - получает MX-записи, соответствующих имени данного Internet-хоста getprotobyname - получает номер протокола, ассоциированный с именем протокола getprotobynumber - получает имя протокола, ассоциированное с номером протокола getservbyname - получает номер порта, ассоциированного с Internet-сервисом и протоколом getservbyport - получает Internet-сервис, соответствующий порту и протоколу ip2long - конвертирует строку, содержащую (IPv4) Internet Protocol-адрес с точкой, в соответствующий адрес long2ip - конвертирует (IPv4) Internet-сетевой адрес в строку стандартного Internet-формата с точкой openlog - открывает соединение с системным логером pfsockopen - открывает постоянное соединение сокета домена Internet или Unix socket_get_status - возвращает информацию о потоке существующего сокета socket_set_blocking - устанавливает режим blocking/non-blocking сокета socket_set_timeout - устанавливает timeout-период сокета syslog - генерирует системное log-сообщение Из всей этой хрени тебе пригодится следующая: getservbyport (PHP 4) getservbyport - получает Internet-службу, которая соответствует порту и протоколу. Описание string getservbyport (int port, string protocol) getservbyport() возвращает Internet service, ассоциированный с port для специфицированного protocol как для /etc/services . protocol это "tcp" или "udp" (в нижнем регистре). Истесна, port в цикл или массив с перебором. Вот. П.С. В следующий раз отошлю в RTFM. -------------------- -> Я глаз даю, что умных в этом мире
-> Всего лишь двое: Я и Пентиум четыре. Следует помнить, что тебя отделяет от инвалидности лишь 5 минут и два прута от арматуры. Чем ты лучше? |
|
|
Гость_Loser_* |
28.9.2006, 8:03
Сообщение
#6
|
Гость |
Чуть позже я могу подготовить материал по разделам:
- Формат ячеек: Выравнивание - Формат ячеек: Шрифт - Работа со строками - Работа с колонками - Добавление / Удаление / Переименование листов - Рисование таблиц - Копирование / вставка ячеек если кому-то будет это интересно [/quote] А вы случайно не знаете как обратиться к примечанию(комментарию) ячейки, и копернуть его от туда?? |
|
|
28.9.2006, 10:27
Сообщение
#7
|
|
Призрак форума Группа: Участник форума Сообщений: 3698 Регистрация: 24.10.2004 Из: Iceland Пользователь №: 15 |
Нет, вот этого я, к сожалению, не знаю.
-------------------- -> Я глаз даю, что умных в этом мире
-> Всего лишь двое: Я и Пентиум четыре. Следует помнить, что тебя отделяет от инвалидности лишь 5 минут и два прута от арматуры. Чем ты лучше? |
|
|
Текстовая версия | Сейчас: 21.9.2024, 21:12 |