powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт Datawindow в Excel
25 сообщений из 79, страница 1 из 4
Экспорт Datawindow в Excel
    #32354477
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам занимался подобной задачей при экспорте отчетов, а сегодня наткнулся на изящное решение:

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Converting DataWindow to Excel file
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Export DataWindow to Excel including computed-columns, headers, footers, groups, text labels, etc...
///////////////////////////////////////////////////////////////////////////////////////////////////////
// ... Init docname
// ... GetFileOpenName or any other method
//
IF dw.SaveAs( docname, HTMLTable!, TRUE ) = -1 THEN
MessageBox("Warning", "Unable to export data. Error writing to file!", Exclamation!)
RETURN ;
END IF ;
//
// Convert HTML file to Excel native format
OLEObject Excel ;
//
Excel = CREATE OLEObject ;
//
IF Excel.ConnectToObject( docname ) = 0 THEN
Excel.Application.DisplayAlerts = FALSE ;
Excel.Application.Workbooks( 1 ).Parent.Windows( excel.Application.workbooks( 1 ).Name ).Visible = TRUE ;
Excel.Application.Workbooks( 1 ).SaveAs(docname, 39 ) ;
Excel.Application.Workbooks( 1 ).Close() ;
END IF ;
//
DESTROY excel
//
// ...Done

Еще много интересного можно взять http://groups.yahoo.com/group/PowerObject/
Только там нужно зарегестрироваться
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354505
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так оно получше будет:

Код: plaintext
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.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
$PBExportHeader$gf_save_dw_as_excel.srf
$PBExportComments$savedwtoexcel
global type gf_save_dw_as_excel from function_object
end type

forward prototypes
global function integer gf_save_dw_as_excel (datawindow p_dw)
end prototypes

global function integer gf_save_dw_as_excel (datawindow p_dw); /*------------------------------------------------------------------------------

 Function:			gf_Save_dw_as_excel

 Returns:         Integer

 Parameters:      DataWindow p_dw to be save as Excel via HTML

 Copyright © 1998-2001 DTI - Michael Nadar 

 Date Created: December 1, 1998 

 Description:	PB default save as excel sheet only saves the column list. This  
					  method of saving to excel involves saving the dw as a html and then
					  saving as excel via ole. This preserves the formatting and also 
					  saves the dw computed columns to the spreadsheet. PB's save as excel
					  does not save computed columns. 
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
 02/23/1999		MXN		1) Move creation of ole below the saving of htm string to a 
								   file code, since this has some RETURN - 1's
									2) Window Appears to be frozen while excel is loading the 
									the .htm file. So put an hourglass around this.
 11/14/2001		P. Salgannik
 
 10/23/2002		P. Salgannik	DO NOT use this function from response windows!!!!
 									(unless it's being called from closing of the response window)
------------------------------------------------------------------------------*/ 


string 	ls_type, ls_name, ls_html_name, ls_html, ls_html_parse
string 	ls_excel_report_name, ls_secured_directory_check, ls_print_ind
integer 	li_filenumber, li_bytes, li_loop, li
integer 	li_rc
long 		ll_stringlen, ll_start, LL_EXCEL_STANDARD_FILE_TYPE
ulong ll_handle, ll_rc 
string 		ls_rc
boolean lb_exists
oleobject 	lole_excel, lole_workbook
//Pointer 		OldPointer
LL_EXCEL_STANDARD_FILE_TYPE = - 4143 		
		
		
// Get The directory in which to save the report
string   ls_dir, ls_file
li_rc = GetFileSaveName('Save As Excel', ls_dir,ls_file, 'XLS','Excel,*.xls')
IF li_rc =  0  THEN RETURN - 1 

IF FileExists(ls_dir) THEN 
	lb_exists = TRUE
	IF f_message_box( "Save As" , ls_dir +  " already exists.~r~nDo you want to replace it?" , &
							Exclamation!, YesNo!,  2 ) =  2  THEN
		RETURN - 1  
	END IF
	
END IF


// Next Two Modifys are not supported in PB  5 . 0  , so comment them
// 11 / 14 / 2001 		P. Salgannik Uncommented - works fine, generates borders
// 06 / 21 / 2002 		P. Salgannik commented again - HTML generation in PB8 is way up higher then
//Excel  97 's support for HTML, works fine in Excel 2000
//ls_rc = p_dw.Modify("datawindow.htmlTable.generateCSS = 'yes'") 
//ls_rc = p_dw.Modify("datawindow.htmlTable.nowrap = 'no'") 
//
ls_html = trim(p_dw.object.datawindow.data.htmltable)
If IsNull(ls_html) THEN RETURN -1
IF Len(ls_html) < 1 THEN RETURN -1


