FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
|
|
|