Предыдущие наши действия в этой статье были связаны с началом организации сайта. В этой части мы вернемся к Microsoft Excel и VBA и рассмотрим создание рабочей книги, которая фактически будет интегрировать всю рассмотренную выше информацию. Один лист создаваемой книги отведен для списка фирм, другой — для товаров, а еще один — для размещения заказов с сайта. Сформулируем задачи, которые стоят перед нами на ближайшее время:

Рис. 4.13. Лист, содержащий информацию о фирмах
Приступим к разработке первого листа, который назовем Фирмы (рис. 4.13). Здесь в трех столбцах размещается информация, которую необходимо перенести с офисного компьютера в базу данных MySQL, являющуюся частью нашего сайта (к ней будут обращаться скрипты на веб-сервере). Для переноса информации из книги Microsoft Excel в базу MySQL на сайте нам придется выполнить следующие действия:
Для выполнения первого шага из перечня выше описанных действий сначала разместим иа листе кнопку Преобразовать в файл. По щелчку на ней будет выполняться процедура (листинг 4.5), осуществляющая необходимое преобразование.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- Листинг 4.2. Файл index.html --> <html><head> <title>Стартовая страница сайта</title> <style type="text/css"> a { text-decoration:none; font-size: 14pt; } a:hover { text-decoration:underline; color: green; background-color: #CCFFCC; } </style> </head> <body> <a href="klients.php"> Раздел для клиентов </a> <br> <a href="admin.html"> Администрирование </a> </body> </html> |
Здесь сначала в переменной N подсчитывается количество записей о фирмах на первом листе. Далее производится открытие файла z.txt для последующей записи в него информации. Для этого мы использовали инструкцию Open. Затем с помощью другой инструкции, Print, в цикле записывается необходимая информация в файл, после чего он закрывается.
Теперь необходимо из редактора Visual Basic вернуться в приложение Microsoft Excel, выйти из режима конструктора и щелкнуть на кнопке на листе. В результате на диске С: появился текстовый файл z.txt. Если его теперь открыть в приложении Блокнот, то содержимое файла должно соответствовать имеющейся информации на листе Microsoft Excel (рис. 4.14).

Рис. 4.14. Содержание файла z.txt
Часть намеченного плана выполнена, а именно: мы сформировали информацию о фирмах в текстовом файле, который далее необходимо передать на веб-сервер. После этого на сервере следует произвести его обработку — передать информацию в базу данных. Учитывая новизну и некоторую сложность датпюго шага, рассмотрим его в два этапа. Сначала приведем скрипт, обеспечивающий передачу файла на веб-сервер.
Вернемся к листингу 4.4 и рис. 4.12. По первой гиперссылке в окне, представленном на рис. 4.12, производится загрузка с веб-сервера страницы perevod_firm.html. Эта страница представлена иа рис. 4.15, где от пользователя с помощью кнопки Обзор требуется выбрать необходимый файл для отправки иа сервер. В данном случае это только что заполненный необходимой информацией файл z.txt. Текст файла perevod_firm.html представлен в листинге 4.6.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- Листинг 4.3. Файл admin.html --> <html> <head> <title>Авторизация</title> </head> <body> <form action="obr.php" method="post"> Логин: <input type="text" name="n1"><br><br> Пароль: <input type="password" name="n2"><br><br> <input name="n3" type="submit" value="OK"> </form> </body> </html> |

Рис. 4.15. Форма для выбора файла, отправляемого на сервер
В параметре action формы указано, что обработка на сервере должна производиться скриптом upload.php, который приведен в листинге 4.7. На рис. 4.16 показан результат выполнения данного скрипта в случае, если при передаче не произошло ошибок.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!-- Листинг 4.4. Содержание скрипта obr.php -->
<html>
<head>
<title>Проверка пароля и логина</title>
<style type="text/css">
a {text-decoration:none; font-size:14pt;}
a:hover {text-decoration:underline; color:green; background-color: #CCFFCC; }
</style>
</head>
<body>
<?php
if ( isset($_POST["n3"]))
if ($_POST['n1'] == "Nice" && $_POST['n2'] == "357")
{echo "Авторизация прошла успешно!!!";
echo "<br><a href='perevod_firm.html'>Перевод информации о фирмах в базу данных</a>";
echo "<br><a href='perevod_tov.html'>Перевод информации о товарах в базу данных</a>";
echo "<br><a href='zakazi.php'>Информация о заказах</a>";}
else
{die('Неверный пароль <br><a href="index.html"><br>
Вернуться на стартовую страницу</a>'); }
}
else
{echo '<a href="index.html">Вернуться на главную страницу</a>';}
?>
</body>
</html> |

Рис. 4.16. Результат переноса файла на сервер
Таким образом, мы разобрали технологию передачи текстового файла z.txt на веб-сервер. Следующая задача заключается в усложнении скрипта, приведенного в листинге 4.7, в плане функциональности работы с базой данных. Для этого нам предварительно потребуется разработать вспомогательную программу, которая будет осуществлять подключение к базе данных.
Подключение к базе данных MySQL — это одно из первых действий, которое необходимо выполнить при работе с данной системой управления базой данных. Для этого используется функция MySQL_connect($sqlhost/$sqluser/$sqlpass), где $sqlhost — имя хоста (чаще всего указывается localhost, т. к. обычно MySQL и PHP-скрипт находятся на одном сервере); $sqluser — имя пользователя, под которым будет осуществляться подключение к серверу; $sqlpass — пароль пользователя.
Если подключение к базе данных с использованием функции MySQL_connect не удалось, то она вернет FALSE. Для корректности работы в этом случае функция MySQL_connect используется в связке с функцией die, которая позволяет завершить работу скрипта с выводом сообщения об ошибке: MySQL_connect($sqlhost/$sqluser/$sqlpass) or die("MySQL не доступен! ".MySQL_error()). После подключения к MySQL необходимо выбрать базу данных, с которой будет производиться работа, для чего предназначена следующая функция: MySQL_select_db($db), где $db — имя базы данных. Если MySQL_select_db будет выполнена успешно, то данная функция вернет TRUE (в противном случае FALSE). Для MySQL_select_db также используют защиту с помощью функции die. В листинге 4.8 приведен скрипт, который нам потребуется для подключения к базе данных.
Для системы Денвер имя хоста должно быть localhost, а имя пользователя — root.
1 2 3 4 5 6 7 8 9 | <!-- Листинг 4.8. Скрипт connect.php, выполняющий подключение к базе данных --> <?php $sqlhost="localhost"; $sqluser="root"; $sqlpass=""; $db="Glava4"; MySQL_connect(sqlhost,sqluser,sqlpass) or die("MySQL не доступен!" ".MySQL_error()); MySQL_select_db($db) or die("Нет соединения с базой данных" .MySQL_error()); ?> |
Теперь, когда подготовительная работа завершена и вспомогательный скрипт готов, перейдем к необходимым дополнениям в скрипте upload.php (см. листинг 4.7). Модернизированный вариант файла, который будет обрабатывать форму perevod_firm.html, представлен в листинге 4.9.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!-- Листинг 4.9. Модернизация файла upload.php --> <html><head> <title>Копирование информации о фирмах в базу данных</title> </head> <body> <?php if (copy($_FILES["filename"]["tmp_name"],$_FILES["filename"]["name"])) { echo "<h1>Файл перенесен на сервер</h1>"; require_once('connect.php'); $f=fopen("z.txt","rt") or die("He могу открыть файл"); while (!feof($f)) { $data1=fgets($f); // код $data2=fgets($f); // название $data3=fgets($f); // пароль if ($data1 <> "") { $sql="INSERT INTO Organization SET id=".$data1.","name='".$data2."', pass='".$data3."'"; MySQL_query($sql) or die(MySQL_error()); echo "Информация введена в базу данных<br>"; } } fclose($f); } ?> </body> </html> |
В строке require_once('connect.php'); используется новая функция, которая предназначена для подключения модуля (файла), имя которого передается в качестве параметра и должно быть заключено в кавычки. В качестве модуля может выступать как программа на РНР, так и HTML-файл. Таким образом, мы обеспечиваем подключение к ранее созданной нами базе данных.

Рис. 4.17. Результат переноса информации из файла в базу данных
После передачи файла на сервер он открывается для чтения: $f=fopen("z.txt","rt") or die("He могу открыть файл"). Далее с помощью трех обращений к файлу с использованием функции fgets из него извлекается группа данных. Эта группа данных представляет информацию (код, название и пароль) по одной организации. Далее с помощью SQL-запроса производится вставка записей в таблицу Organization: $sql="INSERT INTO Organization SET id=".$datal.",name=1".$data2."', pass='".$data3."*". В этой конструкции используется запрос INSERT, в котором в качестве параметров указаны:
На рис. 4.17 отображен результат работы скрипта upload.php. Теперь, если вернуться к работе с утилитой phpMyAdmin, то мы увидим перенесенные данные с листа Microsoft Excel (рис. 4.18). Таким образом, поставленная задача о переносе информации по фирмам в базу данных решена. Далее требуется выполнить аналогичное действие с перечнем товаров.

Рис. 4.18. Внесенные сведения об организациях
В этой части мы разберем технические действия, которые необходимо реализовать для функциональности второй гиперссылки в окне на рис. 4.12, которая связана с переносом информации о товарах из книги Microsoft Excel в таблицу Tovari. В книге Microsoft Excel для номенклатуры отведен лист под соответствующим названием (рис. 4.19). Здесь информация сосредоточена в двух столбцах Код и Название. В листинге 4.10 приведена процедура обработки щелчка на кнопке Преобразовать в файл. В результате ее выполнения мы получаем файл zz.txt, структура которого представляет последовательность пар — код и название товара.

Рис. 4.19. Содержание листа Номенклатура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ' Листинг 4.10. Обработка щелчка на кнопке на листе Номенклатура Private Sub CommanButton1_Click() N = 0 While Worksheets("Номенклатура").Cells(N + 2, 1).Value <> "" N = N + 1 Wend Open "Czz.txt" For Output As #1 For i = 1 To N For j = 1 To 2 a = Worksheets("Номенклатура").Cells(i + 1, j).Value Print #1, a Next Next Close #1 End Sub |
После фрагмента на VBA опять вернемся к веб-программированию. Для гиперссылки Перевод информации о товарах в базу данных (см. рис. 4.12) необходимо разработать форму для выбора необходимого файла zz.txt. Данная форма (рис. 4.20) реализуется с помощью HTML-файла, представленного в листинге 4.11.
1 2 3 4 5 6 7 8 9 10 | <!-- Листинг 4.11. Форма выбора файла с информацией о номенклатуре --> <html><head> <title>Отправка на сайт информации о номенклатуре</title> </head><body> <h1>Отправка на сайт файла с информацией о номенклатуре</h1> <form action="upload2.php" method="post" enctype="multipart/form-data"> Имя файла:<input type="file" name="filename" size="40"><br><br> <input type="submit" value="Загрузить"><br> </form> </body></html> |

Рис. 4.20. Форма для выбора файла с номенклатурой
В листинге 4.11 в параметре action формы указано, что обработка данных на сервере должна производиться скриптом upload2.php (листинг 4.12). Данный скрнпт аналогичен программе, представленной в листинге 4.9, поэтому какого-либо комментария здесь не требуется.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <!-- Листинг 4.12. Скрипт upload2.php --> <html><head> <title>Отправка информации о товарах на сервер</title> </head> <body> <?php if (copy($_FILES["filename"]["tmp_name"],$_FILES["filename"]["name"])) { echo "<h1>Файл перенесен на сервер</h1>"; require_once('connect.php'); $f=fopen("zz.txt","rt") or die("He могу открыть файл"); while (!feof($f)) { $data1=fgets($f); // код $data2=fgets($f); // Название if ($data1 <> "") {$sql="INSERT INTO Tovari SET id=".$data1.",naz='".$data2."'"; MySQL_query($sql) or die(MySQL_error()); echo "Информация введена в базу данных<br>"; } } fclose($f); } ?> </body></html> |
Ha pиc. 4.21 показал успешный результат передачи сведений о товарах.

Рис. 4.21. Результат передачи информации о товарах
Управление Excel из других офисных программ пакета Microsoft Office
Как отправлять электронные сообщения Microsoft Outlook прямо из вашего листа таблицы Excel с помощью VBA
Очень простой пример управления Word из Excel с помощью VBA
О. А. Сдвижков — Непараметрическая статистика в MS Excel и VBA
С. Роман — Использование макросов в Excel
Как обеспечить вывод значений выпадающего списка с двоеточием, как в бухгалтерских программах?
Как при помощи инструментов Excel решить задачу о коробке максимального объема
Построение графика функции одной переменной средствами Excel
Как правильно вводить, редактировать и копировать формулы в таблицах Excel
Как в Excel обойтись без подстановки шрифтов при применении малых кеглей