//ll_rc = gnv_app.inv_win32.of_SetCapture(handle(p_dw))
SetPointer(HourGlass!)

IF lb_exists THEN 
	FileDelete(ls_dir)
END IF

// the Saveas htmltable! only worked up until the html table reached 83K. After that
// different "stuff" appears in the stylesheet property.  By doing a filewrite this
// problem was elimanated.

li = Len(ls_dir)
ls_html_name 	= Mid(ls_dir, 1,li - 4) + ".htm"



ll_stringlen 	= len(ls_html) 


If ll_stringlen > 32765 Then
	If Mod(ll_stringlen, 32765) = 0 Then
		li_loop = ll_stringlen / 32765
	Else
		li_loop = (ll_stringlen / 32765) + 1
	End if
Else
	li_loop = 1
End if

li_fileNumber 	= FileOpen(ls_html_name, Streammode!, Write!, LockReadWrite!, Replace!)

IF li_fileNumber >= 0 THEN
	ll_start = 1
	FOR li = 1 to li_loop
	ls_html_parse = Mid(ls_html,ll_start,32765) 
	IF FileWrite(li_filenumber, ls_html_parse) = -1 THEN
		FileClose(li_filenumber)
		//gnv_app.inv_win32.of_ReleaseCapture()
		RETURN -1
	END IF
	ll_start += 32765
	NEXT
ELSE
	//gnv_app.inv_win32.of_ReleaseCapture()
	RETURN -1
END IF
FileClose(li_filenumber)


//save as excel
//for some reason doing a li_rc = lole_excel.application.workbooks.open(ls_html_name) would
//cause the application to hang.  This is true for any command used trying to perform an
//excel function.  (SaveAs, Open or Close)

//!!!! That's because all these methods return ole objects NOT error codes - P.Salgannik  11 / 14 / 2001 

//  lole_excel is a standard user object of type oleobject
lole_excel 	= create oleobject
// li_rc 	= lole_excel.ConnectToNewObject( "excel.application.8 ") SJZ removed . 8  to use current version of Excel
li_rc 	= lole_excel.ConnectToNewObject( "excel.application" )

IF li_rc <>  0  THEN
	destroy lole_excel
	//gnv_app.inv_win32.of_ReleaseCapture()
	RETURN - 1 
END IF

lole_workbook = lole_excel.application.workbooks.open(ls_html_name)
IF NOT ISValid(lole_workbook) THEN
	lole_excel.application.quit
	lole_excel.DisconnectObject()
	destroy lole_excel
	//gnv_app.inv_win32.of_ReleaseCapture()
	RETURN - 1 
END IF

lole_workbook.saveas(ls_dir,LL_EXCEL_STANDARD_FILE_TYPE)
//  6 / 20 / 02  P. Salgannik if you don't close(), the spreadsheet remains in read-only state,
// even after closing this application and excel
lole_workbook.close()

//delete html file !!!!!!!!!
IF fileexists(ls_html_name) THEN
	filedelete(ls_html_name)
END IF

lole_workbook.DisconnectObject()
lole_excel.application.quit
lole_excel.DisconnectObject()
DESTROY lole_workbook
destroy lole_excel		
//gnv_app.inv_win32.of_ReleaseCapture()

