Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-12-2014
Avatar de lmpadron
lmpadron lmpadron is offline
Miembro
 
Registrado: feb 2009
Ubicación: Habana, Cuba
Posts: 204
Poder: 16
lmpadron Va por buen camino
problemas con propiedades OLE de BCB6 a 2010

Saludos comunidad

Ya se como llamar a excel usando CreateObject pero al parecer eso no fue lo único que cambio del BCB6 al CodeGear 2010, el resto de mi código pude notar que no funciona, imagino que la forma de llamar a las propiedades de Excel no sea la misma, o sea el Item, Cells, etc... les dejo el código para que me ayuden a actualizarlo o me indiquen como hacerlo:

Código:
Variant Excel, Libro, Hoja, Celda;
Excel = Variant::CreateObject("Excel.Application");

Excel.OlePropertySet("Visible", false);
Libro = Excel.OlePropertyGet("Workbooks");
Libro.OleProcedure("Add");

Hoja = Libro.OlePropertyGet("Item", 1);
Libro = Hoja.OlePropertyGet("Worksheets");

char* Pepe= new char[ADOQuery7->FieldByName("Pepe")->Text.Length() + 10];
StrLCopy(Pepe,ADOQuery7->FieldByName("Pepe")->Text.c_str(),ADOQuery7->FieldByName("Pepe")->Text.Length());


Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 5, 1).OlePropertySet("Value", "Codigo");
Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 6, 1).OlePropertySet("Value", Pepe);

Celda = Hoja.OlePropertyGet("Cells").OlePropertyGet("Item", 5,1);
Celda.OlePropertyGet("Font").OlePropertySet("Bold", true);

Excel.OlePropertySet("DisplayAlerts", false);
Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1).OleProcedure("SaveAs", SaveDialog1->FileName.c_str());
Excel.OlePropertySet("Visible", true);
Excel = Unassigned;
ME devuleve el siguiente error

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleSysError with message 'Nombre desconocido'.
---------------------------
Break Continue Help
---------------------------

Gracias de antemano por su tiempo
__________________
Nunca esta de más volver a ver la "Guia de Estilo" o "La Otra Guia de Estilo". Recuerda siempre usar los "Tags" para una mejor legibilidad de tu código.


Cuando miras fijamente al abismo, este te devuelve la mirada


oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________
Responder Con Cita
  #2  
Antiguo 09-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
¿En que linea te da el error? Si no lo sabes pon un bp en la primera, das a run y vas linea a linea con f8. Cuando yo vi este tema vi que al instalar microsoft office se añade un registro que identifica la version del office y que dependiendo de esta variaba la forma de crear el objeto ole, vamos la forma no, varia la cadena y puede ser ese tu error. A ver si puedo buscarlo. En la msdn hay muy buenos escritos para esto pero no recuerdo el nombre a buscar.
Responder Con Cita
  #3  
Antiguo 09-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Yo solo lo usé en C++Builder 6 y no para Excel pero te pongo lo que tengo por si te ayuda en algo.
Para Word:
Código PHP:
void __fastcall TForm1::ButtonExportToWordClick(TObject *Sender)
{
        
Variant WordApplicationvSelectShapesActiveDocument;
        
LPTSTR s;
        
int retval;
        
char valorDeLaClave[1024];

        
retval LeerClaveRegistro(HKEY_CLASSES_ROOT"Word.Application\\CurVer"""valorDeLaClave);
        if(
retval != 0)
        {
                
retval LeerClaveRegistro(HKEY_LOCAL_MACHINE"SOFTWARE\\Classes\\Word.Application\\CurVer"""valorDeLaClave);
                if(
retval != 0)
                {
                        
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                                      
FORMAT_MESSAGE_FROM_SYSTEM,
                                      
NULL,
                                      
retval,
                                      
0,
                                      (
LPTSTR)&s,
                                      
0,
                                      
NULL);
                        
MessageBoxA(Application->HandleAnsiString("Huvo un error al obtener la clase de la version de Word.\n" AnsiString(s)).c_str(), "Error"MB_OK MB_ICONERROR MB_APPLMODAL);
                        return;
                }
        }

        
