Export the Browser data to Excel

Hi,
I am facing the problem while exporting calculated field data from a multi select browser to Excel.

My problem is in the code IF VALID-HANDLE(hField) , when there is a calculated field in the browser , valid-handle become false.
(IF VALID-HANDLE(hField) THEN hField:BUFFER-VALUE ELSE hField:SCREEN-VALUE).
So in the else part I am assigning the screen value. Screen value always get the last selected row's column value. Same value will repeat all over the excel for that particular calculated field. Any suggestions kindly help


The code is below-

DEF VAR hBuffer AS HANDLE NO-UNDO.
DEF VAR hQuery AS HANDLE NO-UNDO.
DEF VAR hField AS HANDLE NO-UNDO.
hQuery = vBrwHandle:QUERY.
hBuffer = hQuery:GET-BUFFER-HANDLE(1).
ASSIGN
i = 1
vCellColumn = 1
vhBrowseCurCol = vBrwHandle:FIRST-COLUMN .
DO j = 1 TO vBrwHandle:NUM-COLUMNS:
IF vhBrowseCurCol:VISIBLE = TRUE THEN
ASSIGN
vWorkSheet:Cells(1,vCellColumn):VALUE = vhBrowseCurCol:LABEL
vCellColumn = vCellColumn + 1.
ASSIGN
vhBrowseCurCol = vhBrowseCurCol:NEXT-COLUMN.
.
END.
DO browserNumber = 1 TO vBrwHandle:NUM-SELECTED-ROWS:
IF vBrwHandle:FETCH-SELECTED-ROW(browserNumber) THEN.

i = i + 1.
ASSIGN
j = 1
vhBrowseCurCol = vBrwHandle:FIRST-COLUMN.
DO-BLK:
DO WHILE VALID-HANDLE(vhBrowseCurCol):
READKEY PAUSE 0.
IF KEYFUNCTION(lastkey) = "END-ERROR" THEN
DO:
vEndError = YES.
LEAVE DO-BLK.
END.
IF vhBrowseCurCol:VISIBLE = TRUE THEN
DO:
hField = hBuffer:BUFFER-FIELD(vhBrowseCurCol:NAME) NO-ERROR.
vWorkSheet:Cells(i ,j):VALUE =
(IF VALID-HANDLE(hField) THEN hField:BUFFER-VALUE ELSE hField:SCREEN-VALUE).
j = j + 1.
END.


vhBrowseCurCol = vhBrowseCurCol:NEXT-COLUMN.
END.

END.

TIA Philip
 

GregTomkins

Active Member
We export to Excel and use calculated fields all the time, and we just use BUFFER-VALUE. Perhaps your VALID-HANDLE problem is caused by something else? Here is the relevant code that we use. We have used this forever and zillions of people run this code every day.

Code:
h_bf = h_bh:BUFFER-FIELD (h_ct).
 h_tmp = GetExcelColumnLetter(h_ct) + STRING (h_row).
IF h_bf:DATA-TYPE = "CHARACTER":U OR h_bf:DATA-TYPE = "LOGICAL":U
 THEN h_worksheet:Range(h_tmp):Value = "'":U + h_bf:BUFFER-VALUE NO-ERROR.
ELSE h_worksheet:Range(h_tmp):Value = h_bf:BUFFER-VALUE NO-ERROR.
 
Thanks for your reply.

However this :BUFFER-VALUE will not work for calculated fields in a browser with multi select rows to export into excel. All other scnarios export works fine but not with fetch-selected rows.

If it work for you , multi selct browse - calculated fields , kindly help me with some example.

Regards
Philip
 
Top