:: MVP ::
|
|
:: RSS ::
|
|
|
Как запустить/закрыть Word?
uses
{...,} ComObj;
var
W: OleVariant;
// Запустить Word
procedure TForm1.Button1Click(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
W.Visible := true;
end;
// Закрыть Word
procedure TForm1.Button2Click(Sender: TObject);
begin
W.Quit;
W := Unassigned;
end;
|
Как добавить документ в Word?
uses
{..., Word_TLB,} ActiveX;
// Constants for enum WdNewDocumentType
type
WdNewDocumentType = TOleEnum;
const
wdNewBlankDocument = $00000000; // Новый чистый документ
wdNewWebPage = $00000001; // Web-страница
wdNewEmailMessage = $00000002; // Электронное сообщение
wdNewFrameset = $00000003; // Фрейм
var
W: OleVariant; // Объект Word
procedure TForm1.Button1Click(Sender: TObject);
begin
W.Documents.Add;
end;
// Параметры метода Open:
// Template: string = Имя шаблона, по которому создается новый документ. Если значение не указано, то используется шаблон Normal.
// NewTemplate: boolean = Если использовать значение true, то новый документ открывается как шаблон. Значение по умолчанию - false.
// DocumentType: enum = Тип создаваемого документа, принимает значение из перечисления WdNewDocumentType.
// Visible: boolean = Управляет видимостью созданного документа. Если указать значение True, то документ будет видим.
|
Как открыть документ в Word?
uses
{..., Word_TLB,} ActiveX;
// Constants for enum MsoEncoding
type
MsoEncoding = TOleEnum;
const
msoEncodingThai = $0000036A;
msoEncodingJapaneseShiftJIS = $000003A4;
msoEncodingSimplifiedChineseGBK = $000003A8;
msoEncodingKorean = $000003B5;
msoEncodingTraditionalChineseBig5 = $000003B6;
msoEncodingUnicodeLittleEndian = $000004B0;
msoEncodingUnicodeBigEndian = $000004B1;
msoEncodingCentralEuropean = $000004E2;
msoEncodingCyrillic = $000004E3;
msoEncodingWestern = $000004E4;
msoEncodingGreek = $000004E5;
msoEncodingTurkish = $000004E6;
msoEncodingHebrew = $000004E7;
msoEncodingArabic = $000004E8;
msoEncodingBaltic = $000004E9;
msoEncodingVietnamese = $000004EA;
msoEncodingAutoDetect = $0000C351;
msoEncodingJapaneseAutoDetect = $0000C6F4;
msoEncodingSimplifiedChineseAutoDetect = $0000C6F8;
msoEncodingKoreanAutoDetect = $0000C705;
msoEncodingTraditionalChineseAutoDetect = $0000C706;
msoEncodingCyrillicAutoDetect = $0000C833;
msoEncodingGreekAutoDetect = $0000C835;
msoEncodingArabicAutoDetect = $0000C838;
msoEncodingISO88591Latin1 = $00006FAF;
msoEncodingISO88592CentralEurope = $00006FB0;
msoEncodingISO88593Latin3 = $00006FB1;
msoEncodingISO88594Baltic = $00006FB2;
msoEncodingISO88595Cyrillic = $00006FB3;
msoEncodingISO88596Arabic = $00006FB4;
msoEncodingISO88597Greek = $00006FB5;
msoEncodingISO88598Hebrew = $00006FB6;
msoEncodingISO88599Turkish = $00006FB7;
msoEncodingISO885915Latin9 = $00006FBD;
msoEncodingISO2022JPNoHalfwidthKatakana = $0000C42C;
msoEncodingISO2022JPJISX02021984 = $0000C42D;
msoEncodingISO2022JPJISX02011989 = $0000C42E;
msoEncodingISO2022KR = $0000C431;
msoEncodingISO2022CNTraditionalChinese = $0000C433;
msoEncodingISO2022CNSimplifiedChinese = $0000C435;
msoEncodingMacRoman = $00002710;
msoEncodingMacJapanese = $00002711;
msoEncodingMacTraditionalChineseBig5 = $00002712;
msoEncodingMacKorean = $00002713;
msoEncodingMacArabic = $00002714;
msoEncodingMacHebrew = $00002715;
msoEncodingMacGreek1 = $00002716;
msoEncodingMacCyrillic = $00002717;
msoEncodingMacSimplifiedChineseGB2312 = $00002718;
msoEncodingMacRomania = $0000271A;
msoEncodingMacUkraine = $00002721;
msoEncodingMacLatin2 = $0000272D;
msoEncodingMacIcelandic = $0000275F;
msoEncodingMacTurkish = $00002761;
msoEncodingMacCroatia = $00002762;
msoEncodingEBCDICUSCanada = $00000025;
msoEncodingEBCDICInternational = $000001F4;
msoEncodingEBCDICMultilingualROECELatin2 = $00000366;
msoEncodingEBCDICGreekModern = $0000036B;
msoEncodingEBCDICTurkishLatin5 = $00000402;
msoEncodingEBCDICGermany = $00004F31;
msoEncodingEBCDICDenmarkNorway = $00004F35;
msoEncodingEBCDICFinlandSweden = $00004F36;
msoEncodingEBCDICItaly = $00004F38;
msoEncodingEBCDICLatinAmericaSpain = $00004F3C;
msoEncodingEBCDICUnitedKingdom = $00004F3D;
msoEncodingEBCDICJapaneseKatakanaExtended = $00004F42;
msoEncodingEBCDICFrance = $00004F49;
msoEncodingEBCDICArabic = $00004FC4;
msoEncodingEBCDICGreek = $00004FC7;
msoEncodingEBCDICHebrew = $00004FC8;
msoEncodingEBCDICKoreanExtended = $00005161;
msoEncodingEBCDICThai = $00005166;
msoEncodingEBCDICIcelandic = $00005187;
msoEncodingEBCDICTurkish = $000051A9;
msoEncodingEBCDICRussian = $00005190;
msoEncodingEBCDICSerbianBulgarian = $00005221;
msoEncodingEBCDICJapaneseKatakanaExtendedAndJapanese = $0000C6F2;
msoEncodingEBCDICUSCanadaandJapanese = $0000C6F3;
msoEncodingEBCDICKoreanExtendedAndKorean = $0000C6F5;
msoEncodingEBCDICSimplifiedChineseExtendedAndSimplifiedChinese = $0000C6F7;
msoEncodingEBCDICUSCanadaAndTraditionalChinese = $0000C6F9;
msoEncodingEBCDICJapaneseLatinExtendedAndJapanese = $0000C6FB;
msoEncodingOEMUnitedStates = $000001B5;
msoEncodingOEMGreek437G = $000002E1;
msoEncodingOEMBaltic = $00000307;
msoEncodingOEMMultilingualLatinI = $00000352;
msoEncodingOEMMultilingualLatinII = $00000354;
msoEncodingOEMCyrillic = $00000357;
msoEncodingOEMTurkish = $00000359;
msoEncodingOEMPortuguese = $0000035C;
msoEncodingOEMIcelandic = $0000035D;
msoEncodingOEMHebrew = $0000035E;
msoEncodingOEMCanadianFrench = $0000035F;
msoEncodingOEMArabic = $00000360;
msoEncodingOEMNordic = $00000361;
msoEncodingOEMCyrillicII = $00000362;
msoEncodingOEMModernGreek = $00000365;
msoEncodingEUCJapanese = $0000CADC;
msoEncodingEUCChineseSimplifiedChinese = $0000CAE0;
msoEncodingEUCKorean = $0000CAED;
msoEncodingEUCTaiwaneseTraditionalChinese = $0000CAEE;
msoEncodingArabicASMO = $000002C4;
msoEncodingArabicTransparentASMO = $000002D0;
msoEncodingKoreanJohab = $00000551;
msoEncodingTaiwanCNS = $00004E20;
msoEncodingTaiwanTCA = $00004E21;
msoEncodingTaiwanEten = $00004E22;
msoEncodingTaiwanIBM5550 = $00004E23;
msoEncodingTaiwanTeleText = $00004E24;
msoEncodingTaiwanWang = $00004E25;
msoEncodingIA5IRV = $00004E89;
msoEncodingIA5German = $00004E8A;
msoEncodingIA5Swedish = $00004E8B;
msoEncodingIA5Norwegian = $00004E8C;
msoEncodingUSASCII = $00004E9F;
msoEncodingT61 = $00004F25;
msoEncodingISO6937NonSpacingAccent = $00004F2D;
msoEncodingKOI8R = $00005182;
msoEncodingExtAlphaLowercase = $00005223;
msoEncodingKOI8U = $0000556A;
msoEncodingEuropa3 = $00007149;
msoEncodingHZGBSimplifiedChinese = $0000CEC8;
msoEncodingUTF7 = $0000FDE8;
msoEncodingUTF8 = $0000FDE9;
// Constants for enum WdOpenFormat
type
WdOpenFormat = TOleEnum;
const
wdOpenFormatAuto = $00000000; // Формат выбирается автоматически
wdOpenFormatDocument = $00000001; // Документ Word (файл с расширением DOC)
wdOpenFormatTemplate = $00000002; // Шаблон Word (файл с расширением DOT)
wdOpenFormatRTF = $00000003; // Документ в формате RTF
wdOpenFormatText = $00000004; // Текстовый документ
wdOpenFormatUnicodeText = $00000005; // Текстовый документ в формате UNICODE
wdOpenFormatEncodedText = $00000005; // Текстовый документ в формате UNICODE
wdOpenFormatAllWord = $00000006; // ?
wdOpenFormatWebPages = $00000007; // Web документ
var
W: OleVariant; // Объект Word
procedure TForm1.Button1Click(Sender: TObject);
begin
W.Documents.Open( FileName := 'c:\путь к файлу\имя файла.doc' );
// Другой способ открыть файл
// W.ChangeFileOpenDirectory( 'c:\путь к файлу\' );
// W.Documents.Open( FileName := 'имя файла.doc' );
end;
// Параметры метода Open:
// FileName: string = В параметре указывается имя файла документа, включая путь. Обязательный параметр.
// ConfirmConversions: boolean = Если false, то при открытии документа, формат которого отличается от DOC,
// не будет открываться диалоговое окно "Преобразование файла", если true, то диалоговое окно
// будет выводиться.
// ReadOnly: boolean = Указывая true, документ откроется в режиме только для чтения.
// AddToRecentFiles: boolean = Устанавливая true, имя файла добавляется в список недавно открытых файлов в меню Файл.
// PasswordDocument: string = Пароль для открытия документа.
// PasswordTemplate: string = Пароль для открытия шаблона.
// Revert: boolean = true - возврат к сохраненному документу, если этот документ открывается повторно.
// WritePasswordDocument: string = Пароль для сохранения измененного документа в файле.
// WritePasswordTemplate: string = Пароль для сохранения измененного документа в шаблоне.
// Format: enum = Формат открываемого файла, принимает значение из перечисления WdOpenFormat.
// Encoding: enum = Кодировка для просмотра документа, принимает значение из перечисления MsoEncoding.
// По умолчанию используется системная кодовая станица, установленная по умолчанию.
// Visible: boolean = Будет виден документ после открытия или нет.
// XMLTransform: string = ?
|
Как работать с закладками в Word?
uses
{..., Word_TLB,} ActiveX;
// Constants for enum WdGoToItem
type
WdGoToItem = TOleEnum;
const
wdGoToBookmark = $FFFFFFFF;
wdGoToSection = $00000000;
wdGoToPage = $00000001;
wdGoToTable = $00000002;
wdGoToLine = $00000003;
wdGoToFootnote = $00000004;
wdGoToEndnote = $00000005;
wdGoToComment = $00000006;
wdGoToField = $00000007;
wdGoToGraphic = $00000008;
wdGoToObject = $00000009;
wdGoToEquation = $0000000A;
wdGoToHeading = $0000000B;
wdGoToPercent = $0000000C;
wdGoToSpellingError = $0000000D;
wdGoToGrammaticalError = $0000000E;
wdGoToProofreadingError = $0000000F;
// Constants for enum WdGoToDirection
type
WdGoToDirection = TOleEnum;
const
wdGoToFirst = $00000001;
wdGoToLast = $FFFFFFFF;
wdGoToNext = $00000002;
wdGoToRelative = $00000002;
wdGoToPrevious = $00000003;
wdGoToAbsolute = $00000001;
var
W: OleVariant; // Объект Word
// Добавление закладки
procedure TForm1.Button1Click(Sender: TObject);
begin
W.ActiveDocument.Bookmarks.Add( 'Bookmark1' );
end;
// Скрыть/показать закладки в документе
procedure TForm1.Button2Click(Sender: TObject);
begin
W.ActiveWindow.View.ShowBookmarks := true; // Показать
W.ActiveWindow.View.ShowBookmarks := false; // Скрыть
end;
// Переход к нужной закладке
procedure TForm1.Button3Click(Sender: TObject);
begin
W.ActiveDocument.Bookmarks.Item( 'Bookmark1' ).Select;
// Или вот так
W.Selection.GoTo( Name := 'Bookmark1' );
end;
// Параметры метода GoTo:
// What: enum = Вид элемента, к которому перемещается выделенный диапазон, принимает значение из перечисления WdGoToItem.
// Which: enum = Элемент, к которому перемещается выделенный диапазон, принимает значение из перечисления WdGoToDirection.
// Count: integer = Номер элемента в документе. Значение по умолчанию — 1.
// Допустимы только положительные значения. Чтобы указать элемент, предшествующий выделенному диапазону, следует использовать
// wdGoToPrevious в качестве аргумента Which и указать значение Count.
// Name: string = Если в качестве аргумента What используются объекты wdGoToBookmark, wdGoToComment, wdGoToField или wdGoToObject,
// значит, данный аргумент задает имя.
// Удаление закладки
procedure TForm1.Button4Click(Sender: TObject);
begin
W.ActiveDocument.Bookmarks.Item( 'Bookmark1' ).Delete; // Удаление по имени
W.ActiveDocument.Bookmarks.Item( 1 ).Delete; // Удаление по индексу
end;
// В Word существуют предопределенные закладки:
// \StartOfDoc - начало документа
// \EndOfDoc - конец документа
// \Sel - переход к текущей позиции ввода
|
Как динамически создать макрос в документе Word и выполнить его?
// Способ первый
uses
{...,} ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
W: OleVariant;
i: OleVariant;
begin
W := CreateOleObject( 'Word.Application' );
W.Visible := true;
W.Documents.Add;
i := W.VBE.ActiveVBProject.VBComponents.Count;
W.VBE.ActiveVBProject.VBComponents.Add( 1 );
W.VBE.ActiveVBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 1, 'Sub Test()' );
W.VBE.ActiveVBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 2, ' MsgBox "Привет!"' );
W.VBE.ActiveVBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 3, 'End Sub' );
W.Application.Run( 'Test' );
W.Quit;
W := Unassigned;
end;
// Способ второй
uses
{...,} ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
W: OleVariant;
i: OleVariant;
begin
W := CreateOleObject( 'Word.Application' );
W.Visible := true;
W.Documents.Add;
i := W.VBE.ActiveVBProject.VBComponents.Count;
W.VBE.ActiveVBProject.VBComponents.Add( 1 );
W.VBE.ActiveVBProject.VBComponents.Item( i+1 ).CodeModule.AddFromString( 'Sub Test()' + #13 + ' MsgBox "Привет!"' + #13 + 'End Sub' );
W.Application.Run( 'Test' );
W.Quit;
W := Unassigned;
end;
// Способ третий (импорт из файла)
uses
{...,} ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
W: OleVariant;
i: OleVariant;
begin
W := CreateOleObject( 'Word.Application' );
W.Visible := true;
W.Documents.Add;
i := W.VBE.ActiveVBProject.VBComponents.Count;
W.VBE.ActiveVBProject.VBComponents.Add( 1 );
W.VBE.ActiveVBProject.VBComponents.Import( 'C:\ModuleTest.bas' );
W.Application.Run( 'Test' );
W.Quit;
W := Unassigned;
end;
// Текст файла ModuleTest.bas
'Attribute VB_Name = "ModuleTest"
Public Sub Test()
MsgBox( "Этот модуль вставили из текстового файла" )
End Sub
// Если раскомментировать первую строчку, то при добавлении текста из файла
// как обычный модуль, имя модуля будет ModuleTest
// Способ четвертый (вставка из файла)
uses
{...,} ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
W: OleVariant;
i: OleVariant;
begin
W := CreateOleObject( 'Word.Application' );
W.Visible := true;
W.Documents.Add;
i := W.VBE.ActiveVBProject.VBComponents.Count;
W.VBE.ActiveVBProject.VBComponents.Add( 1 );
W.VBE.ActiveVBProject.VBComponents.Item( i+1 ).CodeModule.AddFromFile( 'C:\ModuleTest.bas' );
W.Application.Run( 'Test' );
W.Quit;
W := Unassigned;
end;
// Текст файла ModuleTest.bas
'Attribute VB_Name = "ModuleTest"
Public Sub Test()
MsgBox( "Этот модуль вставили из текстового файла" )
End Sub
// Если раскомментировать первую строчку, то при добавлении текста из файла
// как обычный модуль, имя модуля будет ModuleTest
// Чтобы при создании макроса не вылетала ошибка, нужно разрешить программный доступ к среде VB.
// Как это сделать? - В разных версиях Word по-разному
// В ранних версиях: пункт меню Сервис -> Макрос -> Безопасность -> Вкладка надежные издатели -> поставить галку "Доверять доступ к Visual Basic Project"
// В Word 2010: Файл -> Параметры -> Центр управления безопасностью -> кнопка "Параметры центра управления безопасностью..." -> поставить галку "Доверять доступ к объектной модели проектов VBA"
|
Как определить нахождение курсора ввода в ячейке таблицы?
uses
{..., Word_TLB,} ActiveX, ComObj;
// Constants for enum WdInformation
type
WdInformation = TOleEnum;
const
wdActiveEndAdjustedPageNumber = $00000001;
wdActiveEndSectionNumber = $00000002;
wdActiveEndPageNumber = $00000003;
wdNumberOfPagesInDocument = $00000004;
wdHorizontalPositionRelativeToPage = $00000005;
wdVerticalPositionRelativeToPage = $00000006;
wdHorizontalPositionRelativeToTextBoundary = $00000007;
wdVerticalPositionRelativeToTextBoundary = $00000008;
wdFirstCharacterColumnNumber = $00000009;
wdFirstCharacterLineNumber = $0000000A;
wdFrameIsSelected = $0000000B;
wdWithInTable = $0000000C;
wdStartOfRangeRowNumber = $0000000D;
wdEndOfRangeRowNumber = $0000000E;
wdMaximumNumberOfRows = $0000000F;
wdStartOfRangeColumnNumber = $00000010;
wdEndOfRangeColumnNumber = $00000011;
wdMaximumNumberOfColumns = $00000012;
wdZoomPercentage = $00000013;
wdSelectionMode = $00000014;
wdCapsLock = $00000015;
wdNumLock = $00000016;
wdOverType = $00000017;
wdRevisionMarking = $00000018;
wdInFootnoteEndnotePane = $00000019;
wdInCommentPane = $0000001A;
wdInHeaderFooter = $0000001C;
wdAtEndOfRowMarker = $0000001F;
wdReferenceOfType = $00000020;
wdHeaderFooterType = $00000021;
wdInMasterDocument = $00000022;
wdInFootnote = $00000023;
wdInEndnote = $00000024;
wdInWordMail = $00000025;
wdInClipboard = $00000026;
var
W: OleVariant; // Объект Word
procedure TForm1.FormCreate(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
// Открвыаем документ, содержащий таблицы
W.Documents.Open( 'c:\путь к файлу\имя файла.doc' );
W.Visible := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
W.Quit;
W := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Table: OleVariant;
begin
// Если курсор ввода находится в ячейке таблицы
if W.Selection.Information[wdWithInTable] then
begin
// Получаем ссылку на таблицу
Table := W.Selection.Tables.Item( 1 );
Table.Cell( 1, 1 ).Range.Text := 'Some text';
end;
end;
|
Как перейти к следующей или предыдущей таблице?
uses
{..., Word_TLB,} ActiveX, ComObj;
// Constants for enum WdGoToItem
type
WdGoToItem = TOleEnum;
const
wdGoToBookmark = $FFFFFFFF;
wdGoToSection = $00000000;
wdGoToPage = $00000001;
wdGoToTable = $00000002;
wdGoToLine = $00000003;
wdGoToFootnote = $00000004;
wdGoToEndnote = $00000005;
wdGoToComment = $00000006;
wdGoToField = $00000007;
wdGoToGraphic = $00000008;
wdGoToObject = $00000009;
wdGoToEquation = $0000000A;
wdGoToHeading = $0000000B;
wdGoToPercent = $0000000C;
wdGoToSpellingError = $0000000D;
wdGoToGrammaticalError = $0000000E;
wdGoToProofreadingError = $0000000F;
var
W: OleVariant; // Объект Word
procedure TForm1.FormCreate(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
W.Documents.Open( 'c:\путь к файлу\имя файла.doc' );
W.Visible := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
W.Quit;
W := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// В каком бы месте документа не находился курсор ввода,
// Мы можем перейти к следующей за ним таблице
W.Selection.GoToNext( wdGoToTable );
// Или к предыдущей
// W.Selection.GoToPrevious( wdGoToTable );
end;
|
Как поучить количество строк и столбцов в таблице?
uses
{..., Word_TLB,} ActiveX, ComObj;
// Constants for enum WdInformation
type
WdInformation = TOleEnum;
const
wdActiveEndAdjustedPageNumber = $00000001;
wdActiveEndSectionNumber = $00000002;
wdActiveEndPageNumber = $00000003;
wdNumberOfPagesInDocument = $00000004;
wdHorizontalPositionRelativeToPage = $00000005;
wdVerticalPositionRelativeToPage = $00000006;
wdHorizontalPositionRelativeToTextBoundary = $00000007;
wdVerticalPositionRelativeToTextBoundary = $00000008;
wdFirstCharacterColumnNumber = $00000009;
wdFirstCharacterLineNumber = $0000000A;
wdFrameIsSelected = $0000000B;
wdWithInTable = $0000000C;
wdStartOfRangeRowNumber = $0000000D;
wdEndOfRangeRowNumber = $0000000E;
wdMaximumNumberOfRows = $0000000F;
wdStartOfRangeColumnNumber = $00000010;
wdEndOfRangeColumnNumber = $00000011;
wdMaximumNumberOfColumns = $00000012;
wdZoomPercentage = $00000013;
wdSelectionMode = $00000014;
wdCapsLock = $00000015;
wdNumLock = $00000016;
wdOverType = $00000017;
wdRevisionMarking = $00000018;
wdInFootnoteEndnotePane = $00000019;
wdInCommentPane = $0000001A;
wdInHeaderFooter = $0000001C;
wdAtEndOfRowMarker = $0000001F;
wdReferenceOfType = $00000020;
wdHeaderFooterType = $00000021;
wdInMasterDocument = $00000022;
wdInFootnote = $00000023;
wdInEndnote = $00000024;
wdInWordMail = $00000025;
wdInClipboard = $00000026;
var
W: OleVariant; // Объект Word
procedure TForm1.FormCreate(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
W.Documents.Open( 'c:\путь к файлу\имя файла.doc' );
W.Visible := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
W.Quit;
W := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Columns, Rows: Integer;
begin
// Курсор ввода должен находится в ячейке таблицы
Columns := W.Selection.Information[wdMaximumNumberOfColumns];
Rows := W.Selection.Information[wdMaximumNumberOfRows];
ShowMessage( Format( 'Строк: %d, Столбцов: %d', [Rows, Columns] ) );
end;
|
Как поучить номер колонки и строки, на которой позиционирован курсор ввода?
uses
{..., Word_TLB,} ActiveX, ComObj;
// Constants for enum WdInformation
type
WdInformation = TOleEnum;
const
wdActiveEndAdjustedPageNumber = $00000001;
wdActiveEndSectionNumber = $00000002;
wdActiveEndPageNumber = $00000003;
wdNumberOfPagesInDocument = $00000004;
wdHorizontalPositionRelativeToPage = $00000005;
wdVerticalPositionRelativeToPage = $00000006;
wdHorizontalPositionRelativeToTextBoundary = $00000007;
wdVerticalPositionRelativeToTextBoundary = $00000008;
wdFirstCharacterColumnNumber = $00000009;
wdFirstCharacterLineNumber = $0000000A;
wdFrameIsSelected = $0000000B;
wdWithInTable = $0000000C;
wdStartOfRangeRowNumber = $0000000D;
wdEndOfRangeRowNumber = $0000000E;
wdMaximumNumberOfRows = $0000000F;
wdStartOfRangeColumnNumber = $00000010;
wdEndOfRangeColumnNumber = $00000011;
wdMaximumNumberOfColumns = $00000012;
wdZoomPercentage = $00000013;
wdSelectionMode = $00000014;
wdCapsLock = $00000015;
wdNumLock = $00000016;
wdOverType = $00000017;
wdRevisionMarking = $00000018;
wdInFootnoteEndnotePane = $00000019;
wdInCommentPane = $0000001A;
wdInHeaderFooter = $0000001C;
wdAtEndOfRowMarker = $0000001F;
wdReferenceOfType = $00000020;
wdHeaderFooterType = $00000021;
wdInMasterDocument = $00000022;
wdInFootnote = $00000023;
wdInEndnote = $00000024;
wdInWordMail = $00000025;
wdInClipboard = $00000026;
var
W: OleVariant; // Объект Word
procedure TForm1.FormCreate(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
W.Documents.Open( 'c:\путь к файлу\имя файла.doc' );
W.Visible := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
W.Quit;
W := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Column, Row: Integer;
begin
// Курсор ввода должен находится в ячейке таблицы
Column := W.Selection.Information[wdStartOfRangeColumnNumber];
Row := W.Selection.Information[wdStartOfRangeRowNumber];
ShowMessage( Format( 'Строка: %d, Столбец: %d', [Row, Column] ) );
end;
|
Как добавить строку в конец таблицы?
uses
{...,} ActiveX, ComObj;
var
W: OleVariant; // Объект Word
procedure TForm1.FormCreate(Sender: TObject);
begin
W := CreateOleObject( 'Word.Application' );
W.Documents.Open( 'c:\путь к файлу\имя файла.doc' );
W.Visible := True;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
W.Quit;
W := Unassigned;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Table: OleVariant;
begin
// Курсор ввода должен находится в ячейке таблицы
Table := W.Selection.Tables.Item( 1 );
Table.Rows.Add;
// Или так (если мы знаем порядковый номер таблицы)
// W.ActiveDocument.Tables.Item( 1 ).Rows.Add;
end;
|
При использовании материала - ссылка на сайт обязательна
|
|