SaveDialog->Filter "Documento de Word (*.doc)|*.doc";
        
SaveDialog->FileName "Diagramas.doc";
        if(
SaveDialog->Execute())
        {
                try
                {
                        
//WordApplication = CreateOleObject(valorDeLaClave);
                        
WordApplication CreateOleObject("Word.Application");
                }
                catch(...)
                {
                        
MessageBox(Handle"No se pudo iniciar el Word. ¿Está instalado?" "Error"MB_OK |MB_ICONERROR MB_APPLMODAL);
                        
WordApplication Unassigned;
                        return;
                }
                
WordApplication.OlePropertySet("Visible"false);
                
WordApplication.OlePropertyGet("Documents").OleProcedure("Add");

                
ActiveDocument WordApplication.OlePropertyGet("ActiveDocument");

                
vSelect WordApplication.Exec(PropertyGet("Selection"));

                
//Reducimos los margenes poniendolos todos a 5
                
ActiveDocument.OlePropertyGet("PageSetup").OlePropertySet("TopMargin"5);
                
ActiveDocument.OlePropertyGet("PageSetup").OlePropertySet("BottomMargin"5);
                
ActiveDocument.OlePropertyGet("PageSetup").OlePropertySet("LeftMargin"5);
                
ActiveDocument.OlePropertyGet("PageSetup").OlePropertySet("RightMargin"5);

                
//Ponemos la alineacion horizontal en centrada
                
vSelect.OlePropertyGet("ParagraphFormat").OlePropertySet("Alignment"wdAlignParagraphCentre);

                
//Ponemos la alineacion vertica en centrada
                
ActiveDocument.OlePropertyGet("PageSetup").OlePropertySet("VerticalAlignment"wdAlignParagraphCentre);

                for(
int i 0CheckListBox->Counti++)
                {
                        if(
CheckListBox->Checked[i] == true)
                        {

                                
/* Podemos hacerlo usando el portapapeles */

                                //Ponemos la imagen tildada en el TImage
                                //Image->Picture->LoadFromFile(ChangeFileExt(CheckListBox->Items->Strings[i], ".bmp"));

                                //La copiamos al portapapeles
                                //PopupMenu->Items->Items[0]->Click();

                                //Pegamos la imagen dentro del documento de Word
                                //vSelect.OleProcedure("Paste");

                                /* O podemos hacerlo usando AddPicture para añadir directamente el archivo de imagen */

                                
Shapes vSelect.OlePropertyGet("InlineShapes");
                                
Shapes.OleFunction("AddPicture"AnsiString(ChangeFileExt(CheckListBox->Items->Strings[i], ".bmp")).c_str(), falsetrue);

                                
//Añadimos un salto de pagina cada vez que se añada una nueva imagen excepto cuando sea la ultima imagen
                                
if(!= CheckListBox->Count -1)
                                        
vSelect.OleFunction("InsertBreak"0);

                                
Application->ProcessMessages();
                        }
                }

                
//Guardamos el archivo
                
AnsiString salida ChangeFileExt(SaveDialog->FileName".doc");
                
ActiveDocument.OleProcedure("SaveAs"salida.c_str());

                
//Cerramos el Word
                
WordApplication.OleProcedure("Quit");

                
//Limpiamos las variables usadas
                
ActiveDocument.Clear();
                
WordApplication.Clear();
                
vSelect.Clear();
                
Shapes.Clear();
                
MessageBoxA(Application->Handle"Imagenes exportadas satisfactoriamente.""Información"MB_OK MB_ICONINFORMATION MB_APPLMODAL);
        }

