Создание текстовых файлов, импорт и экспорт текста (ввод-вывод), поиск и вставка текста по критерию. (продолжение следует)
Работа со стрингами и файлами За неделю на форуме было два вопроса по работе со стрингами и файлами. В первом случае требовалось в создаваемом текстовом файле после оговоренного слова вставить таблицу Во втором - экспортировать текст модуля с дальнейшим форматированием (с отступами в условиях, циклах и, возможно, подсветкой). Попробуем разобраться и опишем решение первого случая... Инструментарий: БД Access 97 От вас требуется немного - создать (или скопировать из другой) таблицу tblMonths c любым количеством полей и содержимым а) Экспорт поля МЕМО в текстовый файл и вставка таблицы БД в заданном месте по критерию поиска Здесь слов поболе будет. :) Конечно, можно установить объектную переменную, открыть или создать документ MSOffice, но... Наверное НТМL обеспечивает достаточно универсальный формат файла, который откроет и Word и Excel и при этом обеспечивает необходимое форматирование текста, как: - гиперссылки - подсветку текста - формат букв - рисование таблиц - вставку изображений и объектов Если кто сможет добавить, углубить и улучшить приведенные примеры - милости прошу, все будет опубликовано! Итак, существует текст, на основе которого надо создать текстовой файл в формате HTML при этом, после определенного сочетания символов (в этом примере сочетание символов "общая сумма.") должна быть сделана вставка с оформлением в виде таблицы... Очевидно, что здесь надо использовать встроенные функции Len, InStr и Mid Function fncExportStr2HTML() Dim strText As String, strTempTXT As String, strTable As String
'текст для файла (для простоты поместим его в переменную) strText = "Я продаю телекомуникационные шкафы, и есть " & _ "проблема считать их цену с комплектацией. Все шкафы разные " & _ "и комплектующие соответственно тоже к ним разные. Я сделал " & _ "меню, где выбираешь тип шкафа, и соответственно заполняется " & _ "все форма комплектующими которые подходят именно к нему, " & _ "естественно с ценой, где нужно проставить только количество, " & _ "после чего сбивается общая сумма. Может есть что то уже готовое, " & _ "a то уже два месяца бьюсь, но ничего нормального не получаеться, " & _ "мне нужен отчет а он и его выводить не хочет. Может кто поможет!!!" & _ "Заранее благодарю!!!!" 'здесь я сознательно назначаю новые переменные для лучшего понимания Dim hFile As Long, myNameFile As String Dim intFind As Integer, strFind As String 'назначаем имя выходного файла, он будет располагаться 'в том же каталоге, что и ваша БД 'функция Subdir описана в разделе QuickService myNameFile = Subdir & "new.html" 'строка после которой надо вставить таблицу strFind = "общая сумма." 'строка с описанием тегов таблицы 'вообще говоря этой переменной можно назначить функцию с описанием таблицы 'и ее содержимого strTable = <table border=1 width='70%'height='200'><tr><td></td></table>" 'определяем первое вхождение строки поиска в тексте intFind = InStr(strText, strFind) 'добавляем в текст strText вставку после заданных слов '2 строка - часть текста до вхождения строки поиска '3 строка - вставка '4 строка - часть текста после строки поиска strText = _ Mid(strText, 1, intFind + Len(strFind) - 1) & _ strTable & _ Mid(strText, intFind + Len(strFind)) 'hFile - дескриптор (номер)файла 'дескрипторы файлов представляют собой целые числа 'однозначно идентифицирующие открытые файлы и 'являются основой использования функций ввода-вывода 'Freefile определяет свободный дескриптор 'это лучше, чем использовать фиксированные дескрипторы типа #1 hFile = FreeFile 'Создаем файл с доступом на запись Open myNameFile For Output Access Write As hFile 'Записываем строки описывающие заголовок страницы Print #hFile, "<html><body>" 'сливаем текст в файл Print #hFile, strText 'Записываем строки описывающие закрывающие теги страницы Print #hFile, "</body></html>" Close hFile MsgBox "Готово" 'открываем готовую страницу Application.FollowHyperlink myNameFile, , True End Function |
Если вы скопируете выше приведенную процедуру и Subdir в новую базу данных, и запустите функцию fncExportStr2HTML, то в директории вашей базы данных появится файл new.html, в котором таблица будет находится после слов, которые требовалось найти... Чтобы освещение первого из вопросов выглядело законченным, создадим процедуру которая опишет в HTML-файле таблицу из базы данных.
Итак создание таблицы для HTML-файла Я решил написать процедуру, которая могла экспортировать любую таблицу в HTML-формат независимо от количества полей и записей
вызывается она как fncCreateTableHTML("Имя_таблицы для экспорта") Function fncCreateTableHTML(strTable As String) as String Dim strTable As String Dim tdf As TableDef, dbs As Database Dim rs As Recordset, fld As Field Set dbs = CurrentDb Set tdf = dbs.TableDefs("tblMonths") Set fld = tdf.Fields(0) 'записываем заголовки столбцов For Each fld In tdf.Fields Debug.Print fld.Name strTable = strTable & "<td width='120'><b><center>" & fld.Name & "</center></td>" Next fld strTable = "<table border=1 bordercolor='red'><tr>" & _ strTable & "</tr>" 'заполняем таблицу по строкам Set rs = dbs.OpenRecordset(tdf.Name) Do Until rs.EOF strTable = "<tr>" & strTable For Each fld In rs.Fields Debug.Print fld.Value strTable = strTable & "<td>" & fld.Value & "</td>" Next fld strTable = strTable & "</tr>" rs.MoveNext Loop rs.Close Set dbs = Nothing 'конец таблицы strTable = strTable & "<tr></table>" End Function |
Теперь осталось заменить заменить строку из процедуры fncExportStr2HTML strText = _ Mid(strText, 1, intFind + Len(strFind) - 1) & _ strTable & _ Mid(strText, intFind + Len(strFind)) |
на строку strText = _ Mid(strText, 1, intFind + Len(strFind) - 1) & _ fncCreateTableHTML("tblMonts") & _ Mid(strText, intFind + Len(strFind)) |
Следует сказать, что вполне вероятно потребуется работать не с таблицей, а с запросом. Тогда надо объявить переменную типа QueryDef и установить переменную семейства (например: Set qdf = dbs.QueryDefs("Имя_Запроса") И все :)
P.S. O-ops! Чуть не забыл! Еще два примера по работе с файлами: 1. Прочитать содержимое файла по строкам (strInput - читаемая строка, а strFileOut - имя файла ) : Dim hFileOut As Long hFileOut = FreeFile Open strFileOut For Input Access Read As hFileOut Do Until EOF(hFileOut) Line Input #hFileOut, strInput Debug.Print strInput Loop Close hFileOut |
2. Открыть файл в режиме добавления (strText - текст, который вы хотите добавить, а strFile - имя файла) Dim hFile As Long hFile = FreeFile Open strFile For Append Access Write As hFile Print #hFile, strText Close hFile |
Теперь рассмотрим экспорт модуля или поля МЕМО в текстовый файл б) Экспорт модуля в текстовый файл DoCmd.OutputTo acModule, "МодульБД", "MS-DOSText(*.txt)", Subdir & "text.txt", True |
Уточним, что МодульБД - модуль текущей базы данных, Subdir - функция возращающая текущий каталог, в котором находится БД, text.txt - экспортированный в файл текст модуля и параметр True означает автооткрытие этого файла
Заодно просится процедура, которая выводит все модули базы в одноименные текстовые файлы :) Function fOutputAllModules() Dim rs As Recordset Dim mySQL as String mySQL = "SELECT MSysObjects.Name FROM MSysObjects WHERE (MSysObjects.Type)=-32761;" Set rs = CurrentDb.OpenRecordset(mySQL) Do Until rs.EOF DoCmd.OutputTo acModule, rs!Name, "MS-DOSText(*.txt)", _ Subdir & rs!Name & ".txt", True rs.MoveNext Loop rs.Close End Function | Продолжение следует ... Просмотров: 12155
Ваш коментарий будет первым | | |