Power Builder - Ayuda en Exportar Reporte, límite de excel...

   
Vista:

Ayuda en Exportar Reporte, límite de excel...

Publicado por Frank P. michel1n0@outlook.com (50 intervenciones) el 06/11/2013 22:38:01
Buenas compañeros, nuevamente acudiendo a por su ayuda, esta véz me encuentro en un dilema con respecto de exportar un DW a un archivo Excel, el caso es que mi consulta realizada, me da como resultado mucho mas registros que el límite permitido en Excel (que veo que sólo exporta en *.xls),
he visto que en la versión 2007 su límite supera por poco al millon de registros, pero consultado, la consulta a realizar a fin de año supera con facilidad ese límite también, lo que sí seria conveniente para mi es el poder exportar el DW en distintas hojas debido a que superará el límite de excel, porque después este excel tendría que exportarlo a un *.mdb, pero esa ya es otra historia(que ya estoy resolviendo).

Por cierto, estoy utilizando PB 10.5

Espero haberme explicado bien, no haberles quitado demasiado tiempo y agradezco por adelantado su ayuda.

Saludos,

Frank P.


PD: en caso alguno de ustedes desee exportar un *.xls a *.mdb no dude en consultar y pedir ayuda, en mi caso lo resolví con una DLL que cree en VB6 y la llamo como OLE en el PB.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda en Exportar Reporte, límite de excel...

Publicado por Frank P. (50 intervenciones) el 09/12/2013 16:23:12
Hola compañeros, he logrado crear un archivo de Excel en varias hojas en caso se supere el límite de registros (tanto para 2003 como 2007) sólo sería cuestión de comentar y descomentar ciertas líneas de código, aquí les dejo lo que hice:

- primero tengo que agregar un DW (en mi caso dw_3) que será el que realice la exportación al archivo excel.

oleobject myoleobject
integer rc, i, count, j, colcount, rep
string mydata, colname, colnames, ls_select, ls_dwsyntax, ls_err

//en caso versión 2003
//rep = truncate(dw_2.rowcount()/65535,0)
//if mod(dw_2.rowcount(),65535) > 0 then rep = rep +1
//en caso versión 2007
rep = truncate(dw_2.rowcount()/1048575,0)
if mod(dw_2.rowcount(),1048575) > 0 then rep = rep +1

myoleobject = CREATE oleobject
rc = myoleobject.ConnectToNewObject ( "Excel.Application" )
IF rc <> 0 THEN
MessageBox ( "Error", String ( rc ) )
Return
END IF

ls_select = string(dw_2.object.datawindow.table.select)
ls_dwsyntax = SQLCA.SyntaxFromSQL( ls_select, "Style(Type=tabular)", ls_err)
dw_3.Create (ls_dwsyntax, ls_err)
IF ls_err <> '' THEN
MessageBox ("error - Sintaxis", ls_err)
else
dw_3.SetTransObject (SQLCA)
end if

try
myoleobject.Application.Visible = false
myoleobject.Workbooks.Add()

for i = 1 to rep

myoleobject.activeworkbook.sheets(i).name = "reporte"+string(i)

dw_3.reset()
//en caso versión 2007
dw_2.RowsCopy(((1048574 * (i - 1)) + i), (1048575 * i), Primary!, dw_3, 1, Primary!)
//en caso versión 2003
// dw_2.RowsCopy(((65534 * (i - 1)) + i), (65535 * i), Primary!, dw_3, 1, Primary!)
colcount = integer(dw_3.object.DataWindow.column.count)
for j = 1 to colcount
colname = dw_3.describe("#"+string(j)+".Name")
choose case j
case 1
colnames = colname
case else
colnames = colnames + '~t' + colname
end choose
next
colnames = colnames + "~r~n"
mydata = dw_3.object.datawindow.data
clipboard(colnames + mydata)
myoleobject.activeworkbook.sheets(i).paste()
next

myoleobject.activeworkbook.saveas(as_destino)
myoleobject.activeworkbook.close()
myoleobject.Application.quit
myoleobject.DisconnectObject()
catch ( exception e )
MessageBox ( "Error", e.GetMessage() )
finally
Destroy myoleobject
end try


Y listo!, espero les sea de utilidad, nos vemos y comenten dudas o sugerencias.

Saludos,

Frank P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar