Advertisement
codkelden

Untitled

Jun 11th, 2015
514
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. * ------------------ Начало тестовых данных ------------------------
  2. * положить FILE.DBF в "c:\1\" или по вкусу
  3.  
  4. SET SAFETY OFF
  5. SET DATE GERMAN
  6.  
  7. d1=CTOT('31.12.14 00:00:01')
  8. d2=CTOT('31.01.14 23:59:59')
  9.  
  10.  
  11. USE "c:\1\FILE.DBF" IN 0 ALIAS xl_table
  12. * ------------------ Конец тестовых данных -------------------------
  13. * Предполагается, что вместо следующей команды
  14. * будет использоваться
  15. * SELECT cursor_zak
  16. SELECT xl_table
  17. COUNT TO row_count
  18. COPY TO "c:\1\"+ALIAS() xl5
  19. USE
  20.  
  21. *-- Вызов функции
  22. =CreateXLSReport("c:\1\xl_table.xls", row_count, d1, d2)
  23.  
  24. PROCEDURE CreateXLSReport(cFilename as String, nRowCount as Integer, dDate1, dDate2)
  25.     *! Процедура обрабатывает файл MS Excel, который получаем из
  26.     *! курсора путем экспорта в XL5. Поскольку процедура экспорта в файл
  27.     *! из курсора будет выполнена в любом случае, проверка на то, существет
  28.     *! ли файл, не производится.
  29.     *! Процедура получает 4 параметра:
  30.     *!
  31.     *! cFilename - имя файла XLS, который будет обработан
  32.     *! nRowCount - количество записей в курсоре
  33.     *! dDate1, dDate2 - начальная и конечная даты диапазона
  34.  
  35.     loXL = CREATEOBJECT("Excel.Application")
  36.     loBook=m.loXL.WorkBooks.Open(cFilename)
  37.     loSheet=m.loBook.Sheets(1)
  38.    
  39.     *-- Параметры страницы
  40.     With loSheet.PageSetup
  41.         .Orientation =2
  42.         .LeftMargin = 28
  43.         .RightMargin = 28
  44.         .TopMargin = 42
  45.         .BottomMargin = 42
  46.     ENDWITH
  47.  
  48.     *-- удаляем первую строку с именами
  49.     loSheet.Rows("1:1").Delete(-4162)
  50.  
  51.     *-- Заголовок таблицы  
  52.     loSheet.Rows("1:3").Insert(-4121)
  53.     tzag='Отчёт по заказам за период с ' + ttoc(dDate1) + ' по ' + ttoc(dDate1)
  54.     loSheet.Cells(1,1).Value=tzag
  55.     loSheet.Cells(1,1).Font.Bold=.t.
  56.     loSheet.Cells(1,1).Font.Name="Times New Roman"     
  57.     loSheet.Cells(1,1).Font.Size=14
  58.     *-- Объединяем ячейки для заголовка
  59.     With loSheet.Range("A1:H1")
  60.         .HorizontalAlignment = 3
  61.         .VerticalAlignment = 2
  62.         .WrapText = .T.
  63.         .Orientation = 0
  64.         .AddIndent = .F.
  65.         .IndentLevel = 0
  66.         .ShrinkToFit = .F.
  67.         .MergeCells = .T.
  68.     ENDWITH
  69.    
  70.     loSheet.Rows("1:1").RowHeight = 55
  71.     loSheet.Rows("3:3").RowHeight = 35
  72.  
  73.     loSheet.Range("A3").Value='Номер заказа'
  74.     loSheet.Range("B3").Value='Номер договора'
  75.     loSheet.Range("C3").Value='Дата'       
  76.     loSheet.Range("D3").Value='Что-то там'         
  77.     loSheet.Range("E3").Value='Состав заказа'          
  78.     loSheet.Range("F3").Value='Сумма'         
  79.     loSheet.Range("G3").Value='ФИО заказчика'          
  80.     loSheet.Range("H3").Value='ФИО оператора'
  81.    
  82.     WITH loSheet.Range("A3:H3")
  83.         .HorizontalAlignment = -4108
  84.         .VerticalAlignment = -4108
  85.         .WrapText = .T.
  86.         .AddIndent = .F.
  87.         .ShrinkToFit = .F.
  88.         .MergeCells = .F.
  89.         FOR b = 1 TO 4
  90.             WITH .Borders(b)
  91.                 .LineStyle = 1
  92.                 .Weight = -4138
  93.             ENDWITH
  94.         ENDFOR
  95.         WITH .font
  96.             .size=14
  97.             .Name = "Times New Roman"
  98.         ENDWITH
  99.     ENDWITH
  100.    
  101.     *-- область таблицы с данными
  102.     * не забываем, что строки нумеруются с 1, поэтому
  103.     * 4 - количество строк до области, и потом -1
  104.     lorow='A4:H'+ALLTRIM(STR(4+nRowCount-1))
  105.  
  106.     WITH loSheet.Range(lorow)
  107.         .WrapText = .T.        
  108.         .Borders(1).LineStyle= 1
  109.         .Borders(2).LineStyle= 1
  110.         .Borders(3).LineStyle= 1
  111.         .Borders(4).LineStyle= 1
  112.         WITH .font
  113.             .size=14
  114.             .Name = "Times New Roman"
  115.         ENDWITH
  116.     ENDWITH
  117.     loSheet.Columns("G:G").EntireColumn.AutoFit
  118.     loSheet.Columns("H:H").EntireColumn.AutoFit
  119.     loSheet.Range("F4:F"+ALLTRIM(STR(4+nRowCount-1))).NumberFormat = "0.00"
  120.  
  121.     * Подбиваем итоги
  122.     total_row_num = 4+nRowCount
  123.     total_label_range = ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('E'+ALLTRIM(STR(total_row_num)))
  124.     formula = '=SUM(R[-12]C:R[-1]C)'
  125.    
  126.     *! Вообще здесь можно с формулой не заморачиваться, а просто ввести
  127.     *! в функцию ещё один параметр, куда передавать результат выполнения
  128.     *!     SUM price_column TO var_name
  129.     *! однако мало ли какие дубы будут пользоваться экселевским файлом.
  130.    
  131.     loSheet.Range("F"+ALLTRIM(STR(total_row_num))).Value=formula
  132.     WITH loSheet.Range(ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('F'+ALLTRIM(STR(total_row_num))))
  133.         WITH .font
  134.             .size=14
  135.             .Name = "Times New Roman"
  136.             .Bold = .T.
  137.         ENDWITH
  138.     ENDWITH
  139.     WITH loSheet.Range(total_label_range)
  140.         .MergeCells = .T.
  141.         .Value='Итого: ' + ALLTRIM(STR(nRowCount)) + ' заказов, общей стоимостью '
  142.     ENDWITH
  143.    
  144.     loXL.Visible=.T.
  145.     loShell=CreateObject("WScript.Shell")
  146.     loShell.AppActivate(loXL.Caption)
  147.     loShell.SendKeys("% ~")
  148. ENDPR
  149. * положить FILE.DBF в "c:\1\" или по вкусу
  150.  
  151. SET SAFETY OFF
  152. SET DATE GERMAN
  153.  
  154. d1=CTOT('31.12.14 00:00:01')
  155. d2=CTOT('31.01.14 23:59:59')
  156.  
  157.  
  158. USE "c:\1\FILE.DBF" IN 0 ALIAS xl_table
  159. * ------------------ Конец тестовых данных -------------------------
  160. * Предполагается, что вместо следующей команды
  161. * будет использоваться
  162. * SELECT cursor_zak
  163. SELECT xl_table
  164. COUNT TO row_count
  165. COPY TO "c:\1\"+ALIAS() xl5
  166. USE
  167.  
  168. *-- Вызов функции
  169. =CreateXLSReport("c:\1\xl_table.xls", row_count, d1, d2)
  170.  
  171. PROCEDURE CreateXLSReport(cFilename as String, nRowCount as Integer, dDate1, dDate2)
  172.     *! Процедура обрабатывает файл MS Excel, который получаем из
  173.     *! курсора путем экспорта в XL5. Поскольку процедура экспорта в файл
  174.     *! из курсора будет выполнена в любом случае, проверка на то, существет
  175.     *! ли файл, не производится.
  176.     *! Процедура получает 4 параметра:
  177.     *!
  178.     *! cFilename - имя файла XLS, который будет обработан
  179.     *! nRowCount - количество записей в курсоре
  180.     *! dDate1, dDate2 - начальная и конечная даты диапазона
  181.  
  182.     loXL = CREATEOBJECT("Excel.Application")
  183.     loBook=m.loXL.WorkBooks.Open(cFilename)
  184.     loSheet=m.loBook.Sheets(1)
  185.    
  186.     *-- Параметры страницы
  187.     With loSheet.PageSetup
  188.         .Orientation =2
  189.         .LeftMargin = 28
  190.         .RightMargin = 28
  191.         .TopMargin = 42
  192.         .BottomMargin = 42
  193.     ENDWITH
  194.  
  195.     *-- удаляем первую строку с именами
  196.     loSheet.Rows("1:1").Delete(-4162)
  197.  
  198.     *-- Заголовок таблицы  
  199.     loSheet.Rows("1:3").Insert(-4121)
  200.     tzag='Отчёт по заказам за период с ' + ttoc(dDate1) + ' по ' + ttoc(dDate1)
  201.     loSheet.Cells(1,1).Value=tzag
  202.     loSheet.Cells(1,1).Font.Bold=.t.
  203.     loSheet.Cells(1,1).Font.Name="Times New Roman"     
  204.     loSheet.Cells(1,1).Font.Size=14
  205.     *-- Объединяем ячейки для заголовка
  206.     With loSheet.Range("A1:H1")
  207.         .HorizontalAlignment = 3
  208.         .VerticalAlignment = 2
  209.         .WrapText = .T.
  210.         .Orientation = 0
  211.         .AddIndent = .F.
  212.         .IndentLevel = 0
  213.         .ShrinkToFit = .F.
  214.         .MergeCells = .T.
  215.     ENDWITH
  216.    
  217.     loSheet.Rows("1:1").RowHeight = 55
  218.     loSheet.Rows("3:3").RowHeight = 35
  219.  
  220.     loSheet.Range("A3").Value='Номер заказа'
  221.     loSheet.Range("B3").Value='Номер договора'
  222.     loSheet.Range("C3").Value='Дата'       
  223.     loSheet.Range("D3").Value='Что-то там'         
  224.     loSheet.Range("E3").Value='Состав заказа'          
  225.     loSheet.Range("F3").Value='Сумма'         
  226.     loSheet.Range("G3").Value='ФИО заказчика'          
  227.     loSheet.Range("H3").Value='ФИО оператора'
  228.    
  229.    WITH loSheet.Range("A3:H3")
  230.        .HorizontalAlignment = -4108
  231.        .VerticalAlignment = -4108
  232.        .WrapText = .T.
  233.        .AddIndent = .F.
  234.        .ShrinkToFit = .F.
  235.        .MergeCells = .F.
  236.        FOR b = 1 TO 4
  237.             WITH .Borders(b)
  238.                 .LineStyle = 1
  239.                 .Weight = -4138
  240.             ENDWITH
  241.         ENDFOR
  242.         WITH .font
  243.             .size=14
  244.             .Name = "Times New Roman"
  245.         ENDWITH
  246.    ENDWITH
  247.    
  248.    *-- область таблицы с данными
  249.    * не забываем, что строки нумеруются с 1, поэтому
  250.    * 4 - количество строк до области, и потом -1
  251.     lorow='A4:H'+ALLTRIM(STR(4+nRowCount-1))
  252.  
  253.     WITH loSheet.Range(lorow)
  254.         .WrapText = .T.        
  255.         .Borders(1).LineStyle= 1
  256.         .Borders(2).LineStyle= 1
  257.         .Borders(3).LineStyle= 1
  258.         .Borders(4).LineStyle= 1
  259.         WITH .font
  260.             .size=14
  261.             .Name = "Times New Roman"
  262.         ENDWITH
  263.     ENDWITH
  264.    loSheet.Columns("G:G").EntireColumn.AutoFit
  265.     loSheet.Columns("H:H").EntireColumn.AutoFit
  266.     loSheet.Range("F4:F"+ALLTRIM(STR(4+nRowCount-1))).NumberFormat = "0.00"
  267.  
  268.     * Подбиваем итоги
  269.     total_row_num = 4+nRowCount
  270.     total_label_range = ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('E'+ALLTRIM(STR(total_row_num)))
  271.     formula = '=SUM(R[-12]C:R[-1]C)'
  272.    
  273.     *! Вообще здесь можно с формулой не заморачиваться, а просто ввести
  274.     *! в функцию ещё один параметр, куда передавать результат выполнения
  275.     *!     SUM price_column TO var_name
  276.     *! однако мало ли какие дубы будут пользоваться экселевским файлом.
  277.    
  278.     loSheet.Range("F"+ALLTRIM(STR(total_row_num))).Value=formula
  279.     WITH loSheet.Range(ALLTRIM('A'+ALLTRIM(STR(total_row_num)))+':'+ALLTRIM('F'+ALLTRIM(STR(total_row_num))))
  280.         WITH .font
  281.             .size=14
  282.             .Name = "Times New Roman"
  283.             .Bold = .T.
  284.         ENDWITH
  285.     ENDWITH
  286.     WITH loSheet.Range(total_label_range)
  287.         .MergeCells = .T.
  288.         .Value='Итого: ' + ALLTRIM(STR(nRowCount)) + ' заказов, общей стоимостью '
  289.     ENDWITH
  290.    
  291.     loXL.Visible=.T.
  292.     loShell=CreateObject("WScript.Shell")
  293.     loShell.AppActivate(loXL.Caption)
  294.     loShell.SendKeys("% ~")
  295. ENDPROC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement