FAQ Word / Excel

PREGUNTAS

¿Cómo mover el cursor hasta el final de un documento Word?
¿Cómo cambiar el tipo de letra de una celda?
¿Cómo cambiar el color de la tabla?
¿Cómo imprimir sin mostrar el cuadro de diálogo?
Cómo alinear texto en Word
Utilizar Excel a través de la interfaz COM
Utilizar Excel usando OLE
COMPROBAR SI OLE está instalado
¿Cómo exportar una tabla Word a un StringGrid?

RESPUESTAS

¿Cómo mover el cursor hasta el final de un documento Word?

Function EndOfDoc:boolean;
begin
EndOfDoc:=true;
try
W.ActiveDocument.Range.Select;
W.Selection.Start:=W.Selection.End;
except
EndOfDoc:=false;
end;
End;

¿Cómo cambiar el tipo de letra de una celda?
Function SelectCell(Table:integer;
Row,Column:integer):boolean;
begin
SelectCell:=true;
try
W.ActiveDocument.Tables.Item(Table).Columns.Item
  (Column).Cells.Item(Row).Select;
except
SelectCell:=false;
end;
End;

Function FontToEFont(font:Tfont;EFont:variant;
ColorIndex:integer):boolean;
begin
FontToEFont:=true;
try
EFont.Name:=font.Name;
if fsBold in font.Style
  then EFont.Bold:=True 
  else EFont.Bold:=False; 
if fsItalic in font.Style
  then EFont.Italic:=True
  else EFont.Italic:=False; 
EFont.Size:=font.Size; 
if fsStrikeOut in font.Style
  then EFont.Strikethrough:=True 
  else EFont.Strikethrough:=False; 
if fsUnderline in font.Style
  then EFont.Underline:=wdUnderlineSingle 
  else EFont.Underline:=wdUnderlineNone; 
EFont.ColorIndex:=ColorIndex; 
except
FontToEFont:=false;
end;
End;

Cuando se selecciona un objeto, podemos cambiar la fuente, para ello utilizamos la siguiente función para la selección de objetos:
Function SetFontSelection(font:Tfont;
ColorIndex:integer):boolean;
begin
SetFontSelection:=true;
try
SetFontSelection:=FontToEFont(font,W.Selection.font,ColorIndex);
except
SetFontSelection:=false;
end;
End;

¿Cómo cambiar el color de la tabla?
W.ActiveDocument.Tables.Item(tab_).Columns.Item(col_).Cells.Item(row_).Borders.Item(wdBorderTop).ColorIndex:=wdDarkRed;

¿Cómo imprimir sin mostrar el cuadro de diálogo?
Function PrintOutDoc(NumCopies:integer):boolean;
begin
PrintOutDoc:=true;
try
W.ActiveDocument.PrintOut(NumCopies);
except
PrintOutDoc:=false;
end;

Cómo alinear texto
W.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;
W.Selection.ParagraphFormat.Alignment:=wdAlignParagraphRight;
W.Selection.ParagraphFormat.Alignment:=wdAlignParagraphJustify;

Utilizar Excel a través de la interfaz COM

EJEMPLO 1 
var Excel, WorkBook, Sheet: Variant;
begin
Excel := CreateOleObject('Excel.Application');
Excel.WorkBooks.Open(FileName,False);
WorkBook := Excel.WorkBooks.Item[1];
Sheet := Workbook.Sheets.Item[3];
Sheet.Cells[1,2]:='ASDFG';
Sheet.Cells[2,2]:=230;

EJEMPLO 2
uses
ComObj, ActiveX;

var
Row, Col: integer;
DestRange: OleVariant;
Excel: Variant;

begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible := True;
Excel.WorkBooks.Add; 
Excel.ActiveSheet.Range['A2', 'B3'].Value := 'Тест';
Excel.ActiveSheet.Range['A4', 'B5'].Value := 42;
Excel.ActiveSheet.Range['A10', 'A11'].Formula := '=RAND()';
Excel.ActiveSheet.Cells.Item[1, 1].Value := 'prueba';

Row:=1;
Col:=3;
Excel.ActiveSheet.Cells.Item[Row, Col].Value := 'prueba';

