Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим работу с классом FillFormat объектной модели Word, который отвечает за заливку графических фигур.
Объект FillFormat определяет параметры заливки в ворде для графических фигур. Он позволяет определять формат заливки в ворде с помощью заданного цвета, с помощью градиента, заданного шаблона или стиля. Доступ к классу осуществляется через свойство Fill объекта Shape. Стоит учитывать, что примеры для данной статьи я тестировал на версии Word 2007, и поэтому, мне пришлось опустить некоторые свойства класса FillFormat, так как они доступны начиная с версии 2010.
Класс FillFormat – заливка в ворде
Свойства – как сделать заливку в ворде
Application— Вернет объект Application, представляющий приложение Microsoft Word.
BackColor— Вернет или определит класс ColorFormat, представляющий цвет фона для заливки Word.
ForeColor— Возвращает или задает объект ColorFormat, представляющий цвет переднего плана для заливки в ворде.
GradientStops— Вернет коллекцию GradientStops, связанную с указанным форматом заполнения. Начиная с версии 2010.
PictureEffects— Вернет объект PictureEffects, который может использоваться для применения изображения в качестве заливки в ворде. Начиная с версии 2010.
GradientAngle— Возвращает или задает угол градиентной заливки. Начиная с версии 2010.
GradientColorType— Возвращает тип градиента для указанной заливки в Word. Только чтение, значения константы MsoGradientColorType:
- msoGradientColorMixed — -2 – Смешанные цвета заливки в ворде.
- msoGradientOneColor — 1 – Один цвет заливки в ворде.
- msoGradientTwoColors — 2 – Два цвета заливки в Word.
- msoGradientPresetColors — 3 – Цвет градиента устанавливается в соответствии со значение константы msoPresetGradientType.
GradientStyle— Возвращает стиль штриховки градиента для заливки в ворде. Только чтение, значение константы MsoGradientStyle.
GradientVariant— Возвращает вариант градиента для указанной заливки word как целое значение от 1 до 4.
Pattern— Возвращает значение константы MsoPatternType, представляющей шаблон, который использует заливка в Word.
PresetGradientType— Возвращает заданный тип градиента для указанной заливки в ворде. Значения константы MsoPresetGradientType.
PresetTexture— Вернет заданную текстуру для указанной заливки. Значения константы MsoPresetTexture.
RotateWithObject— Возвращает или устанавливает, вращается ли заливка с заданной формы. Чтение / запись. !!!!2010
TextureAlignment— Возвратит или задаст выравнивание (происхождение координатной сетки) для плитки от заполнения текстур. Начиная с версии 2010.
TextureHorizontalScaleи TextureVerticalScale— Возвращает или задает значение, определяющее коэффициент горизонтального или вертикального масштабирования для заполнения текстур. Начиная с версии 2010.
TextureName— Имя файла пользовательской текстуры для указанной заливки ворд.
TextureOffsetXи TextureOffsetY— Задает значение, которое определяет горизонтальное или вертикальное смещение текстуры от начала координат в пунктах. Чтение и запись.
TextureTile— Значение, указывающее положение текстуры заливки в Word плиткой или по центру. Чтение и запись. Начиная с версии 2010.
TextureType— Тип текстуры для указанной ворд заливки. Значение константы MsoTextureType:
- msoTextureTypeMixed — -2 – Смешанные значение.
- msoTexturePreset — 1 – Указать тип текстуры.
- msoTextureUserDefined — 2 — Пользователь определяет тип текстуры.
Transparency— Степень прозрачности, значение от 0,0 (непрозрачный) до 1.0 (прозрачный). Запись и чтение.
Type— Тип формата заполнения. Только чтение, значение константы MsoFillType:
- msoFillMixed — -2 – Смешанная заливка в Word.
- msoFillSolid — 1 — Сплошная заливка.
- msoFillPatterned — 2 – Заливка по образцу.
- msoFillGradient — 3 — Градиентная заливка.
- msoFillTextured — 4 — Текстурированная заливка.
- msoFillBackground — 5 – Заливка Word такая же, как на заднем плане.
- msoFillPicture — 6 – Заливка с помощью изображения.
Visible– Свойство позволяет включить (true) или отключить (false) заливку в Word.
Методы – заливка в word
OneColorGradient(Style, Variant, Degree) — Устанавливает градиент, состоящий из одного цвета заливки в ворде.
Style — Стиль градиента. Значение константы MsoGradientStyle:
- msoGradientMixed — -2 — Смешанный градиент.
- msoGradientHorizontal — 1 – Переход по горизонтали.
- msoGradientVertical — 2 – Переход по вертикали.
- msoGradientDiagonalUp — 3 — Переход от нижнего угла до противоположного угла по диагонали.
- msoGradientDiagonalDown — 4 — Переход от верхнего угла до противоположного угла по диагонали.
- msoGradientFromCorner — 5 — Переход с угла к трем другим углам.
- msoGradientFromTitle — 6 — Переход от углов к центру.
- msoGradientFromCenter — 7 – Переход от центра к углам.
Variant – Вариант градиента. Может иметь значение от 1 до 4, в соответствии с четырьмя вариантами на вкладке «Градиент» в диалоговом окне «Способы заливки». Если свойство Style установлено в 7, то этот аргумент может быть 1 или 2.
Degree — Степень градиента. Может иметь значение от 0,0 (темный) до 1,0 (светлый).
TwoColorGradient(Style, Variant) — Устанавливает градиент, состоящий из двух цветов для заливки в Word.
PresetGradient(Style, Variant, PresetGradientType) — Устанавливает заданную заготовку для градиента.
PresetGradientType – Тип заготовки, значения константы MsoPresetGradientType.
PresetTextured(PresetTexture) — Устанавливает заданную заливку заданной текстурой. Параметр принимает значения константы MsoPresetTexture.
Patterned(Pattern) — Устанавливает заданный узор, который будет использовать заливка в Word. Параметр принимает значение константы MsoPatternType.
Solid — Устанавливает заданную заливку Word равномерным цветом. .
UserPicture(PictureFile) — Заполняет заданную форму одним большим изображением. Параметр определяет путь к файлу и его имя.
UserTextured(TextureFile) — Заполняет заданную фигуру небольшими плитками изображения. Параметр определяет путь к файлу и его имя.
Хорошо, с теорией мы разобрались, теперь настало время приступить к программированию. Я приведу примеры программного кода для языков VBScript и JScript, которые работают под управлением сервера Windows Script Host.
Программный код на языке VBSCRIPT:
' ******************************************************************** ' Класс FillFormat - заливка в ворде ' FillFormat.vbs ' ******************************************************************** Option Explicit dim oWord, oDoc, shpCanvas, i Set oWord = CreateObject("Word.Application") ' ссылка на Application Set oDoc = oWord.Documents ' ссылка на Documents oDoc.Add() oWord.Visible = true Set shpCanvas = oDoc(1).Shapes ' ссылка на Shapes '***************************************************** ' добавляем в документ три различные фигуры '***************************************************** With shpCanvas .AddCallout 3, 80, 10, 50, 50 .AddShape 101, 200, 10, 50, 50 .AddTextEffect 1, "Заливка в Word", "Times New Roman", 20, false, false, 300, 10 End With '***************************************************** ' Определяем цвет заливки в ворде для первых 3-х фигур '***************************************************** MsgBox RGB(128,0,93) With shpCanvas(1).Fill .ForeColor.RGB = RGB(0,0,128) .Visible = true End With With shpCanvas(2).Fill .ForeColor.RGB = RGB(128,0,93) .Visible = true End With With shpCanvas(3).Fill .ForeColor.RGB = RGB(128,102,0) .Visible = true End With '-------------------------------------------------------------------------------- dim iCount iCount = 10 for i = 1 to 7 shpCanvas.AddShape 101, iCount, 70, 50, 50 iCount = iCount + 80 next iCount = 1 for i =4 to 10 With shpCanvas(i).Fill .OneColorGradient iCount, 2, 0 .ForeColor.RGB = RGB(50 + iCount*20,10 + iCount*20,255) .Visible = true End With iCount = iCount + 1 next '-------------------------------------------------------------------------------- dim iCount1 ' убрать заливку текста в ворде iCount1 = 10 for i = 1 to 7 shpCanvas.AddShape 101, iCount1, 130, 50, 50 iCount1 = iCount1 + 80 next iCount1 = 1 for i =11 to 17 With shpCanvas(i).Fill .TwoColorGradient iCount1, 2 .BackColor.RGB = RGB(275 - iCount1*20 ,0,0) .ForeColor.RGB = RGB(50 + iCount1*20,0,255) .Visible = true End With iCount1 = iCount1 + 1 next '-------------------------------------------------------------------------------- dim iCount2 iCount2 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount2, 200, 40, 40 iCount2 = iCount2 + 45 next iCount2 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount2, 250, 40, 40 iCount2 = iCount2 + 45 next iCount2 = 1 for i =18 to 41 With shpCanvas(i).Fill .PresetGradient 3, 2, iCount2 .Visible = true End With iCount2 = iCount2 + 1 next '-------------------------------------------------------------------------------- dim iCount3 ' как убрать заливку в ворде iCount3 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount3, 310, 40, 40 iCount3 = iCount3 + 45 next iCount3 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount3, 360, 40, 40 iCount3 = iCount3 + 45 next iCount3 = 1 for i =42 to 65 With shpCanvas(i).Fill .PresetTextured iCount3 .Visible = true End With iCount3 = iCount3 + 1 next '-------------------------------------------------------------------------------- dim iCount4 iCount4 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount4, 420, 40, 40 iCount4 = iCount4 + 45 next iCount4 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount4, 470, 40, 40 iCount4 = iCount4 + 45 next iCount4 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount4, 520, 40, 40 iCount4 = iCount4 + 45 next dim iCount5 iCount5 = 10 for i = 1 to 12 shpCanvas.AddShape 1, iCount5, 570, 40, 40 iCount5 = iCount5 + 45 next iCount5 = 1 ' как сделать заливку в ворде for i =66 to 113 With shpCanvas(i).Fill .ForeColor.RGB = RGB(0,153,253) .Patterned iCount5 .Visible = true End With iCount5 = iCount5 + 1 next |
Программный код на языке JSCRIPT:
// ******************************************************************** // Класс FillFormat - заливка в ворде // FillFormat.js // ******************************************************************** var oWord1, oDoc1, shpCanvas1, i; oWord1 = WScript.CreateObject("Word.Application"); // ссылка на Application oDoc1 = oWord1.Documents; // ссылка на Documents oDoc1.Add(); oWord1.Visible = true; shpCanvas1 = oDoc1(1).Shapes; // ссылка на Shapes //***************************************************** // добавляем в документ три различные фигуры //***************************************************** with(shpCanvas1){ AddCallout(3, 80, 10, 50, 50); AddShape(101, 200, 10, 50, 50); AddTextEffect(1, "Заливка в Word", "Times New Roman", 20, false, false, 300, 10); } //***************************************************** // Определяем цвет заливки в ворде для первых 3-х фигур //***************************************************** with(shpCanvas1(1).Fill){ ForeColor.RGB = rgbToHex(0,0,128); Visible = true; } with(shpCanvas1(2).Fill){ ForeColor.RGB = rgbToHex(128,0,93); Visible = true; } with(shpCanvas1(3).Fill){ ForeColor.RGB = rgbToHex(128,102,0); Visible = true; } //-------------------------------------------------------------------------------- var iCount6; // убрать заливку текста в ворде iCount6 = 10; for(i = 1; i<=7; i++){ shpCanvas1.AddShape(101, iCount6, 70, 50, 50); iCount6 += 80; } iCount6 = 1; for(i = 4; i<=10; i++){ with(shpCanvas1(i).Fill){ OneColorGradient(iCount6, 2, 0); ForeColor.RGB = rgbToHex(50 + iCount6*20,10 + iCount6*20,255); Visible = true; } iCount6 ++; } //-------------------------------------------------------------------------------- var iCount7; iCount7 = 10; for(i = 1; i<=7; i++){ shpCanvas1.AddShape(101, iCount7, 130, 50, 50); iCount7 += 80; } iCount7 = 1; for(i = 11; i<=17; i++){ with(shpCanvas1(i).Fill){ TwoColorGradient(iCount7, 2); BackColor.RGB = rgbToHex(275 - iCount7*20 ,0,0); ForeColor.RGB = rgbToHex(50 + iCount7*20,0,255); Visible = true; } iCount7 ++; } //-------------------------------------------------------------------------------- var iCount8; iCount8 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount8, 200, 40, 40); iCount8 += 45; } iCount8 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount8, 250, 40, 40); // как убрать заливку в ворде iCount8 += 45; } iCount8 = 1; for(i = 18; i<=41; i++){ with(shpCanvas1(i).Fill){ PresetGradient(3, 2, iCount8); Visible = true; } iCount8 ++; } //-------------------------------------------------------------------------------- var iCount9; iCount9 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount9, 310, 40, 40); iCount9 += 45; } iCount9 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount9, 360, 40, 40); iCount9 += 45; } iCount9 = 1; for(i = 42; i<=65; i++){ with(shpCanvas1(i).Fill){ PresetTextured(iCount9); Visible = true; } iCount9 ++; } //-------------------------------------------------------------------------------- var iCount10; iCount10 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount10, 420, 40, 40); iCount10 += 45; } iCount10 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount10, 470, 40, 40); iCount10 += 45; } iCount10 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount10, 520, 40, 40); iCount10 += 45; } var iCount11; iCount11 = 10; for(i = 1; i<=12; i++){ shpCanvas1.AddShape(1, iCount11, 570, 40, 40); iCount11 += 45; } iCount11 = 1 for(i =66; i<=113; i++){ with(shpCanvas1(i).Fill){ ForeColor.RGB = rgbToHex(0,153,253); Patterned(iCount11); Visible = true; } iCount11 ++ } //***************************************************** // Функция преобразования RGB цвета в // десятичное значение //***************************************************** как сделать заливку в ворде function rgbToHex (r, g, b){ r = r.toString(16); g = g.toString(16); b = b.toString(16); if (r.length == 1) r = '0' + r; if (g.length == 1) g = '0' + g; if (b.length == 1) b = '0' + b; myStr = (b + g + r).toUpperCase() return parseInt("0x".concat(myStr)) } |
Тут я привел два примера программного кода на языке vbscript и jscript, логика двух сценариев одинакова: происходит создание нового документа Word, а далее следует добавление различных фигур, к ним применяется заливка Word с различными параметрами. Стоит обратить внимание, что для сценария на языке jscript мне пришлось добавить функцию rgbToHex, которая выполняет аналогичные действия, что и функция RGB в языке VBScript или VBA. Дело в том, что язык Jscript не располагает встроенной функцией, которая бы позволила указывать три компонента нужного цвета.