Формування звітів з vfp в excel, валентин яричевскій (михайло дроздів

Формування звітів з VFP в Excel. Шпаргалка.

Валентин Яричевскій

Ця шпаргалка виросла із прикладів та іншої інформації з Ехі, плюс набутий особистий досвід. Працювати мені з нею досить зручно. Іноді я милю цю шпаргалку тим, хто задає питання в луні. і я відчуваю, що людині важко :-). від них приходять подяки. Ось я і подумав: добре якщо ця шпаргалка з'явиться на твоєму сайті, полегшивши набуття досвіду всім бажаючим.

Спільні дії.

RELEASE ole1, ole2

Відкриття при створенні нового документа

* Спосіб, коли жевріє після виходу:
ole1 = CreateObject ( "Excel.Application")
ole1.WorkBooks.add
ole2 = ole1.Application
* Спосіб, коли таб Excel зникає після виходу:
ole1 = GetObject ( "", "Excel.Sheet")
ole2 = ole1.Application

Відкриття для існуючого документа (Excel зникає після виходу)
fil_excel = cfg_tgdef + "RECHNUNG _" + nominv_r + ". xls"
filnam_r = "RECHNUNG _" + nominv_r + ". xls"
ole1 = GetObject (fil_excel)
ole1.Application.Windows (filnam_r) .Activate
ole2 = ole1.Application
ole2.Visible = .T.

Для прискорення автоматичної роботи треба поставити
  • На початку роботи, відразу після створення об'єкта
    ole2.WindowState = xlMinimized мінімізувати вікно
    ole2.ScreenUpdating = .F. не відображати зміни на екрані
  • В кінці роботи, перед показом звіту
    ole2.ScreenUpdating = .T.
    ole2.WindowState = xlMaximized

Запам'ятовування результату в файл
ole2.ActiveWorkBook.Save в той же файл
ole2.ActiveWorkBook.SaveAs (fil_excel) в новий файл

розміри вікна
#DEFINE xlMinimized -4140
#DEFINE xlMaximized -4137
#DEFINE xlNormal -4143
ole2.WindowState = xlMinimized згорнути вікно
ole2.WindowState = xlNormal нормальне вікно
ole2.WindowState = xlMaximized максимальне вікно

Різне
ole2.DisplayAlerts = .F. Прибрати запит "Зберегти файл?" (Перед виходом)
ole2.DisplayFormulaBar = .F. Прибрати панель формул
ole2.Version Повертає версію Excel


запуск макросу
Ole2.Run ( "EXPORT", m.file) "Export" - ім'я макросу, m.file- параметр

видалення макросу
workbooks ( "book1"). VBProject.VBComponents (5) .CodeModule.DeleteLines 2,1
Видаляє рядок номер 2 з модуля номер 5

Робота з осередками

Розміри
.RowHeight = 2 висота рядка (2 - вузька, прокладка, 15-20 - нормальна)
.ColumnWidth = 5 ширина стовпця (приблизно в символах Courier, 9)

стиль посилань
Ole2.ReferenceStyle = значення
#DEFINE xlA1 1
#DEFINE xlR1C1 -4150

виділення осередків
Ole2.Cells (2,4) .Select
Ole2.Range (ole2.Cells (2,4), ole2.Cells (3,6)). Select

Зменшення писанини з одним осередком
WITH Ole2.Cells (2,4)
.Select
....
ENDWITH

Зменшення писанини з діапазоном
Ole2.Range (ole2.Cells (2,4), ole2.Cells (3,6)). Select
WITH Selection
... ..
ENDWITH

Різне при роботі з осередками або діапазоном
.MergeCells = .T. об'єднання осередків
.Value = zag3_r привласнення значення (можна без .Value: ole2.Cells (2,3) = "aa")
.WrapText = .T. текст переноситься автоматом за словами всередині яч
.NumberFormat = "@" не цифровий формат (число у вигляді тексту)
.NumberFormat = "0.00" числовий, завжди 2 дес знака після коми
.interior.colorindex = число колір фону інший (38,42, ...)

Вирівнювання тексту в осередках
.HorizontalAlignment = число по горизонтальн
.VerticalAlignment = число по вертикалі
#DEFINE xlLeft 1 вирівнювання зліва (зверху)
#DEFINE xlRightg 4 справа по горизонталі
#DEFINE xlCenterg 3 для горизонталі по центру
#DEFINE xlCenterv 2 для вертикалі по центру
Вирівнювання всіх (або виділених) рядків (або стовпчиків) за найвищою (широкому) виконується однією командою після заповнення
AutoFit.

Шрифти, фонти
.Font.Name = cfg_fntcou ім'я фонта
.Font.Size = 8 розмір фонта
.Font.Bold = .T. Жирний шрифт (.F. - не жирний)
.Font.Italic = .T. курсив
.Font.Underline = число підкреслити всю осередок (According) або символи
#DEFINE xlUnderlineStyleDouble -4119
#DEFINE xlUnderlineStyleDoubleAccounting 5
#DEFINE xlUnderlineStyleNone -4142
#DEFINE xlUnderlineStyleSingle 2
#DEFINE xlUnderlineStyleSingleAccounting 4
Зауваження. Іноді при тексті російською (особливо в колонтитулі) з фонтом Times з'являється пробіл всередині слова. Цю прогалину видаляється шляхом використання іншого фонта (наприклад, Arial).