DestRange := Excel.Range['D6', 'F10'];
Excel.Range['A1', 'C5'].Copy(DestRange);

Excel.Range['A2', 'A2'].Font.Size := 20;
Excel.Range['A2', 'A2'].Font.FontStyle := 'Bold';
Excel.Range['A2', 'A2'].Font.Color := clFuchsia;
Excel.Range['A2', 'A2'].Font.Name := 'Arial';
Excel.Range['B2', 'C6'].Interior.Color := RGB(223, 123, 123);
end;

EJEMPLO 3

uses
ComObj, ActiveX;

var
Excel: Variant;
WBk : OleVariant;
SaveChanges: OleVariant;
begin
Excel := CreateOleObject('Excel.Application');
Excel.Visible := True;
WBk := Excel.WorkBooks.Open('C:\Test.xls');
...

WBk.Close(SaveChanges := True);
Excel.Quit;
end;


Utilizar Excel usando OLE

{
Ejemplo para imprimir un archivo utilizando OLE
}
uses
ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
ExcelApp: OLEVariant;
begin
// Create an Excel instance
// Excel Instanz erzeugen
ExcelApp := CreateOleObject('Excel.Application');
try
   ExcelApp.Workbooks.Open('C:\test\xyz.xls');
   // you can also modify some settings from PageSetup
   // Man kann auch noch einige Einstellungen von "Seite Einrichten" anpassen
   ExcelApp.ActiveSheet.PageSetup.Orientation := xlLandscape;
   // Print it out
   // Ausdrucken
   ExcelApp.Worksheets.PrintOut;
finally
   // Close Excel
   // Excel wieder schliessen
   if not VarIsEmpty(ExcelApp) then
   begin
     ExcelApp.Quit;
     ExcelApp := Unassigned;
   end;
end;
end;  



//COMPROBAR SI OLE está instalado
if not IsOLEObjectInstalled('Excel.Application') then
   ShowMessage('no instalado')
else
   ShowMessage('instalado');


function IsOLEObjectInstalled(Name: String): boolean;
var
ClassID: TCLSID;
Rez : HRESULT;
begin

Rez := CLSIDFromProgID(PWideChar(WideString(Name)), ClassID);

if Rez = S_OK then
   Result := true
else
   Result := false;
end;


¿Cómo exportar una tabla Word a un StringGrid?

uses
ComObj;

procedure TForm1.Button1Click(Sender: TObject);
const
AWordDoc = 'C:\xyz\testTable.doc';
var
MSWord, Table: OLEVariant;
iRows, iCols, iGridRows, jGridCols, iNumTables, iTableChosen: Integer;
CellText: string;
InputString: string;
begin
try
   MSWord := CreateOleObject('Word.Application');
except
   // Error....
   Exit;
end;

try
   MSWord.Visible := False;
   MSWord.Documents.Open(AWordDoc);

   // Get number of tables in document
   iNumTables := MSWord.ActiveDocument.Tables.Count;

   InputString := InputBox(IntToStr(iNumTables) +
     ' Tables in Word Document', 'Please Enter Table Number', '1');
   // Todo: Validate string for integer, range...
   iTableChosen := StrToInt(InputString);

   // access table
   Table := MSWord.ActiveDocument.Tables.Item(iTableChosen);
   // get dimensions of table
   iCols := Table.Rows.Count;
   iRows := Table.Columns.Count;
   // adjust stringgrid columns
   StringGrid1.RowCount := iCols;
   StringGrid1.ColCount := iRows + 1;

   // loop through cells
   for iGridRows := 1 to iRows do
     for jGridCols := 1 to iCols do
     begin
       CellText := Table.Cell(jGridCols, iGridRows).Range.FormattedText;
       if not VarisEmpty(CellText) then
       begin
         // Remove Tabs
         CellText := StringReplace(CellText,
           #$D, '', [rfReplaceAll]);
         // Remove linebreaks
         CellText := StringReplace(CellText, #$7, '', [rfReplaceAll]);

         // fill Stringgrid
         Stringgrid1.Cells[iGridRows, jGridCols] := CellText;
       end;
     end;
   //..
finally
   MSWord.Quit;
end;
end;















No hay comentarios:

Publicar un comentario