Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- * ------------------ Начало тестовых данных ------------------------
- * положить FILE.DBF в "c:\1\" или по вкусу
- SET SAFETY OFF
- SET DATE GERMAN
- d1=CTOT('31.12.14 00:00:01')
- d2=CTOT('31.01.14 23:59:59')
- USE "c:\1\FILE.DBF" IN 0 ALIAS xl_table
- * ------------------ Конец тестовых данных -------------------------
- * Предполагается, что вместо следующей команды
- * будет использоваться
- * SELECT cursor_zak
- SELECT xl_table
- COUNT TO row_count
- COPY TO "c:\1\"+ALIAS() xl5
- USE
- *-- Вызов функции
- =CreateXLSReport("c:\1\xl_table.xls", row_count, d1, d2)
- PROCEDURE CreateXLSReport(cFilename as String, nRowCount as Integer, dDate1, dDate2)
- *! Процедура обрабатывает файл MS Excel, который получаем из
- *! курсора путем экспорта в XL5. Поскольку процедура экспорта в файл
- *! из курсора будет выполнена в любом случае, проверка на то, существет
- *! ли файл, не производится.
- *! Процедура получает 4 параметра:
- *!
- *! cFilename - имя файла XLS, который будет обработан
- *! nRowCount - количество записей в курсоре
- *! dDate1, dDate2 - начальная и конечная даты диапазона
- loXL = CREATEOBJECT("Excel.Application")
- loBook=m.loXL.WorkBooks.Open(cFilename)
- loSheet=m.loBook.Sheets(1)
- *-- Параметры страницы
- With loSheet.PageSetup
- .Orientation =2
- .LeftMargin = 28
- .RightMargin = 28
- .TopMargin = 42
- .BottomMargin = 42
- ENDWITH
- *-- удаляем первую строку с именами
- loSheet.Rows("1:1").Delete(-4162)
- *-- Заголовок таблицы
- loSheet.Rows("1:3").Insert(-4121)
- tzag='Отчёт по заказам за период с ' + ttoc(dDate1) + ' по ' + ttoc(dDate1)
- loSheet.Cells(1,1).Value=tzag
- loSheet.Cells(1,1).Font.Bold=.t.
- loSheet.Cells(1,1).Font.Name="Times New Roman"
- loSheet.Cells(1,1).Font.Size=14
- *-- Объединяем ячейки для заголовка
- With loSheet.Range("A1:H1")
- .HorizontalAlignment = 3
- .VerticalAlignment = 2
- .WrapText = .T.
- .Orientation = 0
- .AddIndent = .F.
- .IndentLevel = 0
- .ShrinkToFit = .F.
- .MergeCells = .T.
- ENDWITH
- loSheet.Rows("1:1").RowHeight = 55
- loSheet.Rows("3:3").RowHeight = 35
- loSheet.Range("A3").Value='Номер заказа'
- loSheet.Range("B3").Value='Номер договора'
- loSheet.Range("C3").Value='Дата'
- loSheet.Range("D3").Value='Что-то там'
- loSheet.Range("E3").Value='Состав заказа'
- loSheet.Range("F3").Value='Сумма'
- loSheet.Range("G3").Value='ФИО заказчика'
- loSheet.Range("H3").Value='ФИО оператора'
- WITH loSheet.Range("A3:H3")
- .HorizontalAlignment = -4108
- .VerticalAlignment = -4108
- .WrapText = .T.
- .AddIndent = .F.
- .ShrinkToFit = .F.
- .MergeCells = .F.
- FOR b = 1 TO 4
- WITH .Borders(b)
- .LineStyle = 1
- .Weight = -4138
- ENDWITH
- ENDFOR
- WITH .font
- .size=14
- .Name = "Times New Roman"
- ENDWITH
- ENDWITH
- *-- область таблицы с данными
- * не забываем, что строки нумеруются с 1, поэтому
- * 4 - количество строк до области, и потом -1
- lorow='A4:H'+ALLTRIM(STR(4+nRowCount-1))
- WITH loSheet.Range(lorow)
- .WrapText = .T.
- .Borders(1).LineStyle= 1
- .Borders(2).LineStyle= 1
- .Borders(3).LineStyle= 1
- .Borders(4).LineStyle= 1
- WITH .font
- .size=14
- .Name = "Times New Roman"
- ENDWITH
- ENDWITH
- loSheet.Columns("G:G").EntireColumn.AutoFit
- loSheet.Columns("H:H").EntireColumn.AutoFit
- loSheet.Range("F4:F"+ALLTRIM(STR(4+nRowCount-1))).NumberFormat = "0.00"
- * Подбиваем итоги
- total_row_num = 4+nRowCount
- total_label_range = ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('E'+ALLTRIM(STR(total_row_num)))
- formula = '=SUM(R[-12]C:R[-1]C)'
- *! Вообще здесь можно с формулой не заморачиваться, а просто ввести
- *! в функцию ещё один параметр, куда передавать результат выполнения
- *! SUM price_column TO var_name
- *! однако мало ли какие дубы будут пользоваться экселевским файлом.
- loSheet.Range("F"+ALLTRIM(STR(total_row_num))).Value=formula
- WITH loSheet.Range(ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('F'+ALLTRIM(STR(total_row_num))))
- WITH .font
- .size=14
- .Name = "Times New Roman"
- .Bold = .T.
- ENDWITH
- ENDWITH
- WITH loSheet.Range(total_label_range)
- .MergeCells = .T.
- .Value='Итого: ' + ALLTRIM(STR(nRowCount)) + ' заказов, общей стоимостью '
- ENDWITH
- loXL.Visible=.T.
- loShell=CreateObject("WScript.Shell")
- loShell.AppActivate(loXL.Caption)
- loShell.SendKeys("% ~")
- ENDPR
- * положить FILE.DBF в "c:\1\" или по вкусу
- SET SAFETY OFF
- SET DATE GERMAN
- d1=CTOT('31.12.14 00:00:01')
- d2=CTOT('31.01.14 23:59:59')
- USE "c:\1\FILE.DBF" IN 0 ALIAS xl_table
- * ------------------ Конец тестовых данных -------------------------
- * Предполагается, что вместо следующей команды
- * будет использоваться
- * SELECT cursor_zak
- SELECT xl_table
- COUNT TO row_count
- COPY TO "c:\1\"+ALIAS() xl5
- USE
- *-- Вызов функции
- =CreateXLSReport("c:\1\xl_table.xls", row_count, d1, d2)
- PROCEDURE CreateXLSReport(cFilename as String, nRowCount as Integer, dDate1, dDate2)
- *! Процедура обрабатывает файл MS Excel, который получаем из
- *! курсора путем экспорта в XL5. Поскольку процедура экспорта в файл
- *! из курсора будет выполнена в любом случае, проверка на то, существет
- *! ли файл, не производится.
- *! Процедура получает 4 параметра:
- *!
- *! cFilename - имя файла XLS, который будет обработан
- *! nRowCount - количество записей в курсоре
- *! dDate1, dDate2 - начальная и конечная даты диапазона
- loXL = CREATEOBJECT("Excel.Application")
- loBook=m.loXL.WorkBooks.Open(cFilename)
- loSheet=m.loBook.Sheets(1)
- *-- Параметры страницы
- With loSheet.PageSetup
- .Orientation =2
- .LeftMargin = 28
- .RightMargin = 28
- .TopMargin = 42
- .BottomMargin = 42
- ENDWITH
- *-- удаляем первую строку с именами
- loSheet.Rows("1:1").Delete(-4162)
- *-- Заголовок таблицы
- loSheet.Rows("1:3").Insert(-4121)
- tzag='Отчёт по заказам за период с ' + ttoc(dDate1) + ' по ' + ttoc(dDate1)
- loSheet.Cells(1,1).Value=tzag
- loSheet.Cells(1,1).Font.Bold=.t.
- loSheet.Cells(1,1).Font.Name="Times New Roman"
- loSheet.Cells(1,1).Font.Size=14
- *-- Объединяем ячейки для заголовка
- With loSheet.Range("A1:H1")
- .HorizontalAlignment = 3
- .VerticalAlignment = 2
- .WrapText = .T.
- .Orientation = 0
- .AddIndent = .F.
- .IndentLevel = 0
- .ShrinkToFit = .F.
- .MergeCells = .T.
- ENDWITH
- loSheet.Rows("1:1").RowHeight = 55
- loSheet.Rows("3:3").RowHeight = 35
- loSheet.Range("A3").Value='Номер заказа'
- loSheet.Range("B3").Value='Номер договора'
- loSheet.Range("C3").Value='Дата'
- loSheet.Range("D3").Value='Что-то там'
- loSheet.Range("E3").Value='Состав заказа'
- loSheet.Range("F3").Value='Сумма'
- loSheet.Range("G3").Value='ФИО заказчика'
- loSheet.Range("H3").Value='ФИО оператора'
- WITH loSheet.Range("A3:H3")
- .HorizontalAlignment = -4108
- .VerticalAlignment = -4108
- .WrapText = .T.
- .AddIndent = .F.
- .ShrinkToFit = .F.
- .MergeCells = .F.
- FOR b = 1 TO 4
- WITH .Borders(b)
- .LineStyle = 1
- .Weight = -4138
- ENDWITH
- ENDFOR
- WITH .font
- .size=14
- .Name = "Times New Roman"
- ENDWITH
- ENDWITH
- *-- область таблицы с данными
- * не забываем, что строки нумеруются с 1, поэтому
- * 4 - количество строк до области, и потом -1
- lorow='A4:H'+ALLTRIM(STR(4+nRowCount-1))
- WITH loSheet.Range(lorow)
- .WrapText = .T.
- .Borders(1).LineStyle= 1
- .Borders(2).LineStyle= 1
- .Borders(3).LineStyle= 1
- .Borders(4).LineStyle= 1
- WITH .font
- .size=14
- .Name = "Times New Roman"
- ENDWITH
- ENDWITH
- loSheet.Columns("G:G").EntireColumn.AutoFit
- loSheet.Columns("H:H").EntireColumn.AutoFit
- loSheet.Range("F4:F"+ALLTRIM(STR(4+nRowCount-1))).NumberFormat = "0.00"
- * Подбиваем итоги
- total_row_num = 4+nRowCount
- total_label_range = ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('E'+ALLTRIM(STR(total_row_num)))
- formula = '=SUM(R[-12]C:R[-1]C)'
- *! Вообще здесь можно с формулой не заморачиваться, а просто ввести
- *! в функцию ещё один параметр, куда передавать результат выполнения
- *! SUM price_column TO var_name
- *! однако мало ли какие дубы будут пользоваться экселевским файлом.
- loSheet.Range("F"+ALLTRIM(STR(total_row_num))).Value=formula
- WITH loSheet.Range(ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('F'+ALLTRIM(STR(total_row_num))))
- WITH .font
- .size=14
- .Name = "Times New Roman"
- .Bold = .T.
- ENDWITH
- ENDWITH
- WITH loSheet.Range(total_label_range)
- .MergeCells = .T.
- .Value='Итого: ' + ALLTRIM(STR(nRowCount)) + ' заказов, общей стоимостью '
- ENDWITH
- loXL.Visible=.T.
- loShell=CreateObject("WScript.Shell")
- loShell.AppActivate(loXL.Caption)
- loShell.SendKeys("% ~")
- ENDPROC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement