PDA

Ver la Versión Completa : Problema para cerrar Correctamente archivo de Excel


odiseeus
05-08-2012, 02:50:21
buen dia, de nuevo yo molestando... ;)
bueno seré lo mas explicito posible...
para exportar unas tablas con datos a un archivo de excel he encontrado una forma muy cómoda para hacerlo :) , pero de esa misma forma no puedo darle la instrucción para cerrar bien el archivo de tal manera que pueda abrirlo aparte con el mismo excel sin que me diga que abre en solo lectura por estar en uso de otro programa (el mio :rolleyes: ... ) y por lo mismo me deja "colgado" el excel al cerrar mi programa...
ACLARACIONES: la intension es mantener todo el tiempo mi programa ejecutandose... por eso no puedo estar cerrandolo (para liberar el archivo) cada vez que creo un nuevo archivo de excel.

aqui va el codigo como creo el objeto "tipo excel" :D

// la declaracion correspondiente
Variant excelArchivo, excelHoja, excelCelda;
//abrir excel
excelArchivo = Variant::CreateObject("Excel.Application");
//al abrir no lo dejo visible asi
excelArchivo.OlePropertySet("Visible", false);
//crear por adicion el libro.
excelArchivo.OlePropertyGet("Workbooks").OleProcedure("Add");
//abres la hoja1 en este caso llamada reporte
excelHoja = excelArchivo.OlePropertyGet("Sheets", WideString("Hoja1").Copy());
//y ahora con el cual manejare las celdas
excelCelda = excelHoja.OlePropertyGet("Cells");
//.... procedimientos .... (aqui tambien hay una manera muy comoda de "moverse por las celdas" que es la siguiente)
excelCelda.OlePropertyGet("Cells", 1,1).OlePropertySet("Value",WideString("texto ingresado a la celda en UnicodeString").Copy());
// en la linea anterior aclaro que se debe ingresar en WideString que es el que acepta Excel
// (yo uso C++ Builder XE2, probar en otras versiones)
//despues guardo el archivo asi
excelArchivo.OlePropertySet("DisplayAlerts", false);
excelArchivo.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs", WideString("C:\\archivo.xlsx").Copy());
//cada quien lo ubica y nombra a gusto, aclaro que la carpeta donde se guarde debe existir
// y termino asi
excelArchivo = Unassigned;
... sonara a loco.. :eek: pero creo que despues de guardarlo (el archivo excel en el código anterior) sirve esta linea para lo que quiero... la probe de primerazo y me sirvio, pero toca verificar en otras situaciones

excelArchivo.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("Close");

que pena pero cuando estaba terminando de redactar se me ocurrio, igual a alguien le puede servir...

PDT: pido a un moderador que si es necesario me corriga el titulo del post, pues no se como mas colocarle... éxitos y buona vita!