Copiar Consulta a Excel

Obsydian, Cool:Plex, Advantage Plex, AllFusion Plex...

Moderadores: Jorge Ubeda, pacopicon

Copiar Consulta a Excel

Notapor Rolin33 » Jue Mar 17, 2011 3:34 pm

Saludos, trabajo con Plex 5.0 y 6.1, alguien podria informarme como puedo copiar toda la informacion de una consulta de mi sistema a Excel mediante un boton, o donde puedo encontrar ayuda sobre este tema.
Gracias.
Rolin33
 
Mensajes: 109
Registrado: Lun Ene 03, 2011 10:14 pm
Ubicación: Peru

Notapor pacopicon » Vie Mar 18, 2011 9:27 am

Hola:

Lo puedes hacer con VBScript. Aunque es cógido independiente de Plex, lo puedes meter dentro de la función Plex. En internet podrás encontrar ejemplos de como recuperar los datos y pasarlos a Excel.

Saludos,
Paco Picón
www.metadata.es
pacopicon
 
Mensajes: 121
Registrado: Lun Oct 03, 2005 12:28 pm
Ubicación: Málaga - España

Notapor Rieke » Vie Mar 18, 2011 10:06 am

Hola Plexeros!!!
Tambien lo puedes hacer a traves de Crystal Report, te creas el informe con esta herramienta y luego llamar al informe desde plex. Para llamarlo tambien necesitad algo de Visual Basic Script, pero te ahorras todo el engorro de tratar los datos con el VBS.
Rieke
 
Mensajes: 1
Registrado: Vie Mar 18, 2011 10:03 am

Notapor Rolin33 » Mar Mar 22, 2011 7:28 pm

Hola a todos nuevamente, logre hacer un source code que me captura lo que hay en el portapaleles y lo pasa a excel. Ahora estoy en otro source code que me graba mi grid al portapapeles, pero al compilar me sale el siguiente error:
D:\APP600\LOC600\BKGEN\CTCIAMUI.CPP(1807) : error C2065: 'colCount' : undeclared identifier
D:\APP600\LOC600\BKGEN\CTCIAMUI.CPP(1811) : error C2374: 'i' : redefinition; multiple initialization
D:\APP600\LOC600\BKGEN\CTCIAMUI.CPP(1799) : see declaration of 'i'
Error executing cl.exe.

El source code es el siguiente:
{
HWND hwndGrid=ObPanelAPI::GetControlHandleByName(&(1:));
if (hwndGrid)
{
CString text;

//Send message to select all the loaded Rows
//Get the number of rows loaded on the Grid
int iRows = SendMessage(hwndGrid, HGM_GETROWCOUNT, 0, 0L);
for(int i=0;i<iRows;i++)
{
//Send message to select the gridrow
SendMessage(hwndGrid,HGM_TURNONROW,i,0);
}


//Create a array of int values to hold the Columns and set to lpMap
int *lpMap = new int[colCount];
SendMessage(hwndGrid,HGM_GETCOLMAP,0,((LPARAM)lpMap));


for(int i=0;i<colCount;i++)
{
CString str1;
int m;
for(m=0;m<colCount;m++)
{
if(lpMap[m] == i)
{
break;
}
}

WORD wState = SendMessage(hwndGrid,HGFM_GETSTATE,m,0L);
if(wState != 5) //If state is not hidden
{
char* str = new char[100];
if((int)SendMessage(hwndGrid,HGFM_GETNAME,m,(LPARAM)str)) //Get the name of the Column
{
str1 = CString(str);
if(text.GetLength() > 0)
text += "\t"+str1; //Append the column name to the exisiting set with tab as delimiter
else
text = str1;
}
else
break;
delete str; //delete the memory allocated before.
}
}

delete lpMap; //delete the memory allocated before

text += "\r\n"; //delimit the header with the carriage return.

//Send message to select all the loaded Rows in the Grid CNTRL+SHIFT+END
SendMessage( hwndGrid, WM_KEYDOWN, VK_CONTROL, 1L);
SendMessage( hwndGrid, WM_KEYDOWN, VK_SHIFT, 1L);
SendMessage( hwndGrid, WM_KEYDOWN, VK_END, 1L);

SendMessage( hwndGrid, WM_COPY, NULL, NULL ); //Process the CNTR+C to get the values to clipboard for the grid

HGLOBAL hMem;
char * MemStr;

CWnd *pWnd = ObPanelAPI::GetPanelCWndByName("*Current");
if (pWnd)
{
if ( pWnd -> OpenClipboard() )
{
char* buffer = (char*)GetClipboardData(CF_TEXT);
CString temp(buffer);
text += temp;

if ( EmptyClipboard() )
{
// Allocate global memory for string
hMem = GlobalAlloc(GMEM_DDESHARE, text.GetLength()+1);
MemStr = (char*)GlobalLock(hMem);
strcpy(MemStr, text);
GlobalUnlock ( hMem);
// The Clipboard now owns the allocated memory
// and will delete this data object
// when new data is put on the Clipboard
if ( !SetClipboardData(CF_TEXT, hMem) )
GlobalFree( hMem);
}
else
MessageBox (0, text, "Clipboard Empty Error", MB_OK);
CloseClipboard();
}
}
}
}

