Программа для склада, для магазина, для производства |
Vvs "Офис-Склад-Магазин"Редактирование форм документов и отчетов |
П.10. Примеры взаимодействия с MS Excel.
Для передачи данных в MS Excel можно использовать два способа: через текстовый файл и с помощью команд динамического обмена данными (DDE). Через текстовый файл можно также импортировать данные в программу из Excel.
Для подготовки текстового файла для последующего открытия в Excel, используют печатные формы документов и отчетов. Основной их особенностью является то, что поля .в тексте разделяются символом табуляции. При открытии такого документа Excel разделяет поля по разным столбцам. Недостатком такого способа является то, что в полученном документе отсутствует форматирование и формулы.
Более удобным способом является использование механизма динамического обмена данными (DDE). В этом случае имеется возможность передавать данные в заранее подготовленный, отформатированный документ, содержащий, при необходимости, формулы, изображения, диаграммы, макросы.
Для установки связи с документом price.xls используйте следующую конструкцию:
@DDECONNECT EXCEL;price.XLS
Если документ не открыт, то программа попытается его открыть. Если документ открыт в одном из окон Excel, то он может быть закрыт другим документом. Для его активации можно использовать конструкцию:
@DDEEXECUTE [Activate("price.xls")]
Для передачи данных с помощью
DDEPOOKE не в первый, а какой-либо другой лист, можно использовать следующую конструкцию (документ уже должен быть открыт):
@DDECONNECT EXCEL;price.XLS:Лист2
Пример для установки обмена с листом "Фактура" в файле PLAT.XLS:
@DDEEXECUTE [Activate("plat.xls")]
@DDECONNECT EXCEL;plat.XLS:Фактура
@DDEEXECUTE [WORKBOOK.ACTIVATE("Фактура")]
@DDEEXECUTE [APP.ACTIVATE()]
Для вызова собственных макросов также используйте
DDEEXECUTE с командой Excel RUN. Вот текст простого макроса в Excel:
Sub SelectList2()
rem Активизация второго листа
Worksheets(2).Activate
rem Вывод окна MS Excel на передний план
Application.Visible = True
End Sub
Для вызова этого макроса можно использовать следующую строку:
@DDEEXECUTE [Run("SelectList2")]
При вызове собственной функции имеются сложности с передачей в нее параметров. Вариантом решения этой проблемы может быть передача необходимых значений в заранее определенные ячейки таблицы Excel с помощью команды DDEPOKE. Затем вызывается собственная процедура, которая берет данные из этих ячеек.
Для передачи значений в ячейки таблицы используйте команду
@DDEPOKE. Ячейки адресуйте в формате R1C1 (ряд 1 столбец 1). Например, чтобы передать текущую дату в первую ячейку:
@DDEPOKE R1C1;[&TODAY(0) ]
Для формирования документа, например, со списком товаров, необходимо использовать переменную как счетчик строк. Эта переменная будет задавать номер строки в таблице Excel, в которую происходит запись. Вот пример для вывода списка наименований товаров:
@XN=3 (начинаем с третьей строки)
{
@DDEPOKE R[~XN,-1]C1;[DTWR,-1]
@XN=XN+1
}
Перед формированием нового документа бывает необходимо очистить ячейки со старыми данными.
Для этого можно использовать следующую конструкцию:
@DDEEXECUTE [Select("R1C1:R100C4")][CLEAR()]
В результате выделяются ячейки A1:D100 и их содержимое очищается.
Вывод на печать документа:
@DDEEXECUTE [PRINT()]
Закрытие документа:
@DDEEXECUTE [CLOSE()]
Авто подбор высоты строк:
@DDEEXECUTE [ROW.HEIGHT(0,"R17:R68",TRUE,3)]
Открываем скрытые строки:
@DDEEXECUTE [ROW.HEIGHT(0,"R1:R1000",TRUE,2)]
Скрываем строки, начиная со строки, номер которой в переменной XN:
@DDEEXECUTE [ROW.HEIGHT(0,"R\[~XN,-1\]:R1000",TRUE,1)]
Выделяем строку номер которой в переменной XN и вставляем разделитель страницы:
@DDEEXECUTE [Select("R\[~XN,-1\]:R\[~XN,-1\]")]
@DDEEXECUTE [SET.PAGE.BREAK()]
Выделяем ячейку и изменяем шрифт:
@DDEEXECUTE [Select("R1C1")][FONT.PROPERTIES("Arial","",24)]
или
@DDEEXECUTE [ [FONT.PROPERTIES("Arial","Полужирный")]
для английской версии Windows может потребоваться след строка:
@DDEEXECUTE [FONT.PROPERTIES("Arial","Bold")]
Выделяем ячейки и делаем их в рамке:
@DDEEXECUTE [Select("R1C1:R2C3")][BORDER(1)]