Вставка малюнка в клітинку
Range ( "B6"). Select
ActiveSheet.Pictures.Insert ( "C: \ VFP \ EL \ vaz_logo.gif"). Select

Як додати розрив сторінки в Excel'е з VFP
Ole2.Range ( "A15"). Select
Ole1.ActiveWindow.SelectedSheets.HPageBreaks.Add (ole2.ActiveCell)
де ole2 і ole1 - об'єкти сторінки і Excel.
Можна в одну строчку і без переміщення курсора
Ole2.HPageBreaks.Add (ole2.Range ( "A15"))


Як дізнатися координати осередку
Selection.Address, Selection.Row, Selection.Column,
Selection.Rows.Count, Selection.Column1.Count

Використання формул
  • 1-й спосіб (не спрацював):
    ole2.ActiveCell.Formula = '= SUM (D7: D20)'
  • 2-й спосіб:
    .FormulaR1C1 = "=<формула>"
    приклад
    ole2.Cells (5,6) .Select
    r = "= RC [+3]"
    FOR i = 2 TO tlmmk_r
    r = r + "+ RC [" + ALLT (STR (i * 3,6)) + "]"
    ENDFOR
    ole2.ActiveCell.FormulaR1C1 = r записати формулу
    приклад
    FOR j = 1 to 5 стовпці
    FOR i = 1 TO 3 рядки
    Ole2.cells [i, j] .value = I * 10 + j
    ENDFOR
    WITH ole2.cells [4, j]
    .Select
    .FormulaR1C1 = "= SUM (R [-3] C: R [-1] C)"
    ENDWITH
    ENDFOR

Лінії на кордонах осередку або діапазону
* .linestyle
#DEFINE xlNone -4142 (HFFFFEFD2) без лінії
#DEFINE xlAutomatic -4105 (HFFFFEFF7).
#DEFINE xlDouble -4119 (HFFFFEFE9) подвійна
#DEFINE xlMedium -4138 середня
#DEFINE xlContinuous 1 нормальна

* .borders (i)
#DEFINE xlDiagonalDown 5 лінія нахилу вниз (з лівого верхнього)
#DEFINE xlDiagonalUp 6 лінія нахилу вгору (з лівого нижнього)
#DEFINE xlEdgeLeft 7 ліва сторона осередку
#DEFINE xlEdgeTop 8 верхня сторона осередку
#DEFINE xlEdgeBottom 9 нижня сторона осередку
#DEFINE xlEdgeRight 10 права сторона осередку
11 - всередині діапазону комірок вертикальні лінії
12 - всередині діапазону комірок горизонтальні лінії

* .Weight
#DEFINE xlThin 2 тонка лінія
#DEFINE xlThick 4 товста лінія

Процедура для полегшення роботи з лініями
PROCEDURE cellborders лінії осередку
PARAMETERS p1_cb, p2_cb, p3_cb, p4_cb
1 - i поч, 2 - i кін, 3 - style, 4 - weight
FOR i_cb = p1_cb TO p2_cb
WITH .Borders (i_cb)
.LineStyle = p3_cb
IF p3_cb <> xlNone
.Weight = p4_cb
.ColorIndex = xlAutomatic
ENDIF
ENDWITH
ENDFOR
Виклик процедури (приклад):
DO cellborders WITH 7,12, xlnone, xlthin

Замороження рядків і стовпців при скролінгу.
ole2.Cells (5,3) .Select
ole2.ActiveWindow.FreezePanes = .T.
Будуть заморожені 4 рядки зверху від виділеного вічка і 2 стобца зліва від виділеного вічка. Тобто виділена комірка - кутова, яка не входить в заморозку.

Печатка.
With ole2.ActiveSheet.PageSetup
.printGridLines = .F. не друкувати лінії гріда
.Orientation = 2 2 - альбом, 1 - портрет
.PaperSize = 9
.PrintTitleRows = "$ 1: $ 5" cквозние рядки (будь-які, але без розриву)
.PrintTitleColumns = "$ A: $ F" наскрізні шпальти (без розриву)
.RightHeader = "P" Номер аркуша друку в правому колонтитулі
* Стор. [Сторінка] +1 печатку із 2 листи (або з якого хочеш
* .RightHeader = "Стор P з N " Сторінка і всього сторінок
* .RightHeader = "P" + CHR (10) + "D" сторінка і рядком нижче дата
.TopMargin = 0.0 поле зверху 0.5
.BottomMargin = 0.0 поле знизу
.HeaderMargin = 0.0 колонтитул зверху
.FooterMargin = 0.0 колонтитул знизу
.RightMargin = 0.5 поле праворуч
.LeftMargin = 0.5 поле зліва
.Order = 2 порядок листів при дек. смугах: 1 - І, 2 - Z
* .CenterHorizontally = .T. центрування листа друку по горизонталі
* .CenterVertically = .T. центрування по вертикалі
* .FitToPagesWide = 1 стиснення звіт по ширині до 1 листа
* .FitToPagesTail = .F. Чи не стискайте звіт по числу сторінок
* .Zoom = .N. ця плюс дві Попер. рядки - для стиснення на 1 лист по ширині
EndWith ActiveSheet.HPageBreaks.Count Число сторінок друку