Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2008
joseprad joseprad is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
joseprad Va por buen camino
Pasar datos a CALC desde Delphi

CONFIGURAR Y ESCRBIR DATOS EN UNA HOJA CALC DE OPENOFFICE DESDE DELPHI


Autor: Josep Radresa
Fecha 28 de Agosto de 2008


Necesitando efectuar un programa de traspaso de datos a OpenOffice desde Delphi ha podido comprobar que no se encuentran muchas referencias en la red y mucho menos en español. Por tanto he decidido publicar estos apuntes por si pueden ser de utilidad

Este trabajo esta basado en las funciones de la unit ooTools de Bernard Marcelly, publicadas en http://ooomacros.org/dev.php#133853, que han sido de gran ayuda. Mi agradecimiento.

//------------------------------------------------------------------------
//-------Primero creamos un documento OpenOffice------------
//------------------------------------------------------------------------
var
myDoc:Variant;
begin
ConnectOpenOffice //Connecta con OpenOffice
myDoc:= StarDesktop.loadComponentFromURL('private:factory/scalc', '_blank', 0, dummyArray); //Habrimos un documento CALC
end;

//------------------------------------------------------
//---Borrar hojas i dejar solamente Hoja1------
//------------------------------------------------------
procedure TfrmFullCalc.BorrarFullesSobrants(oDoc: Variant);
var
oFulles:Variant;
i:Integer;
begin
oFulles:=myDoc.Sheets;
for i:=oFulles.Count downto 2 do
oFulles.RemoveByName('Hoja'+IntToStr(i));
oFulla:=CreateProperties(['Name',Fms.msqCapituls.FieldByName ('NomCapitul'). AsString]);
execDispatch('.uno:RenameTable',oFulla);
end;

//------------------------------------------------------------------
//----Crear una nuevas hojas y ponerles nombre --------------
//------------------------------------------------------------------
procedure TfrmFullCalc.CrearFullaNova(oFulles:Variant;num:Integer);
var
Nom:string;
begin
Nom:='Nombre de la hoja';
oFulles:=CreateProperties(['Name',Nom,'Index',Num]);
execDispatch('.uno:Add',oFulles);
oFulles:=CreateProperties(['Nr',Num+1]); // Desplazar a la siguiente hoja
execDispatch('.uno:JumtToTable',oFulles);
end;

//---------------------------------------------------------------------
//---Insertar datos en algunas celda de la hoja
//---------------------------------------------------------------------
procedure TfrmFullCalc.CrearCapcelera(Valor: Integer;oDoc:Variant);
var
oFulla, oCelda, oRange, oRow:Variant;
i:Integer;
const
Titul:array [1..4] of string = ('Descripció', 'Quantitat', 'Preu', 'Import');
begin
oFulla:=oDoc.Sheets.getByIndex(Valor); //Activa la hoja
oCelda:=oFulla.GetCellByPosition(0,0); //Pasamos a la celda A1
oCelda.setString('Nombre del cliente'); //Insertamos un texto
oCelda:=oFulla.GetCellByPosition(0,1);//Pasamos a la celda A2
oCelda.setString('Direccion');
oRange:= oFulla.getCellRangeByName('A7:E7'); //Creamos un rango de celdas
oRange.Merge(True); //Las unimos
oRange.HoriJustify:=4; //Modificamos la justificacion horizontal
oCelda:=oFulla.GetCellByPosition(0,6); //Pasamos a la celda A6
oCelda.setString('Texto a insertar'); // y la ponemos un texto
oCelda:=oFulla.GetCellByPosition(0,9);
for i:= 1 to 4 do begin
oCelda:=oFulla.GetCellByPosition(i,9); // Ponemos el texto de la array Titul
oCelda.setString(Titul[i]); // con un string en cada celda
end;
oRange:= oFulla.getCellRangeByName('A10:E10'); //Seleccionamos un rango de celda
oRange.BottomBorder:=CrearBorde(30); // y lo subrrayamos
//----------------------------------------------------------------------
//-----Insertar una formula en una celda-------------------------
//-----------------------------------------------------------------------
oCelda:=oFulla.GetCellByPosition(3,12); // Posicionamos en una celda
Formula:='=C4*D4';
oCelda.SetFormula(Formula);
//------------------------------------------------------------------------
//------Modificar la altura de una linia------------------------------
//--------------------------------------------------------------------------
oRow:=oFulla.GetRows.getByIndex(Lin);
oRow.Height:=700;
end;

//-------------------------------------------------------------------
//----Creamos los parametros del borde de la celda---------
//-------------------------------------------------------------------
function TfrmFullCalc.CrearBorde(Gr:Integer): Variant;
var
oLineBorder:Variant;
begin
oLineBorder:= CreateUnoStruct('com.sun.star.table.BorderLine');
oLineBorder.color:= RGB(0,0,0); //Color de la liea
oLineBorder.OuterLineWidth:= Gr;//Grueso de la linea
Result:=oLineBorder;
end;

//----------------------------------------------------------------------
//--------Crear una doble linea------------------------------------
//----------------------------------------------------------------------
procedure TfrmFullCalc.LineasTotal(oCelda: Variant);
Var
oLineBorder:Variant;
begin
oLineBorder:= CreateUnoStruct('com.sun.star.table.BorderLine');
oLineBorder.Color:=RGB(0,0,0); //Color de la linea
oLineBorder.OuterLineWidth:=30; //Grueso de la primera linea
oCelda.TopBorder:=oLineBorder; //Primeras linea
oLineBorder.InnerLineWidth:= 30; //Grosor de la segunda linea
oLineBorder.LineDistance:= 60; // Distancia entre las lineas
oCelda.BottomBorder:= oLineBorder;
end;

//----------------------------------------------------------------------------
//------Formatear columnas y rangos ------------------------------------------
//----------------------------------------------------------------------------
procedure TfrmFullCalc.FormatejarColumnes(myDoc: Variant; NumFulla:integer);
var
oColumn, oFulla, oRange:Variant;
LiniaFinal:string;
begin
oFulla:=myDoc.Sheets.getByIndex(NumFulla);
//--------Formatear la primera columna -----------------------------
oColumn:=oFulla.GetColumns.GetByIndex(0);
oColumn.Width:=1200; //Ancho de la columna
oRange:= oFulla.getCellRangeByName('A11:A25'); //Seleccionar un rango
oRange.VertJustify:=1; // Justificamos el rango para tener los datos en la parte alta de la celda si se le modifica la altura
//-----------Formatera la segunda columna ---------------------------
oColumn:=oFulla.GetColumns.GetByIndex(1);
oColumn.Width:=8000;
oRange:=oFulla.GetCellRangeByName('B11:B25');
oRange.HoriJustify:=4; //Esta columna de justificamos horizontalmente para que nos quepan todos los datos en la celda
//------Formatear tres columa numericas------------------
oRange:=oFulla.GetCellRangeByName('C11:E'+LiniaFinal);
oRange.NumberFormat:=4;
end;

Con estaos datos y la ooTool de Bernard Marcelly creo que es posible crear y formatear una hoja de calculo de OpenOffice desde Delphi.
Agradeceré cualquier comentario o critica sobre este trabajo.

Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 00:55:27.


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