Всем привет, с вами автор блога 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 не располагает встроенной функцией, которая бы позволила указывать три компонента нужного цвета.
Спасибо за внимание. Автор блога Владимир Баталий