Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / экспорт grid to excel / 25 сообщений из 28, страница 1 из 2
28.02.2014, 09:45
    #38574958
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Дан grid1 нужно экспортировать её в excel, ранее находил код, но не пригодился, а тут попросили сделать экспорт, а код не нашел...
...
Рейтинг: 0 / 0
28.02.2014, 10:14
    #38574983
hvh2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
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.
...
Рейтинг: 0 / 0
28.02.2014, 10:16
    #38574987
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Claymore,

SELECT нужных данных из таблицы, потом EXPORT
...
Рейтинг: 0 / 0
28.02.2014, 10:17
    #38574989
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
hvh2014,

Угооооо (O_O)
...
Рейтинг: 0 / 0
28.02.2014, 10:19
    #38574991
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
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"
...
Рейтинг: 0 / 0
28.02.2014, 10:20
    #38574992
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
IgorNG,

Выходит правильнее код будет:
select * from tmp1 export *.xls xl5
???
...
Рейтинг: 0 / 0
28.02.2014, 10:29
    #38575000
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Claymore,

select GLAVNAYA
EXPORT TO MyFile TYPE XL5

Ну, а дальше можно и красивости типа шапки, форматирования и т.п.
...
Рейтинг: 0 / 0
28.02.2014, 10:37
    #38575010
hvh2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Claymorehvh2014,

Угооооо (O_O)

Каков вопрос, таков ответ :)
копируем код в кнопку, вместо "thisform.grid1" пишем имя объекта из которого надо взять
оно само все сделает
плюсы не надо думать, форматирование тоже самое будет что и в гриде
минусы долго выгружает если таблица большая
...
Рейтинг: 0 / 0
28.02.2014, 10:41
    #38575015
VictorSK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
...
Рейтинг: 0 / 0
28.02.2014, 10:44
    #38575016
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
IgorNG,

Спасибо спасибо Игорь!!!(^_^)
...
Рейтинг: 0 / 0
28.02.2014, 10:49
    #38575018
Claymore
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
hvh2014

Реально спасибо!!!))))
...
Рейтинг: 0 / 0
28.02.2014, 10:53
    #38575024
hvh2014
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Пожалуйста
честно говоря, я уже и не помню, сам писал или позаимствовал где-то..
лет 10 пользую, где нет больших таблиц
...
Рейтинг: 0 / 0
28.02.2014, 11:07
    #38575037
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
hvh2014,

mx.visible=.t. && excel стал видимым

Если поставить в конце (после формирования книги), будет быстрее
...
Рейтинг: 0 / 0
28.02.2014, 13:48
    #38575256
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
mx.displayalerts=.f.
можно добавить после создания экселя
а то юзер может офигеть от выпавшей "из ниоткуда" ошибки :)
перед показом экселя - снова включить
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.12.2015, 20:04
    #39122693
190r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
Приветствую!
Решил тоже сделать експорт таблицы 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 я не программист.
...
Рейтинг: 0 / 0
08.12.2015, 08:13
    #39122823
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
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.
/**/
/*выдрано из откуда-то*/
/**/
lOxl=Createobject("Excel.Application")
lOxl.workbooks.Add
lOxl.displayalerts=.F.
lnfcnt=Afields(arr_fld,'ИМЯКУРСОРА')
lnrowcnt=Reccount('ИМЯКУРСОРА')
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 ('ИМЯКУРСОРА')
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('ИМЯФАЙЛА.xls')


/*та самая функция*/
function arraypasser
Lparameters lcName as String
Return @&lcName.


...
Рейтинг: 0 / 0
08.12.2015, 11:50
    #39123032
Fffffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
В решениях давно есть.
...
Рейтинг: 0 / 0
08.12.2015, 20:08
    #39123627
190r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
tanglir , спасибо код заработал, а в вашем варианте кода експорт будет не из grida?
а, то я сделал в форме с гридом кнопку с кодом hvh2014 . а в вашем варианте как?
...
Рейтинг: 0 / 0
09.12.2015, 10:45
    #39123881
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
190rа в вашем варианте кода експорт будет не из grida?Этот код берёт данные из курсора (там ведь даже написано "имя курсора ").190rа в вашем варианте как?Грид у вас данные из курсора же получает, наверное? В общем, замените "имякурсора" на grid.recordsource, вроде бы должно заработать.
...
Рейтинг: 0 / 0
09.12.2015, 11:19
    #39123915
экспорт grid to excel
190rекспорт будет не из grida?Уж сколько раз твердили миру, что в гриде нет данных и из него в принципе невозможно что-то экспортировать... Данные лежат в таблице/курсоре.
...
Рейтинг: 0 / 0
09.12.2015, 22:23
    #39124481
190r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
tanglir , что то не могу адаптировать ваш код, вместо 'имякурсора'
вставил 'pageframe1.page1.grid1.recordsource'(это в моем случае), код
вставил в кнопку Click, при сохранении пишет :
Method and events cannot contain nested procedures or class definitions

P.S. grid у меня получает данные из таблицы указанной в grid1.recordsource
...
Рейтинг: 0 / 0
10.12.2015, 00:04
    #39124528
экспорт grid to excel
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.
(pageframe1.page1.grid1.recordsource)

и будет (может быть, если еще где не накосячили) вам счастье.
...
Рейтинг: 0 / 0
10.12.2015, 19:56
    #39125309
190r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
вставил вместо 'именикурсора' (pageframe1.page1.grid1.recordsource)
и счастье не состоялось , и в скобках и без скобок.
а , код hvh2014 работает, а код tanglir пока нет, пишет
Method and events cannot contain nested procedures or class definitions
...
Рейтинг: 0 / 0
10.12.2015, 20:06
    #39125317
экспорт grid to excel
190rвставил вместо 'именикурсора' (pageframe1.page1.grid1.recordsource)
и счастье не состоялось , и в скобках и без скобок.И я даже почему-то не удивлен...а , код hvh2014 работает, а код tanglir пока нет, пишет
Method and events cannot contain nested procedures or class definitionsМожет таки начнем показывать сам код, а не его описание?
...
Рейтинг: 0 / 0
10.12.2015, 20:34
    #39125348
190r
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
экспорт grid to excel
код 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.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / экспорт grid to excel / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]