RETURN  1 
end function
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354508
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...ну и f_message_box на стандартный заменить...
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354769
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я просто сохраняю в HTML - можно открывать не только из Excel'я, но и из других приложений,кроме того не требуется установленный Excel на компьютере с нашим запущенным приложением. Так что я сохранение именно в Excel делал бы, как минимум, опциональным.
Да, и еще. При таком сохранении вид отчета 1 к одному передать очень часто не удается :(
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354900
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, точной передачи дизайна отчета так просто не получается.
Я для этого делал экспорт Tabular Datawindow (все отчеты у меня такие)
по одной ячейке, сам устанавливал бордеры, ширину, длину, вычитывал заголовки и т.д., на больших отчетах все жутко медленно происходит :( А есть вообще такая приблуда, что datawindow 1 к 1-му перегоняет в офисные приложения? (excel, word) Вот например ребята которые делают Preport для Delphi как-то по хитрому экспортят не используя OLE... Может кто-то занимался подобным?
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354938
Фотография ZiZu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот инфа с их сайта http://vtktools.ru/:
vtkExport - This library is intended for export into Excel & HTML formats. Generating of the XLS file runs without using DDE, OLE. That’s why a high speed of export is reached.

The export method is simple – you generate object TvteXLSWorkBook, which has properties & methods similar to properties & methods of OLE from Excel server, & call it’s method SaveAsXLS or SaveAsHTML. You can read about vtkExport possibilities more particularly here.

А как это они делают непойму...
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32354941
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже делал что-то типа такого, но перегонял в HTML и использовал шаблоны которые строил автоматически по заданному DW. Получается гораздо быстрее, чем для каждой ячейки expression'ы вычислять, и выглядит правдоподобно, правда expression'ы на x,y,height,width жизнь немного портят.

А экспорт 1 в 1 произвольного DataWindow, как я думаю, не получится, т.к. в DataWindow можно объекты один на другой накладывать, и я слабо представляю как тоже самое сделать, допустим, в Excel'е или HTML'е.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370262
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё можно форматирование ячеек и всё остальное через OLE, а данные через Clipboard передавать. Очень быстро.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370291
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ещё можно форматирование ячеек и всё остальное через OLE, а данные
>через Clipboard передавать. Очень быстро.
В этом способе есть один недостаток (может его можно как-то обойти, но я не знаю) - данные в Clipboard может испортить, к примеру, сам пользователь (если сам в процессе передачи данных что-то делает).
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370395
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через HTML или OLE не всегда возможно экспортировать - при больших объемах начинаются тормоза и глюки.

Здесь есть компоненты для PB, где этих проблем нет:
- PB2XLS - создание EXCEL файлов напрямую(без OLE, HTML и т.д.)
- DW2XLS - экспорт DW с использованием PB2XLS

платное
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370505
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Через HTML или OLE не всегда возможно экспортировать - при больших
>объемах начинаются тормоза и глюки.
Ну не знаю какие тормоза и глюки, но 35 страниц этот компонент выкинул в xls за 3m 10s, мой экспорт в html сработал за 4m 50s. После этого оба файла нормально открылись в Excel.
К тому же в некоторых отчетах он хуже внешний вид передает (к примеру - не учитывает expression'ы на начертание шрифта), высоту Detail Band'а и т. д. Правда на таком отчете мой экспорт работал раза в 4 дольше :)

Эх, знал бы я формат *.psr у меня бы экспорт просто летал.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркНу не знаю какие тормоза и глюки
При экспорте через OLE - Excel подвисал, приходилось перегужать комп.
При импорте больших HTML в Excel - большой расход памяти, свопинг.
Все это с Офис97, может в других версиях и не было такого.

Локшин МаркЭх, знал бы я формат *.psr у меня бы экспорт просто летал.
Хе-хе :))
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370660
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>При импорте больших HTML в Excel - большой расход памяти, свопинг.
>Все это с Офис97, может в других версиях и не было такого.
Есть такое дело, но зато IE влет открывает :)

> Локшин Марк
> Эх, знал бы я формат *.psr у меня бы экспорт просто летал.
>Хе-хе :))
Что означает ваше "хе-хе" ?
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32370675
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто означает ваше "хе-хе" ?
При наличии большого желания (или денег :)) можно получить эту информацию.

Например. Обращаешься в Sybase, говоришь, что ты ISV и для твоего приложения требуется такая-то информация, обязуешься не разглашать и т.д.

Есть и другие способы...
:)
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32380864
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
>Ещё можно форматирование ячеек и всё остальное через OLE, а данные
>через Clipboard передавать. Очень быстро.
В этом способе есть один недостаток (может его можно как-то обойти, но я не знаю) - данные в Clipboard может испортить, к примеру, сам пользователь (если сам в процессе передачи данных что-то делает).

А слабо на практике "испортить" данные в Клипборде?
Если в коде между двумя вызовами нет больше никаких операций.
Например:
Код: plaintext
1.
2.
dw.SaveAs....
OLEObject.Paste...


Надо очень сильно постараться. ;) А работает действительно мухой, даже на очень больших объемах.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32381062
Nikulitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕщё можно форматирование ячеек и всё остальное через OLE, а данные через Clipboard передавать. Очень быстро.
В данном методе есть несколько недостатков.
1. Для больших отчетов форматирование ячеек через OLE занимает очень много времени
2. Подготовка данных для передачи через Clipboard тоже весьма
непростая задача, особенно если Datawindow группированный
3. Написать универсальную процедуру, которая бы таким способом экспортировала в Excel достаточно трудоемко (если конечно не ограниваться
только простыми случаями вроде тривиального Grid или Columnar)
авторА я просто сохраняю в HTML - можно открывать не только из Excel'я, но и из других приложений,кроме того не требуется установленный Excel на компьютере с нашим запущенным приложением.
Открыть то его можно, но работать с таким отчетом в Excel - весьма неблагодарное занятие.
1. Форматирование ячеек практически не сохраняется
2. Расположение ячеек и их размеры тоже весьма далеки от оригинала
3. А с данными вообще происходит полный кошмар:
некоторые строки почему-то превращаются в даты

