Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Некоторые функции для работы с Microsoft Word и Microsoft Excel

01.01.2007
{ **** UBPFD *********** by kladovka.net.ru ****
>> Некоторые функции для работы с MSWord и MSExcel
 
Некоторые процедуры для работы с с MSWord и MSExcel, которыми активно пользуюсь сам и предлагаю остальным. Есть как простые функции такие как открытие документа, получение текста документа, управление окнами и т.п. так и более продвинутые: добавление таблицы в MSWord или MSExcel из DBGrid, ListView и т.п. Описывать все не буду, постарался чтобы из названия функций было понятно.
 
Зависимости: Windows, Messages, SysUtils, Classes, Comctrls,Grids, DBGrids, WordConst, ExcelConst
Автор:       FalicSoft, falicsoft@narod.ru, Москва
Copyright:   FalicSoft Laboratory (C)
Дата:        24 октября 2003 г.
********************************************** }
 
unit
ExcelConst;
 
interface
 
Const
xlCenter
=-4108;
xlLeft
=-4131;
xlRight
=-4152;
xlDistributed
=-4117;
xlJustify
=-4130;
xlNone
=-4142;
{HorizontalAlignment}
xlHAlignCenter
=-4108;
xlHAlignDistributed
=-4117;
xlHAlignJustify
=-4130;
xlHAlignLeft
=-4131;
xlHAlignRight
=-4152;
{In addition, for the Range or Style object}
xlHAlignCenterAcrossSelection
=7;
xlHAlignFill
=5;
xlHAlignGeneral
=1;
 
{VerticalAlignment}
xlVAlignBottom
=-4107;
xlVAlignCenter
=-4108;
xlVAlignDistributed
=-4117;
xlVAlignJustify
=-4130;
xlVAlignTop
=-4160;
 
{Borders}
xlInsideHorizontal
=12;
xlInsideVertical
=11;
xlDiagonalDown
=5;
xlDiagonalUp
=6;
xlEdgeBottom
=9;
xlEdgeLeft
=7;
xlEdgeRight
=10;
xlEdgeTop
=8;
 
{LineStyle}
xlContinuous
=1;
xlDash
=-4115;
xlDashDot
=4;
xlDashDotDot
=5;
xlDot
=-4118;
xlDouble
=-4119;
xlSlantDashDot
=13;
xlLineStyleNone
=-4142;
 
{Weight}
xlHairline
=1;
xlThin
=2;
xlMedium
=-4138;
xlThick
=4;
 
{ColorIndex}
xlColorIndexAutomatic
=-4105;
xlColorIndexNone
=-4142;
 
{Background}
xlBackgroundAutomatic
=-4105;
xlBackgroundOpaque
=3;
xlBackgroundTransparent
=2;
 
{Underline}
xlUnderlineStyleNone
=-4142;
xlUnderlineStyleSingle
=2;
xlUnderlineStyleDouble
=-4119;
xlUnderlineStyleSingleAccounting
=4;
xlUnderlineStyleDoubleAccounting
=5;
 
implementation
 
end.
 
unit
WordConst;
 
interface
 
Const
{----MoveRight(Unit, Count, Extend)}
{Unit}
wdCharacter
=1;
wdWord
=2;
wdSentence
=3;
wdCell
=12;
wdAdjustNone
=0;
wdOrientPortrait
=0;
wdOrientLandScape
=1;
wdAlignParagraphCenter
=1;
wdAlignParagraphLeft
=0;
wdAlignParagraphRight
=2;
{Extend}
wdMove
=0;
wdExtend
=1;
wdBorderHorizontal
=-6;
wdBorderVertical
=-5;
wdLineStyleNone
=0;
wdLine
=5;
implementation
 
end.
 
unit
FunctionOLEObject;
 
interface
 
uses
 
Windows, Messages, SysUtils, Classes,
 
Comctrls,Grids, DBGrids;
 
