Trabajar con documentos Excel utilizando Delphi


Seguidamente os dejo una lista bastante amplia de funciones escritas en Delphi que se utilizan cuando estamos programando una aplicación que necesita crear, acceder o modificar un documento Excel.






Crear un documento

Hace visible una hoja de cálculo

Añade un Workbook

Añadir hoja 

Borrar hoja

Contar hojas

Obtiene una hoja

Selecciona una hoja

Graba el Workbook

Cierra el WorkBook

Cierra Excel

Pone un rango

Obtiene un rango

Pone el ancho de columna

Pone el Alto de una columna

Obtiene el formato de un rango de celdas

Pone el formato de un rango de celdas

Pone la alineación horizontal

Pone alineación vertical

Pone la orientación

Pone el ajuste de texto

Comprime el texto hasta ajustar

Funde celdas

Pone un rango de fonts

Configura el borde de un rango de celdas

Pone un patrón a un rango de celdas

Pone una imagen de fondo

Muestra líneas de división

Muestra el diálogo configuración de la impresora

Muestra el diálogo de la impresora

Muestra la ventana activa

Pone la orientación de la página

Pone el tamaño del papel

Pone el área de impresión

Imprime las líneas de división

Vista previa de la impresión

Imprime indicando el número de copias






Crear un documento

uses
ComObj, Classes;



var
E:variant;


Function CreateExcel:boolean;


begin


CreateExcel:=true;


try


E:=CreateOleObject('Excel.Application');


except


CreateExcel:=false;


end;


end;


End;





Hace visible una hoja de cálculo




Function VisibleExcel(visible:boolean): boolean;


begin


VisibleExcel:=true;


try


E.visible:=visible;


except


VisibleExcel:=false;


end;


End;





Añade un Workbook




Function AddWorkBook:boolean;


begin


AddWorkBook:=true;


try


E.Workbooks.Add;


except


AddWorkBook:=false;


end;


End;





Añadir hoja




Function AddSheet(newsheet:string):boolean;


begin


AddSheet:=true;


try


E.Sheets.Add;


E.ActiveSheet.Name:=newsheet;


except


AddSheet:=false;


end;


End;





Borrar hoja




Function DeleteSheet(sheet:variant):boolean;


begin


DeleteSheet:=true;


try


E.DisplayAlerts:=False;


E.Sheets[sheet].Delete;


E.DisplayAlerts:=True;


except


DeleteSheet:=false;


end;


End;








Contar hojas




Function CountSheets:integer;


begin


try


CountSheets:=E.ActiveWorkbook.Sheets.Count;


except


CountSheets:=-1;


end;


End;





Obtiene una hoja


Function GetSheets(value:TStrings):boolean;


var
a_:integer;


begin


GetSheets:=true;


value.Clear;


try


for
a_:=
1 to E.ActiveWorkbook.Sheets.Count do


value.Add(E.ActiveWorkbook.Sheets.Item[a_].Name);


except


GetSheets:=false;


value.Clear;


end;


End;





Selecciona una hoja


Function SelectSheet (sheet:variant):boolean;


begin


SelectSheet:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Select;


except


SelectSheet:=false;


end;


End;





Graba el Workbook




Function SaveWorkBookAs(file_:string): boolean;


begin


SaveWorkBookAs:=true;


try


E.DisplayAlerts:=False;


E.ActiveWorkbook.SaveAs(file_);


E.DisplayAlerts:=True;


except


SaveWorkBookAs:=false;


end;


End;










Cierra el WorkBook


Function CloseWorkBook:boolean;


begin


CloseWorkBook:=true;


try


E.ActiveWorkbook.Close;


except


CloseWorkBook:=false;


end;


End;





Cierra Excel




Function CloseExcel:boolean;


begin


CloseExcel:=true;


try


E.Quit;


except


CloseExcel:=false;


end;


End;








Pone un rango




Function SetRange (sheet:variant;range:string;


value_:variant):boolean;


begin


SetRange:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range[range]:=value_;


except


SetRange:=false;


end;


End;








Obtiene un rango




Function GetRange (sheet:variant;range:string):variant;


begin


try


GetRange:=E.ActiveWorkbook.Sheets.Item[sheet].Range[range];


except


GetRange:=null;


end;


End;





Pone el ancho de columna




Function SetColumnWidth (sheet:variant;


column:variant;width:real):boolean;


begin


SetColumnWidth:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Columns


 
[
column].ColumnWidth:=width;


except


SetColumnWidth:=false;


end;


End;





Pone el Alto de una columna




Function SetRowHeight (sheet:variant;row:variant;


height:real):boolean;


begin


SetRowHeight:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Rows[row].RowHeight:=height;


except


SetRowHeight:=false;


end;


End;





Obtiene el formato de un rango de celdas




Function GetFormatRange (sheet:variant;


range:string):string;


begin


try


GetFormatRange:=E.ActiveWorkbook.Sheets.Item


 
[sheet].Range[range].NumberFormat;


except


GetFormatRange:='';


end;


End;





Pone el formato de un rango de celdas




Function SetFormatRange(sheet:variant;range:string;


format:string):boolean;


begin


SetFormatRange:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].NumberFormat:=format;


except


SetFormatRange:=false;


end;


End;








Pone la alineación horizontal




const


xlHAlignCenter=-4108;


xlHAlignDistributed=-4117;


xlHAlignJustify=-4130;


xlHAlignLeft=-4131;


xlHAlignRight=-4152;


xlHAlignCenterAcrossSelection=7;


xlHAlignFill=5;


xlHAlignGeneral=1;


Function SetHorizontalAlignment
(sheet:variant;range:string;


alignment:integer):boolean;


begin


SetHorizontalAlignment:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].HorizontalAlignment:=alignment;


except


SetHorizontalAlignment:=false;


end;


End;





Pone alineación vertical




const


xlVAlignBottom=-4107;


xlVAlignCenter=-4108;


xlVAlignDistributed=-4117;


xlVAlignJustify=-4130;


xlVAlignTop=-4160;


Function SetVerticalAlignment
(sheet:variant;range:string;


alignment:integer):boolean;


begin


SetVerticalAlignment:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].VerticalAlignment:=alignment;


except


SetVerticalAlignment:=false;


end;


End;





Pone la orientación




Function SetOrientation (sheet:variant;range:string;


orientation:integer):boolean;


begin


SetOrientation:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].Orientation:=orientation;


except


SetOrientation:=false;


end;


End;








Pone el ajuste de texto




Function SetWrapText(sheet:variant;range:string;


WrapText:boolean):boolean;


begin


SetWrapText:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].WrapText:=WrapText;


except


SetWrapText:=false;


end;


End;





Comprime el texto hasta ajustar




Function SetShrinkToFit (sheet:variant;range:string;


ShrinkToFit:boolean):boolean;


begin


SetShrinkToFit:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].ShrinkToFit:=ShrinkToFit;


except


SetShrinkToFit:=false;


end;


End;





Funde celdas




Function SetMergeCells (sheet:variant;range:string;


MergeCells:boolean):boolean;


begin


SetMergeCells:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range


 
[range].MergeCells:=MergeCells;


except


SetMergeCells:=false;


end;


End;





Pone un rango de fonts




Function SetFontRange(sheet:variant;range:string;


font:Tfont):boolean;


begin


SetFontRange:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Name:=font.Name;


if
fsBold
in
font.Style then E.ActiveWorkbook.Sheets.Item


  
[sheet].Range[range].Font.Bold:=True


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Font.Bold:=False;


if
fsItalic
in
font.Style then E.ActiveWorkbook.Sheets.Item


  
[sheet].Range[range].Font.Italic:=True


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Italic:=False;


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Size:=font.Size;


if
fsStrikeOut
in
font.Style


  then
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Font.Strikethrough:=True


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Font.Strikethrough:=False;


if
fsUnderline
in
font.Style then


 
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Font.Underline:=xlUnderlineStyleSingle


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Font.Underline:=xlUnderlineStyleNone;


E.ActiveWorkbook.Sheets.Item [sheet].Range


  
[range].Font.Color:=font.Color;


except


SetFontRange:=false;


end;


End;










Function SetFontRangeEx(sheet:variant;range:string;


underlinestyle,colorindex:integer;superscript,subscript:boolean):boolean;


begin


SetFontRangeEx:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Superscript:=superscript;


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Subscript:=subscript;


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.ColorIndex:=colorindex;


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Font.Underline:=underlinestyle;


except


SetFontRangeEx:=false;


end;


End;





Configura el borde de un rango de celdas




Function SetBorderRange(sheet:variant;range:string;


Edge,LineStyle,Weight,ColorIndex,Color:integer):boolean;


begin


SetBorderRange:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item


 
[Edge].Weight:=Weight;


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item


 
[Edge].LineStyle:=LineStyle;


if
ColorIndex>
0
then


 
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item


 
[Edge].ColorIndex:=ColorIndex


else


 
E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Borders.item


 
[Edge].Color:=color;


except


SetBorderRange:=false;


end;








