PDA

Ver la Versión Completa : error de c con exel


anoniboxx
08-04-2010, 18:09:07
hola amigos disculpe q moleste tanto pero es q necesito exportar datos de mi progra hacia un excel y consegui un codigo y lo modifiq para q se adactara a mi progra y el programa me corre y pero juando le doy para q exporte me da este error:
el esrroe esta en la claseEOleSysError con el mensaje 'nombre desconosido' y me muestra el error en eta linea de codigo

OleProcedure(name, static_cast)<TAutoArgsBase*>(&args));
porfa alguien sabe como solucionar este problema??' bueno para q tengan una idea este es el codigo q tengo en un boton....

Variant XL,v0,v1,v2,v3v4;
XL=Variant::CreateObject("excel.application");
XL.OlePropertySet("Visible",true);
XL.OlePropertyGet("Workbooks").OleProcedure("SaveAs","C:\\p\pp.xls");
v0=XL.OlePropertyGet("Sheets","pr");
v1=v0.OlePropertyGet("Cells");

String c[9]={"Nombre","Area","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo"};

int i=0;
Form4->DBGrid1->DataSource->DataSet->First();
while((!Form2->DBGrid1->DataSource->DataSet->Eof)&&(!Form4->DBGrid1->DataSource->DataSet->Eof))
{ i++;
for(int j=0;j<9;j++)
{
v1.OlePropertyGet("Cells",i+4,j+1).OlePropertySet("Value",Form4->ADOT->FieldByName(c[j])->AsString.c_str());
}

Form4->DBGrid1->DataSource->DataSet->Next();
}
XL.OlePropertySet("DisplayAlerts",false);
XL.OleProcedure("Save");
XL=Unassigned;
Application->MessageBoxA("LISTO","XX", NULL);


y este es el code original con comentarios

//declaracion de variables
Variant XL,v0,v1,v2,v3;

//abres excel
XL=Variant::CreateObject("excel.application");
//la abres con la ventana visivle o si tiene false la ventana es invisible
XL.OlePropertySet("Visible", true);
//abre el archivo C:\\mi_archivo.xls, se puede "SaveAs" en lugar de "Open" para crear en lugar de abrir
XL.OlePropertyGet("Workbooks").OleProcedure("Open", "C:\\mi_archivo.xls");
//abres la hoja1 en este caso llamada reporte
v0=XL.OlePropertyGet("Sheets", "Reporte");
v1=v0.OlePropertyGet("Cells");

//aqui pones el nombre de las columnas que vas usar de la BD
String columnas[6]={"col1", "col2", "col3", "col4", "col5", "col6"};

//qq es un query ya con una consulta hecha
qq->First();
for (int i = 1; i <= qq->RecordCount; i++) {
for (int ii = 0; ii < 6; ii++) {
//se va escribiendo dato por dato
v1.OlePropertyGet("Cells", i+4, ii+1).OlePropertySet("Value",
qq->FieldByName(columnas[ii])->AsString.t_str());
}
qq->Next();
}

XL.OlePropertySet("DisplayAlerts", false);
XL.OleProcedure("Save");
XL=Unassigned;

MessageBoxA(Handle, "ya esta", "", MB_ICONINFORMATION


como se dieron cuenta realic algunos cambios.. cundo ejecuto la accion el me crea el .xls bueno abre el excel pero sin el doc como tal solo abre y el fondo negro.... porfa alguein q me ayude graciashola amigos disculpe q moleste tanto pero es q necesito exportar datos de mi progra hacia un excel y consegui un codigo y lo modifiq para q se adactara a mi progra y el programa me corre y pero juando le doy para q exporte me da este error:
el esrroe esta en la claseEOleSysError con el mensaje 'nombre desconosido' y me muestra el error en eta linea de codigo

OleProcedure(name, static_cast)<TAutoArgsBase*>(&args));
porfa alguien sabe como solucionar este problema??' bueno para q tengan una idea este es el codigo q tengo en un boton....