{---------- WORD ----------}
{--- Documents}
function WordAddDocument(const vWord: Variant;
                         
const vTemplate: String;
                         
const vNewTemplate: Boolean): Boolean;
{---Windows}
function WordWindowsCount(const vWord: Variant): Integer;
{---Window}
procedure
WordWindowActivate(const vWord: Variant;
                             
const IWindow: Integer);
procedure
WordNextWindowActivate(const vWord: Variant);
procedure
WordPreviousWindowActivate(const vWord: Variant);
{---Selection}
procedure
WordPutField(const vWord: Variant;
                     
const Field,Value: String);
procedure
WordPutFieldItem(const vWord: Variant;
                       
Field:String;
                       
Item: Integer;
                       
Value: array of String);
procedure
WordText(const vWord: Variant;
                   
const Value: String);
procedure
WordTypeParagraph(const vWord: Variant);
procedure
WordMoveRight(const vWord: Variant;
                       
const vUnit, vCount, vExtend: Integer);
procedure
WordMoveDown(const vWord: Variant;
                       
const vUnit, vCount:integer);
 
{---Table}
procedure
WordTablesAdd(const vWord: Variant;
                       
const Rows, Columns: Integer);
 
procedure
WordTablesHeaders(const vWord: Variant;
                           
const vColl,vRow,vCount:integer);
 
procedure
WordTablesCellValue(const vWord: Variant;
                             
const Table, Row, Column: Integer;
                             
const Value: String;
                             
const FontName: String;
                             
const FontBold,FontItalic:boolean;
                             
const FontUnderLine:byte);
procedure
WordTablesNextCellValue(const vWord: Variant;
                                 
const Value: String);
procedure
WordTableAddFromListView(const vWord: Variant;
                                   
ListView: TListView);
 
procedure
WordTableAddFromGrid(const vWord: Variant;
                                     
DBGrid: TDBGrid; CollSize:boolean);
 
{---------- Excel ----------}
procedure
ExcelCellsValue(const vExcel: Variant;
                         
const Row, Col: Integer;
                         
const Value: Variant);
 
procedure
ExcelFromListView(const vExcel: Variant;
                           
ListView: TListView;
                           
const Row, Col: Integer);
procedure
ExcelTableAddFromGrid(const vExcel: Variant;
                                       
DBGrid: TDBGrid;
                                 
const Row, Col: Integer);
 
procedure
ExcelRangeCellsValue(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Value: Variant;
                         
const HorizontalAlignment,
                         
VerticalAlignment: Integer;
                         
const WrapText: Boolean;
                         
const Orientation: Integer;
                         
const ShrinkToFit: Boolean;
                         
const MergeCells: Boolean);
procedure
ExcelRangeCellsCopy(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const tlToRow, tlToCol,
                          drToRow
, drToCol: Integer);
procedure
ExcelRangeCellsBorders(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                       
const BorderType: Integer;
                       
const LineStyle: Integer);
procedure
ExcelBorders(const vExcel: Variant;
                       
const BorderType: Integer;
                       
const LineStyle: Integer);
 
procedure
ExcelRangeCellsSelect(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer);
procedure
ExcelFont(const vExcel: Variant;
                   
const Name: String;
                   
const Bold: Boolean;
                   
const Italic: Boolean;
                   
const Size: Integer;
                   
const Strikethrough: Boolean;
                   
const Superscript: Boolean;
                   
const Subscript: Boolean;
                   
const OutlineFont: Boolean;
                   
const Shadow: Boolean;
                   
const Underline: Integer;
                   
const ColorIndex: Integer);
procedure
ExcelFontName(const vExcel: Variant;
                   
const Name: String);
procedure
ExcelFontSize(const vExcel: Variant;
                   
const Size: Integer);
procedure
ExcelFontBold(const vExcel: Variant;
                   
const Bold: Boolean);
procedure
ExcelFontItalic(const vExcel: Variant;
                   
const Italic: Boolean);
procedure
ExcelRangeCellsFontName(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Name: String);
procedure
ExcelRangeCellsFontSize(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Size: Integer);
procedure
ExcelRangeCellsFontBold(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Bold: Boolean);
procedure
ExcelRangeCellsFontItalic(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Italic: Boolean);
procedure
ExcelRangeCellsFont(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                   
const Name: String;
                   
const Bold: Boolean;
                   
const Italic: Boolean;
                   
const Size: Integer;
                   
const Strikethrough: Boolean;
                   
const Superscript: Boolean;
                   
const Subscript: Boolean;
                   
const OutlineFont: Boolean;
                   
const Shadow: Boolean;
                   
const Underline: Integer;
                   
const ColorIndex: Integer);
implementation
 