Para PowerPoint:
Código PHP:
void __fastcall TForm1::ButtonExportToPowerPointClick(TObject *Sender)
{
        
Variant PowerPointAppSlideShapesActivePresentation;
        
LPTSTR s;
        
int retval;
        
char valorDeLaClave[1024];

        
retval LeerClaveRegistro(HKEY_CLASSES_ROOT"PowerPoint.Application\\CurVer"""valorDeLaClave);
        if(
retval != 0)
        {
                
retval LeerClaveRegistro(HKEY_LOCAL_MACHINE"SOFTWARE\\Classes\\PowerPoint.Application\\CurVer"""valorDeLaClave);
                if(
retval != 0)
                {
                        
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                                      
FORMAT_MESSAGE_FROM_SYSTEM,
                                      
NULL,
                                      
retval,
                                      
0,
                                      (
LPTSTR)&s,
                                      
0,
                                      
NULL);

                        
MessageBoxA(Application->HandleAnsiString("Huvo un error al obtener la clase de la version de Word.\n" AnsiString(s)).c_str(), "Error"MB_OK MB_ICONERROR MB_APPLMODAL);
                        return;
                }
        }

        
SaveDialog->Filter "Presentacion de PowerPoint (*.ppt)|*.ppt";
        
SaveDialog->FileName "Diagramas.ppt";
        if(
SaveDialog->Execute())
        {
                try
                {
                        
//PowerPointApp = CreateOleObject(valorDeLaClave);
                        
PowerPointApp CreateOleObject("PowerPoint.Application");
                }
                catch(...)
                {
                        
MessageBox(Handle"No se pudo iniciar el PowerPoint. ¿Está instalado?" "Error"MB_OK |MB_ICONERROR  MB_APPLMODAL);
                        
PowerPointApp Unassigned;
                        return;
                }
                
PowerPointApp.OlePropertySet("Visible",true);

                
//Aqui está la presentacion activa
                
ActivePresentation PowerPointApp.OlePropertyGet("Presentations").OleFunction("Add");

                
TImage *imagen = new TImage(Application);

                for(
int i 0contador 1CheckListBox->Counti++)
                {
                        if(
CheckListBox->Checked[i] == true)
                        {
                                
//Aqui le decimos que queremos que la presentacion tenga tamaño Dim A4
                                
ActivePresentation.OlePropertyGet("PageSetup").OlePropertySet("SlideSize"ppSlideSizeA4Paper);

                                
//Aqui le decimos que la orientacion del papel será vertical
                                
ActivePresentation.OlePropertyGet("PageSetup").OlePropertySet("SlideOrientation",2);

                                
//Aqui creamos una pagina de la presentacion
                                
Slide ActivePresentation.OlePropertyGet("Slides").OleFunction("Add",contador,12);

                                
contador++;

                                
//Abrimos la imagen en un TImage para poder obtener su ancho y su alto
                                
imagen->Picture->Bitmap->LoadFromFile(ChangeFileExt(CheckListBox->Items->Strings[i],".bmp"));

                                
//Metemos la imagen en el Shape
                                
Shapes Slide.OlePropertyGet("Shapes").OleFunction("AddPicture"ChangeFileExt(CheckListBox->Items->Strings[i],".bmp").c_str(), falsetrue00imagen->Picture->Bitmap->Widthimagen->Picture->Bitmap->Height);

                                
//Ponemos el ajuste de la imagen para que se ajuste ancho y alto proporcionalmente
                                
Shapes.OlePropertySet("LockAspectRatio"true);

                                
//guardamos el ancho y alto de la imagen en dos variables
                                
int deltay imagen->Picture->Bitmap->Height MAXHEIGHTPP;
                                
int deltax imagen->Picture->Bitmap->Width MAXWIDTHPP;
                                
float porcentaje;

                                
//Averiguamos el ancho y alto apropiados para la imagen
                                
if(deltay deltax && deltay 0)
                                {
                                        
porcentaje = (100.0 MAXHEIGHTPP) / imagen->Picture->Bitmap->Height;
                                        
Shapes.OlePropertySet("Width"imagen->Picture->Bitmap->Width - ((imagen->Picture->Bitmap->Width - (imagen->Picture->Bitmap->Width porcentaje 100))));
                                        
Shapes.OlePropertySet("Height"imagen->Picture->Bitmap->Height - ((imagen->Picture->Bitmap->Height - (imagen->Picture->Bitmap->Height porcentaje 100))));
                                }
                                else if(
deltax deltay && deltax 0)
                                {
                                        
porcentaje = (100.0 MAXWIDTHPP) / imagen->Picture->Bitmap->Width;
                                        
Shapes.OlePropertySet("Width"imagen->Picture->Bitmap->Width - ((imagen->Picture->Bitmap->Width - (imagen->Picture->Bitmap->Width porcentaje 100))));
                                        
Shapes.OlePropertySet("Height"imagen->Picture->Bitmap->Height - ((imagen->Picture->Bitmap->Height - (imagen->Picture->Bitmap->Height porcentaje 100))));
                                }
                                
//Si la imagen tiene un ancho y alto inferiores al maximo no hace falta ajustarlos

                                //Recuperamos el ancho y alto de la imagen en la presentacion
                                
deltay Shapes.OlePropertyGet("Height");
                                
deltax Shapes.OlePropertyGet("Width");

                                
//Calculamos la posicion Left y Top
                                
int posX = (MAXWIDTHPP deltax) / 2;
                                
int posY = (MAXHEIGHTPP deltay) / 2;

                                
//Posicionamos la imagen centrada
                                
Shapes.OlePropertySet("Top"posY);
                                
Shapes.OlePropertySet("Left"posX);

                                
Application->ProcessMessages();
                        }
                }

                
//Guardamos el archivo
                
AnsiString salida ChangeFileExt(SaveDialog->FileName".ppt");
                
SaveDialog->FileName salida;
                
ActivePresentation.OleProcedure("SaveAs"salida.c_str());

                
//Cerramos el Word
                
PowerPointApp.OleProcedure("Quit");

                
//Limpiamos las variables usadas
                
ActivePresentation.Clear();
                
PowerPointApp.Clear();
                
Slide.Clear();
                
Shapes.Clear();

                
delete(imagen);
                
MessageBoxA(Application->Handle"Imagenes exportadas satisfactoriamente.""Información"MB_OK MB_ICONINFORMATION MB_APPLMODAL);
        }