Ojala alguien pueda ayudarme, saludos.
Rolin33
 
Mensajes: 109
Registrado: Lun Ene 03, 2011 10:14 pm
Ubicación: Peru

Notapor Jorge Ubeda » Mié Mar 23, 2011 9:30 am

colCount no está definido. Se usa directamente. Debes definirlo primero.
i está declarado dos veces como int : for(int i=0;i<iRows;i++)
Los números de línea te dirán exactamente, en tu cpp, dónde está el problema.
Jorge Ubeda
Site Admin
 
Mensajes: 229
Registrado: Mié Oct 26, 2005 6:00 pm
Ubicación: Valencia

Notapor Rolin33 » Jue Abr 07, 2011 1:38 am

Ok, gracias a todos.
Saludos.
Rolin33
 
Mensajes: 109
Registrado: Lun Ene 03, 2011 10:14 pm
Ubicación: Peru

Notapor fenixo69 » Jue May 09, 2013 8:17 pm

al final te funciono rolin? ya que yo no logro solucionarlo... :?
fenixo69
 
Mensajes: 47
Registrado: Mié Dic 08, 2010 10:19 pm
Ubicación: Honduras

Notapor Rolin33 » Mar May 14, 2013 3:40 pm

Hola Fenixo69 aun no logro que me funcione, si logro solucionarlo te aviso para asi compartirlo con las demas personas del foro si se les llegara a presentar el mismo caso. Saludos y si tienes avances por favor me avisas, saludos compañero.
Rolin33
 
Mensajes: 109
Registrado: Lun Ene 03, 2011 10:14 pm
Ubicación: Peru

cambiar la estrategia (menos c++)

Notapor Jorge Ubeda » Mar May 14, 2013 7:37 pm

Hola Rolin, Fenix
Digamos que si dos años después sigue sin resolver, habría que cambiar de estrategia... ;-)
Paco recomienda usar vBscript. Habría que estudiarlo. Por mi parte usé tu método, pero muy simplificado. Fundamentalmente, todo el tratamiento de strings lo dejé en Plex ¿para qué complicarme la vida con algo que Plex tiene resuelto, y bien?. Sólo usé cinco APIs insertadas en el loop de recorrido de los datos: una para abrir el clipboard (OpenClipboard()), una para limpiarlo (EmptyClipboard()), otra para guardar (SetClipboardData()), otra más para obtener el contenido (GetClipboardData()), y la última para eliminar el espacio de memoria (CloseClipboard()). Por supuesto, con todas las medidas necesarias alrededor para manipular memoria y errores, e intercambio de tipos de datos.
Recuerden que las APIs de un lenguaje determinado pueden insertarse como APIs en la lógica de la función, porque forman, en cierto modo, un contiguo.
Jorge Ubeda
Site Admin
 
Mensajes: 229
Registrado: Mié Oct 26, 2005 6:00 pm
Ubicación: Valencia

Notapor fenixo69 » Vie Jun 07, 2013 3:39 pm

Hola Jorge,
Muchas gracias segui tu consejo y con ayuda de la wiki de plex para complementar y tuve los resultados deseados,

Saludos.

Leroy.
fenixo69
 
Mensajes: 47
Registrado: Mié Dic 08, 2010 10:19 pm
Ubicación: Honduras


Volver a Plex

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 3 invitados

cron