Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Pasar datos a CALC desde Delphi (https://www.clubdelphi.com/foros/showthread.php?t=80885)

joseprad 27-08-2008 19:02:56

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.



La franja horaria es GMT +2. Ahora son las 11:38:07.

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