uses
WordConst, ExcelConst;
 
function WordAddDocument(const vWord: Variant;
                         
const vTemplate: String;
                         
const vNewTemplate: Boolean): Boolean;
begin
 
Result:=True;
 
try
    vWord
.Documents.Add(Template:=vTemplate,
                       
NewTemplate:=vNewTemplate);
 
except
   
Result:=False;
 
end;
end;
 
procedure
WordMoveRight(const vWord: Variant;
                       
const vUnit, vCount,
                        vExtend
: Integer);
begin
  vWord
.Selection.MoveRight(vUnit, vCount, vExtend);
end;
 
procedure
WordTablesHeaders(const vWord: Variant;
                           
const vColl,vRow,vCount:integer);
var I,cnt:integer;
 
begin
    vWord
.Selection.MoveLeft(Unit:=wdCell, Count:=vColl-1);
    vWord
.Selection.MoveUp(Unit:=wdLine, Count:=vRow);
 
    vWord
.Selection.SelectRow;
    vWord
.Selection.Rows.HeadingFormat :=-1;
 
 
{ vWord.Selection.MoveUp(Unit:=wdLine, Count:=vRow);
    vWord
.Selection.Tables.Item(1).Select;
    vWord
.Selection.ParagraphFormat.Alignment:= wdAlignParagraphCenter;}
end;
 
procedure
WordMoveDown(const vWord: Variant;
                       
const vUnit, vCount:integer);
begin
    vWord
.Selection.MoveDown(vUnit,vCount);
end;
 
procedure
WordTablesAdd(const vWord: Variant;
                       
const Rows, Columns: Integer);
begin
  vWord
.ActiveDocument.Tables.Add(Range:=vWord.Selection.Range,
   
NumRows:=Rows, NumColumns:=Columns);
end;
 
procedure
WordTablesCellValue(const vWord: Variant;
                             
const Table, Row, Column: Integer;
                             
const Value: String;
                             
const FontName: String;
                             
const FontBold,FontItalic:boolean;
                             
const FontUnderLine:byte);
begin
  vWord
.ActiveDocument.Tables.Item(Table).Cell(Row,Column).
 
Range.Font.Name:=FontName;
  vWord
.ActiveDocument.Tables.Item(Table).Cell(Row,Column).
 
Range.Font.Bold:=FontBold;
  vWord
.ActiveDocument.Tables.Item(Table).Cell(Row,Column).
 
Range.Font.Italic:=FontItalic;
  vWord
.ActiveDocument.Tables.Item(Table).Cell(Row,Column).
 
Range.Font.UnderLine:=FontUnderLine;
  vWord
.ActiveDocument.Tables.Item(Table).Cell(Row,Column).
   
Range.InsertAfter(Text:=Value);
 
end;
 
procedure
WordTableAddFromListView(const vWord: Variant;
                                   
ListView: TListView);
var i, j: Integer;
begin
 
WordTablesAdd(vWord, ListView.Items.Count+1, ListView.Columns.Count);
 
WordText(vWord, ListView.Column[0].Caption);
 
For j:=1 To ListView.Columns.Count-1 Do begin
   
WordTablesNextCellValue(vWord,
       
ListView.Column[j].Caption);
 
end;
 
For i:=0 To ListView.Items.Count-1 Do begin
   
WordTablesNextCellValue(vWord,
       
ListView.Items.Item[i].Caption);
   
For j:=0 To ListView.Columns.Count-2 Do
     
If ListView.Items.Item[i].SubItems.Count>j Then
       
WordTablesNextCellValue(vWord,
           
ListView.Items.Item[i].SubItems.Strings[j])
     
Else
       
WordMoveRight(vWord, wdCell, 1, wdMove);
 
end;
end;
 
procedure
WordTableAddFromGrid(const vWord: Variant;
                                     
DBGrid: TDBGrid; CollSize:boolean);
var i, j,Col,Row,ColWidth: Integer;
 
begin
 
 
Col:=DBGrid.Columns.Count;
 
Row:=DBGrid.DataSource.DataSet.RecordCount+1;
 
 
WordTablesAdd(vWord, Row,Col);
 
WordText(vWord, DBGrid.Columns.Items[0].Title.Caption);
 
if CollSize then ColWidth:=DBGrid.Columns.Items[0].Width;
  vWord
.Selection.Tables.Item(1).Columns.Item(1).
 
SetWidth(ColumnWidth:=ColWidth,RulerStyle:=wdAdjustNone);
 
 
 
For j:=1 To Col-1 Do
 
begin
     
WordTablesNextCellValue(vWord,
       
DBGrid.Columns.Items[j].Title.Caption);
   
if CollSize then ColWidth:=DBGrid.Columns.Items[j].Width;
    vWord
.Selection.Tables.Item(1).Columns.Item(j+1).
   
SetWidth(ColumnWidth:=ColWidth,RulerStyle:=wdAdjustNone);
 
end;
 
 
 
DBGrid.DataSource.DataSet.First;
 
For i:=1 To Row-1 Do
   
begin
   
For j:=0 To Col-1 Do
   
WordTablesNextCellValue(vWord,
       
DBGrid.Columns.Items[j].Field.AsString);
   
DBGrid.DataSource.DataSet.Next;
   
end;
   
DBGrid.DataSource.DataSet.First;
end;
 
procedure
WordTablesNextCellValue(const vWord: Variant;
                                 
const Value: String);
begin
 
WordMoveRight(vWord, wdCell, 1, wdMove);
  vWord
.Selection.Font.Bold:= false;
 
WordText(vWord, Value);
end;
 
procedure
WordText(const vWord: Variant;
                   
const Value: String);
begin
  vWord
.Selection.TypeText(Text:=Value);
end;
 
procedure
WordTypeParagraph(const vWord: Variant);
begin
  vWord
.Selection.TypeParagraph;
end;
 
procedure
WordPutField(const vWord: Variant;
                     
const Field,Value: String);
begin
  vWord
.Selection.GoTo(Name:=Field);
  vWord
.Selection.TypeText(Text:=Value);
end;
 
procedure
WordPutFieldItem(const vWord: Variant;
                       
Field:String;
                       
Item: Integer;
                       
Value: array of String);
var i: Integer;
begin
 
Field:=Format('%s%d',[Field,Item]);
  vWord
.Selection.GoTo(Name:=Field);
 
For i:=Low(Value) To High(Value) Do begin
    vWord
.Selection.TypeText(Text:=Value[i]);
    vWord
.Selection.MoveRight;
 
end;
end;
 
procedure
WordWindowActivate(const vWord: Variant;
                             
const IWindow: Integer);
begin
  vWord
.Windows.Item(IWindow).Activate;
end;
 
procedure
WordNextWindowActivate(const vWord: Variant);
begin
  vWord
.ActiveWindow.Next.Activate;
end;
 
procedure
WordPreviousWindowActivate(const vWord: Variant);
begin
  vWord
.ActiveWindow.Previous.Activate;
end;
 
function WordWindowsCount(const vWord: Variant): Integer;
begin
 
Result:=vWord.Windows.Count;
end;
 
//------- Exel --------------------
 
procedure
ExcelCellsValue(const vExcel: Variant;
                         
const Row, Col: Integer;
                         
const Value: Variant);
var sV: String;
    iV
: Integer;
    dV
: TDateTime;
begin
 
Case TVarData(Value).VType of
    varEmpty
:;
    varNull
:;
    varSmallint
:;
    varInteger
:begin
                 iV
:=Value;
                 vExcel
.Cells[Row,Col].Value:=iV;
               
end;
    varSingle
:;
    varDouble
:;
    varCurrency
:;
    varDate
: begin
                 dV
:=Value;
                 vExcel
.Cells[Row,Col].Value:=dV;
               
end;
    varOLEStr
:;
    varDispatch
:;
    varError
:;
    varBoolean
:;
    varUnknown
:;
    varByte
:;
    varString
: begin
                 sV
:=Value;
                 vExcel
.Cells[Row,Col].Value:=sV;
               
end;
    varTypeMask
:;
    varArray
:;
    varByRef
:;
 
end;
end;
 
procedure
ExcelFromListView(const vExcel: Variant;
                           
ListView: TListView;
                           
const Row, Col: Integer);
var i, j: Integer;
begin
 
For j:=0 To ListView.Columns.Count-1 Do begin
    vExcel
.Cells[Row,Col+j].Value:=ListView.
       
Column[j].Caption;
 
end;
 
For i:=0 To ListView.Items.Count-1 Do begin
    vExcel
.Cells[Row+1+i,Col].Value:=ListView.
       
Items.Item[i].Caption;
   
For j:=0 To ListView.Items.Item[i].SubItems.Count-1 Do
   
try
      vExcel
.Cells[Row+1+i,Col+1+j].Value:=StrToFloat(ListView.
         
Items.Item[i].SubItems.Strings[j]);
   
except
      vExcel
.Cells[Row+1+i,Col+1+j].Value:=ListView.
         
Items.Item[i].SubItems.Strings[j];
   
end;
 
end;
end;
 
procedure
ExcelTableAddFromGrid(const vExcel: Variant;
                                       
DBGrid: TDBGrid;
                                 
const Row, Col: Integer);
var i, j,vCol,vRow,ColWidth: Integer;
 
begin
  vCol
:=DBGrid.Columns.Count;
  vRow
:=DBGrid.DataSource.DataSet.RecordCount+1;
 
 
 
For j:=0 To vCol-1 Do
    vExcel
.Cells[Row,Col+j].Value:=DBGrid.Columns.Items[j].Title.Caption;
 
 
DBGrid.DataSource.DataSet.First;
 
For i:=0 To vRow-2 Do
   
begin
   
For j:=0 To vCol-1 Do
   
try
    vExcel
.Cells[Row+1+i,Col+j].Value:=
       
StrToFloat(DBGrid.Columns.Items[j].Field.AsString);
   
except
    vExcel
.Cells[Row+1+i,Col+j].Value:=
       
DBGrid.Columns.Items[j].Field.AsString;
   
end;
   
DBGrid.DataSource.DataSet.Next;
   
end;
   
DBGrid.DataSource.DataSet.First;
end;
 
 
procedure
ExcelRangeCellsValue(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Value: Variant;
                         
const HorizontalAlignment,
                         
VerticalAlignment: Integer;
                         
const WrapText: Boolean;
                         
const Orientation: Integer;
                         
const ShrinkToFit: Boolean;
                         
const MergeCells: Boolean);
begin
 
ExcelCellsValue(vExcel, tlRow, tlCol, Value);
  vExcel
.Range[vExcel.Cells[tlRow, tlCol],
               vExcel
.Cells[drRow, drCol]].Select;
  vExcel
.Selection.HorizontalAlignment:=HorizontalAlignment;
  vExcel
.Selection.VerticalAlignment:=VerticalAlignment;
  vExcel
.Selection.WrapText:=WrapText;
  vExcel
.Selection.Orientation:=Orientation;
  vExcel
.Selection.ShrinkToFit:=ShrinkToFit;
  vExcel
.Selection.MergeCells:=MergeCells;
end;
 
procedure
ExcelRangeCellsCopy(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const tlToRow, tlToCol,
                          drToRow
, drToCol: Integer);
begin
  vExcel
.Range[vExcel.Cells[tlRow, tlCol],
               vExcel
.Cells[drRow, drCol]].Select;
  vExcel
.Selection.Copy;
  vExcel
.Range[vExcel.Cells[tlToRow, tlToCol],
               vExcel
.Cells[drToRow, drToCol]].Select;
  vExcel
.ActiveSheet.Paste;
end;
 
procedure
ExcelBorders(const vExcel: Variant;
                       
const BorderType: Integer;
                       
const LineStyle: Integer);
begin
  vExcel
.Selection.Borders[BorderType].LineStyle:=LineStyle;
end;
 
procedure
ExcelRangeCellsBorders(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                       
const BorderType: Integer;
                       
const LineStyle: Integer);
begin
  vExcel
.Range[vExcel.Cells[tlRow, tlCol],
               vExcel
.Cells[drRow, drCol]].Select;
 
ExcelBorders(vExcel, BorderType, LineStyle);
end;
 
procedure
ExcelRangeCellsSelect(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer);
begin
  vExcel