Y esta es la funcion que me creé para leer la clave de registro y saber si estaba insalado el office:
Código PHP:
int LeerClaveRegistro(HKEY hKeychar *clavechar *nombreClavechar *valorDeLaClave)
{
        
unsigned char infoValor[1024];
        
HKEY phkResult;
        
LONG IStatus;
        
DWORD dwType=REG_SZ;
        
DWORD dwSize=1023;
        
LPTSTR s;

        
IStatus RegOpenKeyEx(hKeyclave0KEY_READ, &phkResult);
        if(
IStatus == ERROR_SUCCESS)
        {
                
IStatus RegQueryValueEx(phkResult,nombreClave,0,&dwType,(LPBYTE)&infoValor,&dwSize);
                if(
IStatus == ERROR_SUCCESS)
                {
                        
strcpy(valorDeLaClaveinfoValor);
                        
RegCloseKey(phkResult);
                }
        }
        
/*FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                      FORMAT_MESSAGE_FROM_SYSTEM,
                      NULL,
                      IStatus,
                      0,
                      (LPTSTR)&s,
                      0,
                      NULL);
        MessageBoxA(Application->Handle, s, "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL); */
        
return IStatus;

Una cosa que veo que no haces es liberar al objeto al terminar con "Quit". No se si esto funcionaría tal cual en la 2010 pero en la 6 va como la seda.
Al leer el registro obtienes la version y si no está instalado pues lo sabrás tambien.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Migrar version BCB6 Toni C++ Builder 6 20-10-2014 14:44:32
Buscar coincidencia datos con dos tablas Paradox BCB6 Yugo C++ Builder 19 16-09-2014 15:28:25
¿BCB6 Como Cambiar valor Variable que esta en otra unit? JXJ C++ Builder 3 03-10-2013 01:17:36
Problemas con propiedades en POO mcsebas OOP 2 15-07-2011 16:16:11
TurboPower Systool bcb6 eldonfsr C++ Builder 0 15-01-2008 04:11:35


La franja horaria es GMT +2. Ahora son las 13:46:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi