Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Al exportar excel no me acepta variables (CreateOleObject) (https://www.clubdelphi.com/foros/showthread.php?t=80940)

lmpadron 26-09-2012 22:02:48

Al exportar excel no me acepta variables (CreateOleObject)
 
saludos

Con el siguiente código creo perfectamente una hoja de excel , el problema viene a la hora de insertar valores almacenados en variables, cuando paso una cadena de caracteres de forma directa como al crear los nombres de los campos excel los acepta, cuando paso una cadena almacenada en una variable me devuelve un error indicando que no es el tipo de variable correcta. Si paso números no tengo problemas, es solo con el String. Al pasar un char asignandole una letra como por ejemplo 'a' me inserta una numeración matemática en este caso fue '95'. He tratado de ponerle comillas simples, comillas dobles y nada. No se que mas hacer !!! Aquí les dejo el código por si alguien se lo a topado antes y tiene alguna idea. Gracias de antemano por su ayuda

Código:

  Variant Excel,Libro,Hoja,Celda;
  Excel = CreateOleObject("Excel.Application");
  Excel.OlePropertySet("Visible", true);
  Libro=Excel.OlePropertyGet("Workbooks");
  Libro.OleProcedure("Add");
  Hoja=Libro.OlePropertyGet("Item",1);
  Libro=Hoja.OlePropertyGet("Worksheets");
  Libro.OlePropertyGet("Item",1).OlePropertySet("Name","Pago");
  //Libro.OlePropertyGet("Item",2).OlePropertySet("Name","The red book-keeping ");

  /*este que paso directo pasa bien*/
  Hoja=Libro.OlePropertyGet("Item",1);
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,1).OlePropertySet("Value","ueb");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,2).OlePropertySet("Value","expediente");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,3).OlePropertySet("Value","fecha_pago");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,4).OlePropertySet("Value","periodo_inicio");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,5).OlePropertySet("Value","periodo_final");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,6).OlePropertySet("Value","salario_basico");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,7).OlePropertySet("Value","salario_destajo");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,8).OlePropertySet("Value","salario_prima");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,9).OlePropertySet("Value","salario_interrupto");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,10).OlePropertySet("Value","salario_regimen_turno");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,11).OlePropertySet("Value","salario_total");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,12).OlePropertySet("Value","orden");
  Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,13).OlePropertySet("Value","convenio");

  /*Aqui creo una variable para usar de ejemplo y siempre que sea diferente de int o char me da error sin embargo me deja pasar las demás de forma directa sin problemas*/
  String a;
  a = "c";

  int j = 1;
  while (j < 15)
  {
    j++;

    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,1).OlePropertySet("Value",a);
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,2).OlePropertySet("Value","a");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,3).OlePropertySet("Value","b");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,4).OlePropertySet("Value","c");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,5).OlePropertySet("Value","d");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,6).OlePropertySet("Value","e");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,7).OlePropertySet("Value","f");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,8).OlePropertySet("Value","g");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,9).OlePropertySet("Value","h");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,10).OlePropertySet("Value","i");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,11).OlePropertySet("Value","j");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,12).OlePropertySet("Value","k");
    Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,13).OlePropertySet("Value","1");
  }

  for (int i=1;i<14;i++)
  {
    Celda=Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",1,i);
    Celda.OlePropertyGet("Font").OlePropertySet("Bold",true);
  }

  Excel.OlePropertySet("DisplayAlerts",false); //suppress the warning dialog on closing the server
  Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs","c:\\VentaBuque");
  Excel=Unassigned;


dmartinezn 29-09-2012 21:26:11

saludos Impadron
Esto puedes solucionarlo de una forma muy sencila

En ves de declarar a
Código:

a
como
Código:

String a;
, debes hacerlo como
Código:

char * a;
En el ejemplo que hice lo puse de esta forma:
Código:

char * a = "Haciendo una prueba";
, asi funciona perfectamente.
otra forma q puedes hacerlo si usas C++ builder XE es:
Código:

wchar_t * a = L"Haciendo una prueba";
Se mantiene:
Código:

Hoja.OlePropertyGet("Cells").OlePropertyGet("Item",j,1).OlePropertySet("Value",a);
Y otra cosa es que no le habias puesto el nombre con que se iba a salvar ese excel
Código:

Excel.OlePropertyGet("Workbooks").OlePropertyGet("Item",1).OleProcedure("SaveAs","D:\\d.xlsx");
Saludos.


La franja horaria es GMT +2. Ahora son las 07:37:45.

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