.Range[vExcel.Cells[tlRow, tlCol],
               vExcel
.Cells[drRow, drCol]].Select;
end;
 
procedure
ExcelFont(const vExcel: Variant;
                   
const Name: String;
                   
const Bold: Boolean;
                   
const Italic: Boolean;
                   
const Size: Integer;
                   
const Strikethrough: Boolean;
                   
const Superscript: Boolean;
                   
const Subscript: Boolean;
                   
const OutlineFont: Boolean;
                   
const Shadow: Boolean;
                   
const Underline: Integer;
                   
const ColorIndex: Integer);
begin
 
ExcelFontName(vExcel, Name);
 
ExcelFontSize(vExcel, Size);
 
ExcelFontBold(vExcel, Bold);
 
ExcelFontItalic(vExcel, Italic);
  vExcel
.Selection.Font.Strikethrough:=Strikethrough;
  vExcel
.Selection.Font.Superscript:=Superscript;
  vExcel
.Selection.Font.Subscript:=Subscript;
  vExcel
.Selection.Font.OutlineFont:=OutlineFont;
  vExcel
.Selection.Font.Shadow:=Shadow;
  vExcel
.Selection.Font.Underline:=Underline;
  vExcel
.Selection.Font.ColorIndex:=ColorIndex;
end;
 
procedure
ExcelRangeCellsFont(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                   
const Name: String;
                   
const Bold: Boolean;
                   
const Italic: Boolean;
                   
const Size: Integer;
                   
const Strikethrough: Boolean;
                   
const Superscript: Boolean;
                   
const Subscript: Boolean;
                   
const OutlineFont: Boolean;
                   
const Shadow: Boolean;
                   
const Underline: Integer;
                   
const ColorIndex: Integer);
begin
 
ExcelRangeCellsSelect(vExcel, tlRow, tlCol,
                          drRow
, drCol);
 
ExcelFont(vExcel, Name, Bold, Italic, Size,
           
Strikethrough, Superscript, Subscript,
           
OutlineFont, Shadow, Underline, ColorIndex);
end;
 
procedure
ExcelFontName(const vExcel: Variant;
                   
const Name: String);
begin
  vExcel
.Selection.Font.Name:=Name;
end;
 
procedure
ExcelRangeCellsFontName(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Name: String);
begin
 
ExcelRangeCellsSelect(vExcel, tlRow, tlCol,
                          drRow
, drCol);
 
ExcelFontName(vExcel, Name);
end;
 
procedure
ExcelFontSize(const vExcel: Variant;
                   
const Size: Integer);
begin
  vExcel
.Selection.Font.Size:=Size;
end;
 
procedure
ExcelRangeCellsFontSize(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Size: Integer);
begin
 
ExcelRangeCellsSelect(vExcel, tlRow, tlCol,
                          drRow
, drCol);
 
ExcelFontSize(vExcel, Size);
end;
 
procedure
ExcelFontBold(const vExcel: Variant;
                   
const Bold: Boolean);
begin
  vExcel
.Selection.Font.Bold:=Bold;
end;
 
procedure
ExcelRangeCellsFontBold(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Bold: Boolean);
begin
 
ExcelRangeCellsSelect(vExcel, tlRow, tlCol,
                          drRow
, drCol);
 
ExcelFontBold(vExcel, Bold);
end;
 
procedure
ExcelFontItalic(const vExcel: Variant;
                   
const Italic: Boolean);
begin
  vExcel
.Selection.Font.Italic:=Italic;
end;
 
procedure
ExcelRangeCellsFontItalic(const vExcel: Variant;
                         
const tlRow, tlCol,
                          drRow
, drCol: Integer;
                         
const Italic: Boolean);
begin
 
ExcelRangeCellsSelect(vExcel, tlRow, tlCol,
                          drRow
, drCol);
 
ExcelFontItalic(vExcel, Italic);
end;
 
end.

Пример использования:

Uses
     
ComObj;
....
procedure
Example;
var
 W
:variant;
begin
 W
:=CreateOleObject('Word.Application');
 W
.Visible := false // не будет показывать Word
 
WordTableAddFromGrid(w,DBGrid1,true);// последний параметр определяет будет ли ширина столбцов такая же как у Грида или нет
end