числа - в строки, из которых потом прийдется удалить разделитель тысячных разрядов если вы захотите их просуммировать
От такого способа лучше сразу отказаться так как кроме головной боли он вам ничего хорошего не принесет

Единственный способ получить качественный экспорт в Excel - это использовать OLE, но и тут надо быть готовым к сюрпризам. Разные версии Excel ведут себя по разному. Если ваш скрипт экспорта работает с Excel 97 это не значит что он будет работать с Excel 2000.

Что касается библиотеки DW2XLS
она конечно имеет некоторые недостатки, но она достаточно успешно решает
все перечисленные проблемы
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32381284
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Открыть то его можно, но работать с таким отчетом в Excel - весьма
>неблагодарное занятие.
>1. Форматирование ячеек практически не сохраняется
>2. Расположение ячеек и их размеры тоже весьма далеки от оригинала
...
>От такого способа лучше сразу отказаться так как кроме головной боли он
>вам ничего хорошего не принесет

Ну я же его не через dw_1.SaveAs(...) сохраняю. Все получается веьма культурно. Зачастую вид один к одному.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32382011
Nikulitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНу я же его не через dw_1.SaveAs(...) сохраняю. Все получается веьма культурно. Зачастую вид один к одному.
Форматирование ячеек - это не главная проблема
главная проблема в том что Excel не может правильно распознать тип данных
в ячейке.
и строки вида '01-02' преобразуются в даты
числа отформатированные с тысячным разделителем например: 1 300.00
или 1,300.00 будут восприняты как строки "1 300.00" и "1,300.00"
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32398851
A709
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А возможно ли выполнить экспорт datawindow практически без искажений?
В частности, сохранить печатную форму счета, где искажения недопустимы?
Кто нибудь решал такую задачу?
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32398880
A709
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо выполнить разовую работу по экспорту datawindow - печатной формы счета - в файл. В какой срок и за какие деньги это можно сделать?
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #32398938
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, забыл ответить. :)
to Nikulitsa
авторглавная проблема в том что Excel не может правильно распознать тип данных
в ячейке.
и строки вида '01-02' преобразуются в даты

все проблемы решаются при помощи явного указания формата,
к примеру для строк вида '01-02' нужно задать в стиле ячейки формат
mso-number-format:"\@"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Экспорт Datawindow в Excel
    #33323439
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во втором сообщении этой темы Филипп предложил вариант переброски в Excel через HTML.
У меня есть маленькая проблема. То DW, что я экспортирую, содержит колонку с данными отображающимися как checkbox. В результате в Excel пользователь видит checkbox в этой колонке, но он смещен влево и имеет слишком большие размеры (наплывает на границы)... можно ли как нибудь это поправить?

Как это выглядит можно увидеть во вложенном рисунке.
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #33326041
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо! Поставим вопрос по иному:

Кто нибудь перебрасывал dw со стобцом\ами типа checkbox в Excel?
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #33326056
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дремучий wrote:

> Кто нибудь перебрасывал dw со стобцом\ами типа checkbox в Excel?

Перебрасывал, но не через HTML, а ручками. Для эмуляции включённого
checkbox-а проканывает "ь" в шрифте Wingdings. Помогло ;)?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Экспорт Datawindow в Excel
    #33327504
Дремучий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000Перебрасывал, но не через HTML, а ручками. Для эмуляции включённого checkbox-а проканывает "ь" в шрифте Wingdings. Помогло ;)?
:( У меня используется наше расширение DW. Мне надо подправить общую функцию переброски. Честно говоря, я надеялся на информацию как ручками подправить переброшенные checkbox`ы. Фактически, там нужно каждому уменьшить размер и отцентрировать. А вот синтаксис этого (из PB) я никак не могу понять... :(

Мысль переписань к черту всю процедуру переброски на "ручками" я пока держу в запасе :(.
...
Рейтинг: 0 / 0
25 сообщений из 79, страница 1 из 4
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Экспорт Datawindow в Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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