C/Visual C - Ejecutar excel desde C

 
Vista:

Ejecutar excel desde C

Publicado por miguel (5 intervenciones) el 27/05/2009 15:07:14
Hola muy buenas estoy haciendo un programa en c que genera archivos csv, y una vez guardados quiero que mi programa llame a una plantilla de excel que tiene una macro y me modifica ese csv que he creado. He visto que se puede hacer algo con excev o con system pero no tengo claro como se pasarían los argumentos de los ficheros. Por ejemplo para que abra un archivo de excel llamado template.xlsm y que mi programa siga corriendo y no se quede esperando a que termine esa llamada como tendría que hacerlo???

Bueno muchas gracias de antemano y espero ser suficientemente concreto.
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

RE:Ejecutar excel desde C

Publicado por miguel (5 intervenciones) el 29/05/2009 11:53:03
Parece que nadie me puede contestar... Voy a intentar ser un poco mas concreto, quisiera si alguien me puede decir como ejecutar un archivo excel llamado template1.xlsm que se encuentra en el escritorio para que se ejecute la macro que tiene dentro, y que esto lo haga creando un nuevo proceso independiente... es decir que no pare la ejecución de mi programa. Bueno a ver si alguien me puede ayudar

Gracias de antemano
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

RE:Ejecutar excel desde C

Publicado por miguel  (5 intervenciones) el 29/05/2009 13:08:19
Hola muy buenas otra vez

Estoy al final intentando hacerlo con la función ShellExecute pero tengo los siguientes errores, hago lo siguiente:

#include "windows.h"

HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);

.......

ShellExecute(NULL,"open","E:Documents and SettingsMiguel AngelEscritorioTemplate1.xslm",NULL,"",SW_SHOWNORMAL);


Pero me da el siguiente error

error C2664:'ShellExecute' : cannont convert parameter 3 from 'char[61]' to 'const unsigned short *'

bueno a ver si alguien me puede decir algo....

Tambien he intentado que se me abra el archivo mediante system con

system("E:Documents and SettingsMiguel AngelEscritorioTemplate1.xslm");

Pero me dice que no se reconoce como un comando interno o externo....

Bueno pues si alguien puede decirme como hacer desde C para que se ejecute un archivo de excel ( que simplemente se abra el excel vamos... ) le estaría muy agradecido ....
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

RE:Ejecutar excel desde C

Publicado por the beatle (4 intervenciones) el 30/05/2009 08:15:54
Hola que tal a mi me funcionó la la perfección el shellexecute,copialo tal cual:

ShellExecute(NULL,"open","ruta_del_archivo",NULL,NULL,SW_SHOWDEFAULT);

EN TU CASO SERIA ASI LA INSTRUCCIÓN:
ShellExecute(NULL,"open","E:Documents and SettingsMiguel AngelEscritorioTemplate1.xslm",NULL,NULL,SW_SHOWDEFAULT);

Saludos y suerte.
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

RE:Ejecutar excel desde C

Publicado por miguel (5 intervenciones) el 31/05/2009 11:48:01
Hola muy buenas en primer lugar muchas gracias por contestar ya que necesito poner esto en marcha...

Ya lo he intentado como em dices pero me da error:

c2664:'shellExecute': cannont convert parameter 2 from 'char [5]' to 'const unsigned short *'....

#include "windows.h"

HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);

ShellExecute(NULL,"open","E:Documents and SettingsMiguel AngelEscritorioTemplate1.xslm",NULL,NULL,SW_SHOWDEFAULT);

no se qu ees lo que estoy haciendo mal pero se que es una tontería porque a todo el mundo le funciona....
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

RE:Ejecutar excel desde C

Publicado por the_beatle (4 intervenciones) el 31/05/2009 16:58:56
Bueno yo lo probé en Builder C++ y no me dio ningun error, pero al ejecutarlo con Visual C++ me dio el error que tu tienes, lo corregí de la sig. manera:

ShellExecute(NULL, TEXT("open"), TEXT("ruta_del_archivo"), NULL, NULL, SW_SHOWDEFAULT);

Forzando a que lo lea como texto.
Espero que te funcione, suerte.
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

RE:Ejecutar excel desde C

Publicado por fernando.gomez (1603 intervenciones) el 31/05/2009 19:45:59
ShellExecute es una macro definida así:

#ifdef _UNICODE
#define ShellExecute ShellExecuteW
#else
#define ShellExecute ShellExecuteA
#endif

Así, cuando tienes _UNICODE definido (en las propiedades del proyecto) y mandas llamar ShellExecute, en realidad estás llamando a ShellExecuteW.

Si te fijas bien, al final ShellExecuteW no toma como parámetro un char, sino un wchar_t (que en VC6 es un typedef de unsigned short).

Por eso es importante que siempre uses las macros _T("") al llamar a las funciones del API de Windows. O si solo vas a usar Unicode, entonces como te expliqué en el blog, emplea L"" (la L es parte importante).

Al final, la macro _T("") se expande a TEXT(""), y TEXT("") se expande a L""...

Saludos.
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

RE:Ejecutar excel desde C

Publicado por miguel (5 intervenciones) el 01/06/2009 10:50:28
Hola fernando muy buenas.

Gracias por contestar, lo he hecho como tu me dices con L" " y con TEXT(" ") y con los dos me da el mismo error

.mask1_slots.h(2058) : warning C4129: 'D' : unrecognized character escape seque
nce
.mask1_slots.h(2058) : warning C4129: 'M' : unrecognized character escape seque
nce
.mask1_slots.h(2058) : warning C4129: 'E' : unrecognized character escape seque
nce
.mask1_slots.h(2058) : warning C4129: 'T' : unrecognized character escape seque
nce
Generating Code...
link /NODEFAULTLIB:LIBC /NODEFAULTLIB:LIBCMT /NOLOGO delayimp.lib /DELAY
LOAD:wsock32.dll /SUBSYSTEM:console /OUT:pvs.exe @E:DOCUME~1MIGUEL~1CONFIG~1
Temp mb03840.
mask1.obj : error LNK2001: unresolved external symbol "struct HINSTANCE__ * __cd
ecl ShellExecute(struct HWND__ *,unsigned short const *,unsigned short const *,u
nsigned short const *,unsigned short const *,int)" (?ShellExecute@@YAPAUHINSTANC
E__@@PAUHWND__@@PBG111H@Z)
pvs.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Stop.
"pvs" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.

E:Documents and SettingsMiguel AngelEscritoriopvbpvbwininProyecto 12>
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

doble barra

Publicado por Jose (21 intervenciones) el 01/06/2009 16:35:12
Hola, asegurate de escribir el camino a tu directorio con doble barra, con una sola
tendrás warnings...

"c:\mis documentos\tmp.xls".
"c:\\mis documentos\\tmp.xls".

También puede funcionar con una barra invertida:
"c:/mis documentos/temp.xls"
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

RE:doble barra

Publicado por the beatle (4 intervenciones) el 01/06/2009 22:21:35
Hola que tal, leyendo mas al respecto, tiene razón José, tienes que poner la ruta con doble barra

ShellExecute(NULL, TEXT("open"), TEXT("c:\ejemplo.xls"), NULL, NULL, SW_SHOWDEFAULT);

Suerte salu2.
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