Pone un patrón a un rango de celdas




Function SetPatternRange(sheet:variant;range:string;


Pattern,ColorIndex,PatternColorIndex,Color,PatternColor:integer):boolean;


begin


SetPatternRange:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].Range[range].Interior.Pattern:=Pattern;


if
ColorIndex>
0


  then
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Interior.ColorIndex:=ColorIndex


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Interior.Color:=color;


if
PatternColorIndex>
0


  then
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Interior.PatternColorIndex:=PatternColorIndex


 
else
E.ActiveWorkbook.Sheets.Item[sheet].Range


  
[range].Interior.PatternColor:=PatternColor;


except


SetPatternRange:=false;


end;


End;





Pone una imagen de fondo




Function SetBackgroundPicture(sheet:variant;


file_:string):boolean;


begin


SetBackgroundPicture:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].SetBackgroundPicture(FileName:=file_);


except


SetBackgroundPicture:=false;


end;


End;





Muestra líneas de división




Function DisplayGridlines(display:boolean):boolean;


begin


DisplayGridlines:=true;


try


E.ActiveWindow.DisplayGridlines:=display;


except


DisplayGridlines:=false;


end;


End;





Muestra el diálogo configuración de la impresora




Function ShowDialogPrinterSetup:boolean;


const
xlDialogPrinterSetup =
9;


begin


ShowDialogPrinterSetup:=true;


try


ShowDialogPrinterSetup:=E.Dialogs.Item


 
[xlDialogPrinterSetup].Show;


except


ShowDialogPrinterSetup:=false;


end;


End;





Muestra el diálogo de la impresora




Function ShowPrintDialog:boolean;


begin


ShowPrintDialog:=true;


try


ShowPrintDialog:=E.Dialogs.Item[xlDialogPrint].Show;


except


ShowPrintDialog:=false;


end;


End;





Muestra la ventana activa




Function WindowView (view:integer):boolean;


begin


WindowView:=true;


try


E.ActiveWindow.View:=view;


except


WindowView:=false;


end;


End;





Pone la orientación de la página




Function PageOrientation (sheet:variant;


orientation:integer):boolean;


begin


PageOrientation:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].PageSetup.Orientation:=orientation;


except


PageOrientation:=false;


end;


End;





Pone el tamaño del papel




Function PagePaperSize (sheet:variant;


papersize:integer):boolean;


begin


PagePaperSize:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].PageSetup.PaperSize:=papersize;


except


PagePaperSize:=false;


end;


End;





Pone el área de impresión




Function PagePrintArea (sheet:variant;


printarea:string):boolean;


begin


PagePrintArea:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].PageSetup.PrintArea:=printarea;


except


PagePrintArea:=false;


end;


End;





Imprime las líneas de división




Function PrintGridlines (sheet:variant;


gridline:boolean):boolean;


begin


PrintGridlines:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].PageSetup.PrintGridlines:=gridline;


except


PrintGridlines:=false;


end;


End;





Vista previa de la impresión




Function PrintPreview (sheet:variant):boolean;


begin


PrintPreview:=true;


try


E.ActiveWorkbook.Sheets.Item[sheet].PrintPreview;


except


PrintPreview:=false;


end;


End;





Vista previa de la impresión




Function PrintPreviewEx:boolean;


begin


PrintPreviewEx:=true;


try


E.Dialogs.Item[xlDialogPrintPreview].Show;


except


PrintPreviewEx:=false;


end;


End;





Imprime indicando el número de copias




Function Print (sheet:variant;copies:integer):boolean;


begin


Print:=true;


try


E.ActiveWorkbook.Sheets.Item


 
[sheet].PrintOut(Copies:=copies);


except


Print:=false;


end;


End;





 
 


 

 









4 comentarios:

  1. Excelente Aporte, ahora lo voy a probar con Lazarus

    ResponderEliminar
  2. Muy buen articulo
    Pero tengo un problema con la función de cerrar el EXCEL.EXE
    Hago el E.QUIT pero no se cierra
    Si puedes ayudarme te lo agradeceré
    Saludos
    Sebas

    ResponderEliminar
  3. por favor como puedo contar las filas que tiene datos en excel

    ResponderEliminar
  4. Excelente articulo,
    Se tiene una hoja protegida por password, se quiere quitar la protección, (se sabe cual es el password), cargar la hoja con unos registros y guardar.

    Gracias..

    ResponderEliminar

Simulación del movimiento de los electrones en un campo electrico

Espectacular simulación realizada con OpenGL del movimiento de los electrones cuando atraviesan un campo eléctrico. Como muestra la image...