|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Дан grid1 нужно экспортировать её в excel, ранее находил код, но не пригодился, а тут попросили сделать экспорт, а код не нашел... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 09:45 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
on error mx=createobject([Excel.application]) && в случае, если эксель не открыт, открыть mx=getobject(,[Excel.application]) ********** on error set hour to 24 set date to german set cent on ******Таблица создана mx.visible=.t. && excel стал видимым mx.workbooks.add && Добавить рабочую книгу mx.worksheets(1).select && Выбрать 1-й лист mx.activeworkbook.sheets(1).name=[трам-па-пам] && Подставить вместо лист №1 XLSheet = mx.ActiveSheet ********************************* ********************************* WITH mx.activeworkbook.sheets(1).PageSetup && установка параметров страницы * * .PrintTitleRows = "$3:$5" && эти строки печатать на каждой странице * .Orientation = 1 && ориентация листа (книжный/альбомный) .LeftMargin = mx.CentimetersToPoints(1) && границы в сантиметрах .RightMargin = mx.CentimetersToPoints(0.5) .TopMargin = mx.CentimetersToPoints(1) .BottomMargin = mx.CentimetersToPoints(0.5) .FitToPagesWide = 1 && уместить отчет на 1 страницу по ширине .FitToPagesTall = .f. .Zoom=.f. * * .RightHeader = "&X&IСтраница &P" &&Печатать № страницы справа вверху * .LeftHeader = "&X&IСтраница &P" &&Печатать № страницы слева вверху * .CenterHeader = "&X&IСтраница &P" &&Печатать № страницы по центру вверху * .RightFooter = "&X&IСтраница &P из &N" &&Печатать № страницы справа внизу * .LeftFooter = "&X&IСтраница &P" &&Печатать № страницы слева внизу * .CenterFooter = "&X&IСтраница &P" &&Печатать № страницы по центру внизу * ENDWITH ********************************* ********************************* ************ ********* FNT=THISFORM.GRID1.FONTNAME istr=6 WITH XLSheet.Cells(1,1) .value="Шапка строка 1" .Font.Bold = "True" .Font.Size=14 ENDWITH WITH XLSheet.Cells(2,1) .value="Шапка строка 2" .Font.Bold = "True" .Font.Size=14 ENDWITH WITH XLSheet.Cells(3,1) .value="Шапка строка 3" .Font.Bold = "True" .Font.Size=14 ENDWITH set date long WITH XLSheet.Cells(4,1) .value=[Дата составления: ]+dtoc(DATE()) .Font.Bold = "True" ENDWITH set date short WITH XLSheet.Cells(4,1) .value=[Ответственный: ] .Font.Bold = "True" ENDWITH ********* istr=8 for x=1 to thisform.grid1.ColumnCount step 1 for xx=1 to thisform.grid1.ColumnCount step 1 if this.parent.grid1.columns(xx).columnorder=x exit endi endfor WITH XLSheet.cells(istr,x) .value=thisform.grid1.columns(xx).header1.CAPTION .FONT.NAME=M.FNT .FONT.SIZE=thisform.grid1.FONTSIZE .Borders(7).LineStyle=1 * .Borders(7).Weight=2 .Borders(8).LineStyle=1 * .Borders(8).Weight=2 .Borders(9).LineStyle=1 * .Borders(9).Weight=2 .Borders(10).LineStyle=1 * .Borders(10).Weight=2 * .Borders(11).Weight=2 * .Borders(12).Weight=2 * .Interior.Pattern = 3 ENDWITH XLSheet.Columns(X).ColumnWidth = this.parent.grid1.columns(xx).WIDTH/7 endfor sele (thisform.grid1.recordsource) go top do whil not eof() istr=istr+1 for x=1 to thisform.grid1.ColumnCount step 1 for xx=1 to thisform.grid1.ColumnCount step 1 if this.parent.grid1.columns(xx).columnorder=x exit endi endfor if type([ eval(thisform.grid1.columns(xx).controlsource)])#[D] WITH XLSheet.cells(istr,x) .value=eval(thisform.grid1.columns(xx).controlsource) .font.bold=iif(len(alltrim(thisform.grid1.columns(xx).dynamicfontbold))#0,eval(thisform.grid1.columns(xx).dynamicfontbold),.f.) .FONT.SIZE=iif(len(alltrim(thisform.grid1.columns(xx).dynamicfontsize))#0,eval(thisform.grid1.columns(xx).dynamicfontsize),; thisform.grid1.fontsize) .Interior.Pattern = 2 .Interior.PatternColor =iif(type([eval(thisform.grid1.columns(xx).dynamicbackcolor)])=[N],; eval(thisform.grid1.columns(xx).dynamicbackcolor),thisform.grid1.columns(xx).backcolor) ENDWITH if type([ eval(thisform.grid1.columns(xx).controlsource)])=[C] WITH XLSheet.cells(istr,x) .NumberFormat = "@" ENDWITH endi else if eval(thisform.grid1.columns(xx).controlsource)#ctod([ / / ]) WITH XLSheet.cells(istr,x) .value=eval(thisform.grid1.columns(xx).controlsource) .font.bold=iif(len(alltrim(thisform.grid1.columns(xx).dynamicfontbold))#0,eval(thisform.grid1.columns(xx).dynamicfontbold),.f.) .FONT.SIZE=iif(len(alltrim(thisform.grid1.columns(xx).dynamicfontsize))#0,eval(thisform.grid1.columns(xx).dynamicfontsize),; thisform.grid1.fontsize) .Interior.Pattern = 2 .Interior.PatternColor =iif(type([eval(thisform.grid1.columns(xx).dynamicbackcolor)])=[N],; eval(thisform.grid1.columns(xx).dynamicbackcolor),thisform.grid1.columns(xx).backcolor) ENDWITH endi ENDIF WITH XLSheet.cells(istr,x) .Borders(7).LineStyle=1 * .Borders(7).Weight=2 .Borders(8).LineStyle=1 * .Borders(8).Weight=2 .Borders(9).LineStyle=1 * .Borders(9).Weight=2 .Borders(10).LineStyle=1 * .Borders(10).Weight=2 * .Borders(11).Weight=2 * .Borders(12).Weight=2 * .Interior.Pattern = 3 ENDWITH endfor skip enddo * доп оформление *!* XLSheet.Columns("F:F").Select *!* XLSheet.Columns("F:F").EntireColumn.AutoFit *!* XLSheet.Columns("H:H").Select *!* XLSheet.Columns("H:H").EntireColumn.AutoFit *!* XLSheet.Columns("C:C").HorizontalAlignment = 1 *!* XLSheet.Columns("C:C").VerticalAlignment = -4160 *!* XLSheet.Columns("C:C").WrapText = .t. *!* XLSheet.Columns("C:C").Orientation = 0 *!* XLSheet.Columns("C:C").ShrinkToFit = .f. *!* XLSheet.Columns("C:C").MergeCells = .f. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:14 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Claymore, SELECT нужных данных из таблицы, потом EXPORT ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:16 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
hvh2014, Угооооо (O_O) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:17 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
IgorNG, У меня сейчас данные находятся здесь: select * from GLAVNAYA into cursor tmp1 select iif(isnull(name_year1),'',alltrim(name_year1)) as name_year1, iif(isnull(mac1.mac_address),'',alltrim(mac1.mac_address)) as mac_address, alltrim(ip_address) as ip_address, alltrim(in_sistemnik) as in_sistemnik, alltrim(in_monitor) as in_monitor,; alltrim(name_comp) as name_comp, alltrim(name_monitor) as name_monitor, alltrim(cab) as cab, alltrim(ram) as ram, alltrim(processor) as processor, id as id; from glavnaya left outer join years on glavnaya.id_year1 = years.id_year1 left outer join mac1 on glavnaya.id_mac_ad = mac1.id_mac_ad order by 2 into cursor tmp1 Thisform.grid1.recordSource="tmp1" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:19 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
IgorNG, Выходит правильнее код будет: select * from tmp1 export *.xls xl5 ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:20 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Claymore, select GLAVNAYA EXPORT TO MyFile TYPE XL5 Ну, а дальше можно и красивости типа шапки, форматирования и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:29 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Claymorehvh2014, Угооооо (O_O) Каков вопрос, таков ответ :) копируем код в кнопку, вместо "thisform.grid1" пишем имя объекта из которого надо взять оно само все сделает плюсы не надо думать, форматирование тоже самое будет что и в гриде минусы долго выгружает если таблица большая ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:37 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Claymore, Посмотрите ссылку http://vfpx.codeplex.com/wikipage?title=ExcelXML&referringTitle=Home ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:41 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
IgorNG, Спасибо спасибо Игорь!!!(^_^) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:44 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
hvh2014 Реально спасибо!!!)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:49 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Пожалуйста честно говоря, я уже и не помню, сам писал или позаимствовал где-то.. лет 10 пользую, где нет больших таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 10:53 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
hvh2014, mx.visible=.t. && excel стал видимым Если поставить в конце (после формирования книги), будет быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 11:07 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
mx.displayalerts=.f. можно добавить после создания экселя а то юзер может офигеть от выпавшей "из ниоткуда" ошибки :) перед показом экселя - снова включить ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2014, 13:48 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
Приветствую! Решил тоже сделать експорт таблицы grid в exel,(использую код hvh2014 ) но застрял на строках где используется запятая с двоеточием, или точка с довоеточием, никак не разберу что это за знак, например в этой строчке: .FONT.SIZE=iif(len(alltrim(thisform.grid1.columns(xx).dynamicfontsize))#0,eval(thisform.grid1.columns(xx).dynamicfontsize),; thisform.grid1.fontsize) выдает ошибку: Missing exspression, а в екселе создается только шапка таблицы grid P.S. sorry я не программист. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2015, 20:04 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
190rгде используется запятая с двоеточием, или точка с довоеточием, никак не разберу что это за знак, например в этой строчке:Точка с запятой в фоксе означает, что выражение продолжается на следующей строке. А вам вообще нужно всё это раскрашивание? К тому же код действительно будет очень медленным на больших объёмах, т.к. каждая ячейка в нём обрабатывается отдельно. Есть другой вариант, с передачей экселю данных одним массивом. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2015, 08:13 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
В решениях давно есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2015, 11:50 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
tanglir , спасибо код заработал, а в вашем варианте кода експорт будет не из grida? а, то я сделал в форме с гридом кнопку с кодом hvh2014 . а в вашем варианте как? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2015, 20:08 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
190rа в вашем варианте кода експорт будет не из grida?Этот код берёт данные из курсора (там ведь даже написано "имя курсора ").190rа в вашем варианте как?Грид у вас данные из курсора же получает, наверное? В общем, замените "имякурсора" на grid.recordsource, вроде бы должно заработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2015, 10:45 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
190rекспорт будет не из grida?Уж сколько раз твердили миру, что в гриде нет данных и из него в принципе невозможно что-то экспортировать... Данные лежат в таблице/курсоре. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2015, 11:19 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
tanglir , что то не могу адаптировать ваш код, вместо 'имякурсора' вставил 'pageframe1.page1.grid1.recordsource'(это в моем случае), код вставил в кнопку Click, при сохранении пишет : Method and events cannot contain nested procedures or class definitions P.S. grid у меня получает данные из таблицы указанной в grid1.recordsource ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2015, 22:23 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
190r tanglir , что то не могу адаптировать ваш код, вместо 'имякурсора' вставил 'pageframe1.page1.grid1.recordsource'(это в моем случае), И какой логикой вы руководствовались при этом? Или вы не отличаете значение от имени места, в котором оно хранится? код вставил в кнопку Click, при сохранении пишет : Method and events cannot contain nested procedures or class definitionsРазумеется. Ему же вместо имени таблицы подсунули нечто, что на имя ну никак не тянет. У вас есть хоть одна таблица хотя бы с одной точкой в имени? P.S. grid у меня получает данные из таблицы указанной в grid1.recordsource1. Грид ничего не получает. Ибо некуда помещать полученное. 2. Грид ВСЕГДА показывает то, что указано в этом свойстве. Это свойство и предназначено для указания таблицы, из которой показывать данные. Короче, вместо имени курсора вставьте Код: sql 1.
и будет (может быть, если еще где не накосячили) вам счастье. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 00:04 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
вставил вместо 'именикурсора' (pageframe1.page1.grid1.recordsource) и счастье не состоялось , и в скобках и без скобок. а , код hvh2014 работает, а код tanglir пока нет, пишет Method and events cannot contain nested procedures or class definitions ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 19:56 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
190rвставил вместо 'именикурсора' (pageframe1.page1.grid1.recordsource) и счастье не состоялось , и в скобках и без скобок.И я даже почему-то не удивлен...а , код hvh2014 работает, а код tanglir пока нет, пишет Method and events cannot contain nested procedures or class definitionsМожет таки начнем показывать сам код, а не его описание? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 20:06 |
|
экспорт grid to excel
|
|||
---|---|---|---|
#18+
код tanglir : *выдрано из откуда-то ** lOxl=Createobject("Excel.Application") lOxl.workbooks.Add lOxl.displayalerts=.F. lnfcnt=Afields(arr_fld,pageframe1.page1.grid1.recordsource) lnrowcnt=RECCOUNT(pageframe1.page1.grid1.recordsource) start_s=1 *типы данных в столбцах For ii=1 To lnfcnt lOxl.Range(lOxl.cells(start_s+1,ii),lOxl.cells(start_s+lnrowcnt,ii)).Select Do Case Case Inlist(arr_fld(ii,2),'C','V') lOxl.Selection.numberformat='@' Case Inlist(arr_fld(ii,2),'D') lOxl.Selection.numberformat='dd/mm/yyyy' Case Inlist(arr_fld(ii,2),'T') lOxl.Selection.numberformat='dd/mm/yyyy hh:mm:ss;@' Case Inlist(arr_fld(ii,2),'B','F') lOxl.Selection.numberformat='0.00' Case Inlist(arr_fld(ii,2),'N') If arr_fld(ii,4)=0 lOxl.Selection.numberformat='0' Else lOxl.Selection.numberformat='0.'+Replicate('0',arr_fld(ii,4)) Endif Case Inlist(arr_fld(ii,2),'I') lOxl.Selection.numberformat='0' Otherwise lOxl.Selection.numberformat='@' Endcase lOxl.Selection.BorderS.weight=2 Endfor *готовим данные Private paData[1] Dimension paData[lnrowcnt,lnfcnt] SELECT pageframe1.page1.grid1.recordsource Go Top For ii=1 To lnrowcnt For jj=1 To lnfcnt fval=&arr_fld(jj,1) If arr_fld(jj,2)=='C' paData[ii,jj]=Rtrim(fval) Else paData[ii,jj]=fval Endif Endfor Skip Endfor *сбрасываем в эксель сразу весь массив с помощью хитрой функции *работает на порядки быстрее, чем запись отдельных ячеек lOxl.Range(lOxl.cells(start_s+1,1),lOxl.cells(start_s+lnrowcnt,lnfcnt)).Value=arraypasser('paData') *тут можно всякие красивости дорисовать - рамки, цвет... *сохранение*/ lOxl.cells(1,1).Select lOxl.activeworkbook.SaveAs(gorod56.xls) *та самая функция function arraypasser Lparameters lcName as String Return @&lcName. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2015, 20:34 |
|
|
start [/forum/topic.php?fid=41&fpage=21&tid=1582202]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
138ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 295ms |
total: | 542ms |
0 / 0 |