Передача данных из таблиц VFP в MS Word
Существует целый ряд отчетов, в которых не требуется дополнительных вычислений, но выполненных в формате, который нецелесообразно или невозможно представить стандартным построителем отчетов VFP. Кроме того, стандартные отчеты можно только посмотреть и распечатать, а редактировать никак нельзя. В таких случаях удобно использовать возможности стандартного текстового процессора Microsoft Word.
Работа с текстовым процессором мало чем отличается от работы с табличным процессором. Вначале следует подключить Microsoft Word 9.0 Object Library к списку стандартных типов в настройках технологии IntelliSense. Как это сделать рассмотрено выше, на примере библиотеки Excel.
Затем следует создать объект типа приложения, но в качестве класса указать приложение Word. Это выполняется командой oWord=CREATEOBJECT('Word.Application'). В отличии от Excel, с его развитой структурой подобъектов, в Word достаточно создать новый документ и уже можно с ним работать. Создание нового документа осуществляется методом Add() подобъекта Documents.
Операции с контентом (содержимым документа) в Word осуществляются посредством обращения к подобъекту приложения Selection. Поэтому любые операции будут выглядеть как oWord.Selection.<необходимые действия>. Запись текстовой строки осуществляется методом TypeText(). К сожалению, структурной единицей текста верхнего уровня в Word является не строка, а абзац. Для принудительного перехода к новой строке в документе введенный текст необходимо объявить параграфом. При этом к параграфу применятся настройки, объявленные по умолчанию (отступы, выравнивания и т.п.). Ниже приведен простейший пример программного кода, создающего документ Word и записывающий в него текстовую строку:
*создаем объект типа приложения Ворда
oWord=CREATEOBJECT('Word.Application')
*создаем новый документ
oWord.Documents.Add()
*записываем в документ строку текста
oWord.Selection.TypeText("Hello World")
*объявляем ее как параграф
oWord.Selection.TypeParagraph
*делаем Ворд видимым
oWord.visible=.T.
Кроме текстовых абзацев документ Word может содержать в себе более сложные объекты. Часто используемым подобъектом текста является таблица. Для вставки новой таблицы в документ следует использовать метод Add() объекта Tables. Этот метод требует указания обязательных параметров, а именно: диапазона (туманное понятие, рекомендуется указывать текущий диапазон), количества строк и столбцов в таблице. На самом деле можно указывать еще множество параметров создаваемой таблицы, но все они являются необязательными и рассматриваться в рамках данной работы не будут. В последствии к таблице можно обращаться по ее индексу, например oWord.Selection.Tables(1).
Таблица в Word является двумерным объектом, состоящим из более простых подобъектов типа ячейки. Соответственно, каждая ячейка имеет две координаты, номер строки и номер столбца. Таким образом, обращение к ячейке третьей строки пятого столбца выглядит как oWord.Selection.Tables(1). Cell(3,5).
Ниже приведен пример программного кода передающего данные из таблицы товаров в текстовый процессор. Набор данных аналогичен примеру с Excel. Оператор WITH … ENDWITH использован сугубо для сокращения размера программного кода. Более подробно с его работой можно ознакомиться в системе помощи VFP.
*создаем объект типа приложения Ворда
oWord=CREATEOBJECT('Word.application')
*создаем новый документ
oWord.Documents.Add()
*записываем в документ его заголовок (строку текста)
oWord.Selection.TypeText("Список товаров")
*объявляем ее как параграф
oWord.Selection.TypeParagraph
*две строки пропуска для красоты
oWord.Selection.TypeParagraph
oWord.Selection.TypeParagraph
SELECT goods
GO top
*добавляем в документ таблицу
*первый параметр - в качестве диапазона указываем текущий
*второй параметр - количество строк указываем равным количеству записей в таблице GOODS
*третий параметр - количество столбцов равно 2
oWord.Selection.Tables.Add(oWord.Selection.Range,RECCOUNT(),2)
*i - переменная с номером строки таблицы в Ворде
i=1
*перебираем все записи в GOODS
SCAN
WITH oWord.Selection
*в таблице с индексом 1 выбираем ячейку в первом столбце строки i
.Tables(1).Cell(i,1).Select()
*в выбранную ячейку записываем название товара
.TypeText(goods.cnmgoods)
*во второй столбец строки заносим цену товара
.Tables(1).Cell(i,2).Select()
.TypeText(ALLTRIM(STR(nunitprice)))
ENDWITH
*переходим к следующей строке
i=i+1
ENDSCAN
*для второго столбца таблицы указываем авторазмер
oWord.Selection.Tables(1).Columns(2).autofit()
*делаем Ворд видимым
oWord.visible=.T.
Примечания:
1. Получение данных из офисных продуктов осуществляется аналогичными действиями, только в программном коде источником данных следует прописывать офисное приложение.
2. Синтаксис команд VFP для работы с внешним приложением практически повторяет синтаксис VBA в офисных продуктах. В случае возникновения затруднений рекомендуется записывать макросы в приложениях MS Office и смотреть, какими же командами выполняется нужное действие. После небольшой доработки напильником можно получить вполне рабочий код в формате VFP.
3. Действие практически любой команды следует проверять вначале в командном окне VFP, а только затем включать в программный код. При этом не следует забывать, что для выполнения некоторых команд надо совершить предварительные действия, например, прежде чем пересылать значение в ячейку Excel, было бы неплохо предварительно создать в том же командном окне само приложение, рабочую книгу в нем и получить ссылку на рабочий лист.
4. Описанный метод можно применять к любым объектам, зарегистрированным в операционной системе. Набор команд для работы с этими объектами необходимо изучать/доставать своими силами. К счастью, для продуктов MS Office набор команд выбран на основе интуитивно понятного и простого языка VBA. Для остальных объектов – интернет Вам в помощь.
5. Не забывайте, что для большинства пользователей, использование знакомых программных продуктов значительно повышает юзабилити Вашего приложения. Перереализовывать всем известные интерфейсы текстового процессора (Word) и табличного редактора (Excel) слишком трудоемко. Гораздо более простым решением является использование того, что уже сделано и легко доступно.
6. Все приведенные примеры работают в среде MS Office 2000/2003. Для 2007 версии работоспособность не гарантируется.
Задания
1. Передайте в Word полный список менеджеров, зарегистрированных в базе данных.
2. Передайте в Excel данные об именах и телефонах заказчиков. Если телефонов у одного заказчика несколько, его имя должно дублироваться на рабочем листе.
3. Сформируйте в текстовом процессоре Word прайс–лист товаров. Документ должен содержать заголовок в виде отдельной строки текста, а также таблицу из трех колонок. В первой должны располагаться названия товаров, во второй – цена, в третьей – праздничная 15-типроцентная скидка.
4. Для указанного номера заказа сформируйте в табличном процессоре Excel бланк заказа. Документ должен содержать имя заказчика, дату и номер заказа. Ниже в табличном виде должна быть представлена информация о товарах в заказе, а именно название товара, цена за единицу, заказанное количество. Кроме того, в виде формул на рабочем листе должен быть организован столбец, в котором по каждой позиции товаров вычислялась бы итоговая сумма (цена за единицу умноженная на количество). В самом низу, так же в виде формулы Excel, должна подсчитываться общая сумма заказа.
Список литературы
1. Информационные системы: Учебное пособие для студентов вузов по специальности «Информационные системы в экономике» / под ред. Волкова В.Н. – СПб.: изд – во СПБГТУ, 1998.
2. Каратыгин С.А., Тихонов А.Ф., Тихонова Л.Н. «Visual FoxPro 6.0» – М.: ЗАО «Издательство БИНОМ», 2000.
3. Ложе И. Информационные системы. Методы и средства. – М.: изд-во «Мир», 1979.
4. Тихонов А.Ф., Тихонова Л.Н. «Visual FoxPro 5.0 (без проблем!)» – М.: Восточная Книжная Компания, 1997.
5. Методические указания для выполнению лабораторных работ по Visual FoxPro 9.0. / сост. Л.К. Скодорова, А.А. Ляху. Рыбница, 2010.
6. http://referat.ru/pub/item/23122
7. http://www.bankreferatov.ru
8. http://referat.ru/pub/item/15853
9. http://yurkovs.narod.ru/Ekolek/Tema5.htm
10. http://www.studzona.com/referats/view/13697
11. http://www.studzona.com/referats/view/13697
12. http://www.bntu.info/referat/work_6450.html
13. http://www.5ballov.ru/referats/preview/38041
14. http://www.aup.ru/books/m67/4.htm
Учебное издание
Visual FoxPro 9.0 SP1
Часть II
Лабораторный практикум
Учебное пособие
Формат А4. Уч.-изд., 6,4 п.л.
Тираж – 100 экз.