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

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

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

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

select GLAVNAYA
EXPORT TO MyFile TYPE XL5

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

Угооооо (O_O)

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

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

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

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

Если поставить в конце (после формирования книги), будет быстрее
...
Рейтинг: 0 / 0
экспорт grid to excel
    #38575256
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mx.displayalerts=.f.
можно добавить после создания экселя
а то юзер может офигеть от выпавшей "из ниоткуда" ошибки :)
перед показом экселя - снова включить
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
экспорт grid to excel
    #39122693
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!
Решил тоже сделать експорт таблицы 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
экспорт grid to excel
    #39122823
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
экспорт grid to excel
    #39123032
Fffffffffffffffffff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В решениях давно есть.
...
Рейтинг: 0 / 0
экспорт grid to excel
    #39123627
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir , спасибо код заработал, а в вашем варианте кода експорт будет не из grida?
а, то я сделал в форме с гридом кнопку с кодом hvh2014 . а в вашем варианте как?
...
Рейтинг: 0 / 0
экспорт grid to excel
    #39123881
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
190rа в вашем варианте кода експорт будет не из grida?Этот код берёт данные из курсора (там ведь даже написано "имя курсора ").190rа в вашем варианте как?Грид у вас данные из курсора же получает, наверное? В общем, замените "имякурсора" на grid.recordsource, вроде бы должно заработать.
...
Рейтинг: 0 / 0
экспорт grid to excel
    #39123915
190rекспорт будет не из grida?Уж сколько раз твердили миру, что в гриде нет данных и из него в принципе невозможно что-то экспортировать... Данные лежат в таблице/курсоре.
...
Рейтинг: 0 / 0
экспорт grid to excel
    #39124481
190r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir , что то не могу адаптировать ваш код, вместо 'имякурсора'
вставил 'pageframe1.page1.grid1.recordsource'(это в моем случае), код
вставил в кнопку Click, при сохранении пишет :
Method and events cannot contain nested procedures or class definitions

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


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