Variant XL,v0,v1,v2,v3v4;
XL=Variant::CreateObject("excel.application");
XL.OlePropertySet("Visible",true);
XL.OlePropertyGet("Workbooks").OleProcedure("SaveAs","C:\\p\pp.xls");
v0=XL.OlePropertyGet("Sheets","pr");
v1=v0.OlePropertyGet("Cells");

String c[9]={"Nombre","Area","Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo"};

int i=0;
Form4->DBGrid1->DataSource->DataSet->First();
while((!Form2->DBGrid1->DataSource->DataSet->Eof)&&(!Form4->DBGrid1->DataSource->DataSet->Eof))
{ i++;
for(int j=0;j<9;j++)
{
v1.OlePropertyGet("Cells",i+4,j+1).OlePropertySet("Value",Form4->ADOT->FieldByName(c[j])->AsString.c_str());
}

Form4->DBGrid1->DataSource->DataSet->Next();
}
XL.OlePropertySet("DisplayAlerts",false);
XL.OleProcedure("Save");
XL=Unassigned;
Application->MessageBoxA("LISTO","XX", NULL);


y este es el code original con comentarios

//declaracion de variables
Variant XL,v0,v1,v2,v3;

//abres excel
XL=Variant::CreateObject("excel.application");
//la abres con la ventana visivle o si tiene false la ventana es invisible
XL.OlePropertySet("Visible", true);
//abre el archivo C:\\mi_archivo.xls, se puede "SaveAs" en lugar de "Open" para crear en lugar de abrir
XL.OlePropertyGet("Workbooks").OleProcedure("Open", "C:\\mi_archivo.xls");
//abres la hoja1 en este caso llamada reporte
v0=XL.OlePropertyGet("Sheets", "Reporte");
v1=v0.OlePropertyGet("Cells");

//aqui pones el nombre de las columnas que vas usar de la BD
String columnas[6]={"col1", "col2", "col3", "col4", "col5", "col6"};

//qq es un query ya con una consulta hecha
qq->First();
for (int i = 1; i <= qq->RecordCount; i++) {
for (int ii = 0; ii < 6; ii++) {
//se va escribiendo dato por dato
v1.OlePropertyGet("Cells", i+4, ii+1).OlePropertySet("Value",
qq->FieldByName(columnas[ii])->AsString.t_str());
}
qq->Next();
}

XL.OlePropertySet("DisplayAlerts", false);
XL.OleProcedure("Save");
XL=Unassigned;

MessageBoxA(Handle, "ya esta", "", MB_ICONINFORMATION


como se dieron cuenta realic algunos cambios.. cundo ejecuto la accion el me crea el .xls bueno abre el excel pero sin el doc como tal solo abre y el fondo negro.... porfa alguein q me ayude gracia de antemano y disculpen cualquier molestia....

anoniboxx
08-04-2010, 18:17:53
disculoen por escribir doble el mens anterior es q la pc esta lenta y copie doble :s lo siento...

escafandra
08-04-2010, 18:33:45
Erraste en la sintaxis de static_cast:

prueba así:
OleProcedure(name, static_cast<TAutoArgsBase*>(&args));

Saludos.

anoniboxx
08-04-2010, 18:38:32
gracias por responder tan rapido amigo y pues esa linea no la codifiq yo esta linea esta o la crea c... si yo modifico eso no habra problemas???

escafandra
09-04-2010, 09:55:24
Esa línea está mal codificada y tienes un error de paréntesis.

La sintaxis de static_cast que no es ni mas ni menos que un casting es así:
static_cast<T>(arg)
Siendo T el tipo al que quieres convertir el argumento arg. Si la conversión no es posible, te devuelve un nulo. es conveniente testar ese nulo para evitar errores, a no ser que se esté absolutamente seguro de que se hará el casting sin problema alguno.

Saludos.

anoniboxx
12-04-2010, 22:14:09
a ok gracias amigo pues la verdad resolvi el problema sin codificar esas lineas q salen por defecto en c++ modifiq algunos datos del codigo q´puse y no me dio error de todas maneras muchisimas gracias por su ayuda y por su gran explicacion... saludos