My program needs to generate highly simple reports in the Office .doc
format (non-XML), and certain parts of the document need to be bold. I’ve been looking at the documentation for defining ranges, which is partly what my code derives from at the moment. This part of the documentation doesn’t really give me enough details to implement this in general in my document. Here is my code so far:
object miss = System.Reflection.Missing.Value;
object Visible = true;
object start = 0;
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Document report = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss);
String header = "Bold Header: ";
Range headerRange = report.Range(ref start, ref miss);
headerRange.Text = header;
headerRange.Font.Bold = -1;
String data = "Information underneath the header";
Range dataRange = report.Range();
dataRange.Text = data;
dataRange.Font.Bold = 1;
object filename = "test.doc";
report.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument;
object routeDocument = true;
WordApp.Visible = true;
This produces a word document with only the text **Information underneath the header**
. This is a simple example.
My document won’t get much more complicated than this, but I’m hoping to generate Word documents based on variable amounts of data, with bold text and non-bold text dispersed throughout.
Приветствую всех читателей блога scriptcoding.ru. В этой публикации мы рассмотрим объект Font, который позволяет задать основные параметры шрифта в Word.
В прошлых статьях мы научились создавать приложение Word (смотрите «Word.Application«), новый документ (смотрите «Word.Documents») и также рассмотрели процесс добавления заданного текста в созданный документ с помощью объекта Selection (смотрите «Word.Selection«). Теперь настало время познакомиться с объектом Font, доступ к которому можно получить через одноименное свойство. Фактически, объект Font позволяет задать параметры форматирования шрифта.
Содержание
- Объект Font — основные параметры шрифта в Word
- Свойства класса Font – параметры форматирования шрифта
- Методы объекта Font – параметры форматирования шрифта в Word
Объект Font — основные параметры шрифта в Word
Сам по себе класс Font довольно прост, так как все свойства и методы интуитивно понятны. Сами свойства я разбил на несколько категорий в зависимости от их типа. И так, приступим…
Свойства класса Font – параметры форматирования шрифта
Свойства, которые доступны для чтения и для записи, принимают логические значения TRUE или FALSE. При установлении значения TRUE свойства позволяют отформатировать выделенный текст: сделать жирным, курсивом, подчеркнутым и так далее.
AllCaps– Все прописные.
SmallCaps– Малые прописные.
Bold– Жирный шрифт в Word, само свойство возвращает True, False или wdUndefined (смесь True или False)
DoubleStrikeThrough– Двойное зачеркивание.
StrikeThrough– Одинарное зачеркивание.
Emboss– Приподнятый.
Engrave– Утопленный.
Italic– Курсив.
Outline– Контур.
Shadow– С тенью.
Subscript– Подстрочный знак.
Superscript– Надстрочный знак.
Свойства, которые позволяют задать или получить значение, заданное определенной константой (если происходит выполнение кода в редакторе VBA то можно использовать не целое число, и именованное значение).
ColorIndex– Параметры цвета текста шрифта в Word, значения константы WdColorIndex:
- wdAuto — 0 — Автоматический цвет. По умолчанию, обычно черный цвет.
- wdByAuthor — -1 — Цвет определяется автором документа
- wdNoHighlight — 0 — Удаляет подсветку.
- wdBlack — 1 – черный.
- wdBlue — 2 – синий.
- wdTurquoise — 3 – бирюзовый.
- wdBrightGreen — 4 — ярко-зеленый.
- wdPink — 5 – розовый.
- wdRed — 6 – красный.
- wdYellow — 7 – желтый.
- wdWhite — 8 – белый.
- wdDarkBlue — 9 — темно-синий.
- wdTeal — 10 – бирюзовый.
- wdGreen — 11 – зеленый.
- wdViolet — 12 – фиолетовый.
- wdDarkRed — 13 — темно-красный.
- wdDarkYellow — 14 — темно-желтый.
- wdGray50 — 15 — тень 50 серого.
- wdGray25 — 16 — тень 25 серого.
Underline— Тип подчеркивания, заданный значением константы WdUnderline:
- wdUnderlineNone — 0 — нет подчеркивания.
- wdUnderlineSingle — 1 — одна линия, по умолчанию.
- wdUnderlineWords — 2 — подчеркнет только отдельные слова.
- wdUnderlineDouble — 3 — двойная линия.
- wdUnderlineDotted — 4 – точки.
- wdUnderlineThick — 6 — единая жирная линия.
- wdUnderlineDash — 7 – тире.
- wdUnderlineDotDash — 9 — чередующиеся точки и тире.
- wdUnderlineDotDotDash — 10 – чередующиеся две точки и тире.
- wdUnderlineWavy — 11 — одна волнистая линия.
- wdUnderlineDottedHeavy — 20 – жирные точки.
- wdUnderlineDashHeavy — 23 — жирные тире.
- wdUnderlineDotDashHeavy — 25 — чередующиеся жирные точки и жирные тире.
- wdUnderlineDotDotDashHeavy — 26 — чередующиеся жирные две точки и тире.
- wdUnderlineWavyHeavy — 27 — жирная волнистая линия.
- wdUnderlineDashLong — 39 — длинное тире.
- wdUnderlineWavyDouble — 43 — двойная волнистая линия.
- wdUnderlineDashLongHeavy — 55 — длинное жирное тире.
UnderlineColor— Возвращает или устанавливает 24-битный цвет подчеркивания, содержит значение константы WdColor:
- wdColorAqua — 13421619 — аква
- wdColorAutomatic — 16777216 — Автоматическая цвет. По умолчанию, обычно черный цвет.
- wdColorBlack — 0 – черный.
- wdColorBlue — 16711680 – синий.
- wdColorBlueGray — 10053222 — сине-серый.
- wdColorBrightGreen — 65280 — ярко-зеленый.
- wdColorBrown — 13209 – коричневый.
- wdColorDarkBlue — 8388608 — темно-синий.
- wdColorDarkGreen — 13056 — темно-зеленый.
- wdColorDarkRed — 128 — темно-красный.
- wdColorDarkTeal — 6697728 – темно-бирюзовый.
- wdColorDarkYellow — 32896 — темно-желтый.
- wdColorGold — 52479 – золотистый.
- wdColorGray05 — 15987699 — тень05серого.
- wdColorGray10 — 15132390 — тень10серого.
- wdColorGray125 — 14737632 — тень125серого.
- wdColorGray15 — 14277081 — тень15серого.
- wdColorGray20 — 13421772 — тень20серого.
- wdColorGray25 — 12632256 — тень25серого.
- wdColorGray30 — 11776947 — тень30серого.
- wdColorGray35 — 10921638 — тень35 серого.
- wdColorGray375 — 10526880 — тень375серого.
- wdColorGray40 — 10066329 — тень40серого.
- wdColorGray45 — 9211020 — тень45серого.
- wdColorGray50 — 8421504 — тень50серого.
- wdColorGray55 — 7566195 — тень55серого.
- wdColorGray60 — 6710886 — тень60серого.
- wdColorGray625 — 6316128 — тень625серого.
- wdColorGray65 — 5855577 — тень65серого.
- wdColorGray70 — 5000268 — тень70серого.
- wdColorGray75 — 4210752 — тень75серого.
- wdColorGray80 — 3355443 — тень80серого.
- wdColorGray85 — 2500134 — тень85серого.
- wdColorGray875 — 2105376 — тень875серого.
- wdColorGray90 — 1644825 — тень90серого.
- wdColorGray95 — 789516 — тень95серого.
- wdColorGreen — 32768 – зеленый.
- wdColorIndigo — 10040115 – синий.
- wdColorLavender — 16751052 – бледно-лиловый.
- wdColorLightBlue — 16737843 — светло-синий.
- wdColorLightGreen — 13434828 — светло-зеленый.
- wdColorLightOrange — 39423 — светло-оранжевый.
- wdColorLightTurquoise — 16777164 – светло-бирюзовый.
- wdColorLightYellow — 10092543 — светло-желтый.
- wdColorLime — 52377 – липовый.
- wdColorOliveGreen — 13107 – оливково-зеленый.
- wdColorOrange — 26367 – оранжевый.
- wdColorPaleBlue — 16764057 — бледно-голубой.
- wdColorPink — 16711935 – розовый.
- wdColorPlum — 6697881 — темно-фиолетовый.
- wdColorRed — 255 – красный.
- wdColorRose — 13408767 – розовый.
- wdColorSeaGreen — 6723891 – зеленый.
- wdColorSkyBlue — 16763904 — небесно-голубой.
- wdColorTan — 10079487 — желтовато-коричневый.
- wdColorTeal — 8421376 — бирюзовый.
- wdColorTurquoise — 16776960 — Бирюзовый цвет.
- wdColorViolet — 8388736 – фиолетовый.
- wdColorWhite — 16777215 – белый.
- wdColorYellow — 65535 – желтый.
DiacriticColor— Как ColorIndex, позволяет задать параметры цвета текста шрифта в word, принимает значения константы WdColor.
Прочие свойства, которые позволяют получить или задать такие основные параметры шрифта в Word, как размер, имя и так далее.
Position– Позволяет получить или задать смещение текста в пунктах относительно базовой линии.
Scaling— Возвращает или устанавливает процент масштаба, применяемого к шрифтом.
Spacing— Возвращает или задает расстояние в пунктах между символами. Считывание / запись
Size– Позволяет получить или установить параметры форматирования шрифта в Word: размер в пунктах.
Name— Возвращает или задает имя.
Методы объекта Font – параметры форматирования шрифта в Word
Grow() — Увеличивает размер на один пункт.
Shrink() — Уменьшает размер на один пункт.
Reset() – Полностью очищает параметры форматирования текст шрифта в Word.
Хорошо, основные свойства и методы мы рассмотрели, теперь настало время приступить к программированию, я напишу два примера под Wndows Script Host. Логика проста: происходит создание нового документа Word, далее происходит вставка текста с помощью объекта Selection, после происходит выделение различных диапазонов текста и их форматирование – основные параметры шрифта в Word.
Пример на VBScript
' ------------------------------------------------ ' Объект Word Font ' Основные параметры шрифта в Word ' Font.vbs ' ------------------------------------------------ Option Explicit dim oWord, oDoc, oSel, SelText, i, oFon, sel ' ссылка на объект Word Application Set oWord = CreateObject("Word.Application") ' ссылка на колекцию Documents Set oDoc = oWord.Documents ' создаем новый документ основные параметры шрифта в Word oDoc.Add() ' ссылка на объект Selection Set oSel = oWord.Selection ' ссылка на объект Font Set oFon = oSel.Font ' делаем документ видимым oWord.Visible = true With oSel For i = 0 To 100 ' вставляем текст .Text = "параметры форматирования шрифта в Word" ' Перемещаем курсор в конец текста .EndOf ' вставляем параграф .TypeParagraph Next End With '------------------------------------------------------------- ' Форматируем текст в документе Word '------------------------------------------------------------- With oSel .SetRange 0,50 oFon.Bold = true .SetRange 50,100 oFon.DoubleStrikeThrough = true .SetRange 100,150 oFon.Emboss = true .SetRange 150,200 oFon.Engrave=true .SetRange 200,250 oFon.Italic = true .SetRange 250,300 oFon.Outline = true .SetRange 300,350 oFon.Shadow = true .SetRange 350,400 oFon.SmallCaps = true .SetRange 400,450 oFon.Subscript = true .SetRange 450,500 oFon.Superscript = true .SetRange 500,550 oFon.StrikeThrough = true .SetRange 550,600 oFon.Hidden = true .SetRange 600,650 oFon.Name = "Times New Roman" ' основные параметры шрифта Word .SetRange 650,700 oFon.Position = 50 .SetRange 750,800 oFon.Scaling = 120 .SetRange 800,850 oFon.Size = 30 .SetRange 850,900 oFon.Spacing = 20 .SetRange 900,950 oFon.Underline = 10 oFon.UnderlineColor=8421376 End With With oFon sel = 950 ' меняем цвет для разных фрагментов for i=1 to 16 sel = 950+(i*200) oSel.SetRange sel+100, sel + 200 .ColorIndex = i sel = sel + 200 next ' делаем задержку в 3 секунды Wscript.Sleep 3000 ' выделяем весь текст oDoc(1).Select Wscript.Sleep 3000 ' очищаем параметры форматирования текста шрифта в Word .Reset ' устанавливаем верхний регистр .AllCaps = true Wscript.Sleep 3000 ' устанавливаем нижний регистр .SmallCaps = true End With
Пример на JScript
// ------------------------------------------------ // Объект Word Font // Основные параметры шрифта в Word // Font.js // ------------------------------------------------ var oWord1, oDoc1, oSel1, SelText, i, oFon1, sel1; // ссылка на объект Word Application oWord1 = WScript.CreateObject("Word.Application"); // ссылка на коллекцию Documents oDoc1 = oWord1.Documents; // создаем новый документ параметры форматирования шрифта oDoc1.Add(); // ссылка на объект Selection oSel1 = oWord1.Selection; // ссылка на объект Font oFon1 = oSel1.Font; // делаем документ видимым oWord1.Visible = true; with (oSel1){ for(i = 0; i<=100; i++){ // вставляем текст Text = "параметры форматирования шрифта в Word"; // Перемещаем курсор в конец текста EndOf(); // вставляем параграф TypeParagraph(); } } //-------------------------------------------------------- // Форматируем текст в документе Word //-------------------------------------------------------- with (oSel1){ SetRange(0,50); oFon1.Bold = true; SetRange(50,100); oFon1.DoubleStrikeThrough = true; SetRange(100,150); oFon1.Emboss = true; SetRange(150,200); oFon1.Engrave=true; SetRange(200,250); oFon1.Italic = true; // параметры форматирования шрифта SetRange(250,300); oFon1.Outline = true; SetRange(300,350); oFon1.Shadow = true; SetRange(350,400); oFon1.SmallCaps = true; SetRange(400,450); oFon1.Subscript = true; SetRange(450,500); oFon1.Superscript = true; SetRange(500,550); oFon1.StrikeThrough = true; SetRange(550,600); oFon1.Hidden = true; SetRange(600,650); oFon1.Name = "Times New Roman"; SetRange(650,700); oFon1.Position = 50; SetRange(750,800); oFon1.Scaling = 120; SetRange(800,850); oFon1.Size = 30; SetRange(850,900); oFon1.Spacing = 20; SetRange(900,950); oFon1.Underline = 10; oFon1.UnderlineColor=8421376; } with (oFon1){ sel1 = 950; // меняем цвет для разных фрагментов for(i = 0; i<=16; i++){ sel1 = 950+(i*200); oSel1.SetRange(sel1+100, sel1 + 200); ColorIndex = i; sel1 += 200; } // делаем задержку в 3 секунды WScript.Sleep(3000) // выделяем весь текст oDoc1(1).Select(); WScript.Sleep(3000); // очищаем параметры форматирования текста шрифта в Word Reset(); // устанавливаем верхний регистр AllCaps = true; WScript.Sleep(3000) // устанавливаем нижний регистр SmallCaps = true; }
Хорошо, теперь давайте разберем данные примеры. Логика работы программного кода одинакова, сразу после создания документа происходит несколько этапов:
Этап первый – в цикле for (смотрите синтаксис для языка vbscript — «Урок 6 по VBScript: Циклы for…next и for each…next» и jscript — «Урок 9 по JScript — оператор цикла for«) происходит вставка текста, с учетом параграфа и перевода строки.
Этап второй – Тут в блоке with содержится длинная череда из выделения фрагментов, для которых задаются основные параметры шрифта в Word: размер, отступы, имя и так далее.
Этап третий – Снова следует блок with, в теле которого выборочно происходит смена цвета для выделенных фрагментов. Далее с задержкой в 3 секунды (смотрите статью «Объект WScript — методы sleep, quit и echo и 8 свойств«) сбрасываются параметры форматирования шрифта и меняется регистр символов.
I’m creating a word document programatically using VBA.
1) I have a a string with value — «Strategy». I want to make it bold and to be displayed in the word document.
I have tried this below, but the text is never changed:
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
Dim strategy As String
strategy = "STRATEGY"
Dim objWdRange As Word.Range
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Open("C:Program FilesDailyStrategy.doc")
With wrdDoc
If wrdDoc.Bookmarks.Exists("MarketCommentry") Then
wrdDoc.Bookmarks("MarketCommentry").Range.Text = strategy
Set objWdRange = wrdDoc.Content
With objWdRange.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "STRATEGY"
'Make found bold and italic
With .Replacement.Font
.Bold = True
.Italic = True
End With
.Execute Replace:=wdReplaceAll
End With
End With
End If
regards
Kojo
asked Jan 7, 2010 at 11:50
KojofKojof
4197 gold badges15 silver badges23 bronze badges
EDIT:: I should have better tried in the VBA debugger first, which I did now. This one should work:
With wrdDoc
Set objWdRange = wrdDoc.Content
With objWdRange.Find
.ClearFormatting
.Text = "STRATEGY"
.Execute Replace:=wdReplaceNone
End With
End With
If objWdRange.Find.Found Then
'Make found bold and italic
With objWdRange.Font
.Bold = True
.Italic = True
End With
End If
answered Jan 7, 2010 at 12:00
Doc BrownDoc Brown
19.6k7 gold badges52 silver badges88 bronze badges
5
24.11.10 — 10:05
Есть задача в Word документе программно создать текст с форматированием. Форматирование следующее: в таблице 2 колонки, в правой колонке в одной строке необходимо вставить последовательно текст: Строка жирным начертанием, Строка обычного начертания но с маркером, Строка жирним начертанием с другим маркером, Пустая строка.
Подскажите, пожалуйста. Может, примеры как-нибудь есть?
1 — 24.11.10 — 10:08
а в чем проблема?
2 — 24.11.10 — 10:10
так подскажите — ка это сделать, если сталкивались?
3 — 24.11.10 — 10:11
я очень извиняюсь — это не 7.7., это 8. Промахнулась в теме..
4 — 24.11.10 — 10:15
(2) сорри, не увидел слова «программно»
5 — 24.11.10 — 10:24
(0) открываешь ворд включаешь запись макроса , делаешь то что тебе надо что б программа делала , берех код из макроса и адоптируешь его под 1с . как то так
6 — 24.11.10 — 10:28
сложности в адаптации )))
если не сложно — можно текст примера? ))
7 — 24.11.10 — 10:33
ворд = СоздатьОбъект(«Word.Application»);
ворд.Documents.Open(СокрЛП(КаталогВременныхФайлов()+ВрФайл));
ворд.Selection.EndKey(6); ворд.Selection.Font.Name=»Arial»;
ворд.Selection.Font.Size=12;
ворд.Selection.Font.Bold=1;
ворд.Selection.TypeText(» («+ТЗ.Группа.Код+» ) «+ТЗ.Группа.Наименование+» — «+ТЗ.Таб.КоличествоСтрок()+» видов.»);
8 — 24.11.10 — 10:37
как в одной ячейке таблицы последовательно вставить строчки:
1. Жирный текст (без маркера)
2. текст с маркером (нежирный)
3. текст без маркера (нежирный)
9 — 24.11.10 — 10:47
(8) так же как и в ворде
10 — 24.11.10 — 10:50
как это сделать в ворде — это понятно.
а вот как это сделать в 1с?
программно…
11 — 24.11.10 — 10:52
(10)запись макроса включи, тебе ворд расскажет как он это делает
12 — 24.11.10 — 10:54
говорю ж — проблема с адаптацией.
но если вам это не трудно….
13 — 24.11.10 — 10:56
(12)покажи что у тебя в макросе
14 — 24.11.10 — 11:38
Selection.MoveLeft Unit:=wdCharacter, Count:=13, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.HomeKey Unit:=wdLine
Selection.EndKey Unit:=wdLine
Selection.TypeParagraph
With ListGalleries(wdBulletGallery).ListTemplates(1).ListLevels(1)
.NumberFormat = ChrW(61623)
.TrailingCharacter = wdTrailingTab
.NumberStyle = wdListNumberStyleBullet
.NumberPosition = CentimetersToPoints(0.63)
.Alignment = wdListLevelAlignLeft
.TextPosition = CentimetersToPoints(1.27)
.TabPosition = wdUndefined
.ResetOnHigher = 0
.StartAt = 1
With .Font
.Bold = wdUndefined
.Italic = wdUndefined
.StrikeThrough = wdUndefined
.Subscript = wdUndefined
.Superscript = wdUndefined
.Shadow = wdUndefined
.Outline = wdUndefined
.Emboss = wdUndefined
.Engrave = wdUndefined
.AllCaps = wdUndefined
.Hidden = wdUndefined
.Underline = wdUndefined
.Color = wdUndefined
.Size = wdUndefined
.Animation = wdUndefined
.DoubleStrikeThrough = wdUndefined
.Name = «Symbol»
End With
.LinkedStyle = «»
End With
ListGalleries(wdBulletGallery).ListTemplates(1).Name = «»
Selection.Range.ListFormat.ApplyListTemplateWithLevel ListTemplate:= _
ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:= _
False, ApplyTo:=wdListApplyToWholeList, DefaultListBehavior:= _
wdWord10ListBehavior
Selection.Font.Bold = wdToggle
Selection.TypeText Text:=»оирроплргпгщрщ»
Selection.TypeParagraph
Selection.TypeBackspace
Selection.TypeParagraph
Selection.TypeBackspace
Selection.TypeParagraph
Selection.Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraph
End Sub
15 — 24.11.10 — 11:40
и где тут вставка маркера?
16 — 24.11.10 — 11:46
(15) в смысле «Жирным»? — Selection.Font.Bold = wdToggle
17 — 24.11.10 — 11:46
+(16) в 1с это будет Selection.Font.Bold = 1;
18 — 24.11.10 — 11:54
Selection.Font.Bold = wdToggle
я так понимаю — что это выделение текста жирным.
а мне нужен маркер — такая штучка в начале строки.
в смысле где тут вставляется маркер?
19 — 24.11.10 — 12:00
(18) не понял что такое раркер . Открываешь новый документ ворд ->Начать запись макроса -> вставляешь свой «маркер» -> Останавливаешь запись макроса-> Смотришь что написано в макросе.
20 — 24.11.10 — 12:00
+(19)раркер=маркер
21 — 24.11.10 — 12:14
макрос — который выше — и есть нужная запись — со вставкой маркера. Только где там конкретно маркер — не разобрать — потому что видимо много действий доя этого делается.
22 — 24.11.10 — 12:15
Маркированный список — знаешь, что такое?
Всякие точечки, ромбики, кружочки — в начале строки маркированного списка — это и есть маркеры.
BuHu
23 — 24.11.10 — 12:18
(22) отсей все что не касается маркера (не создавай таблицы), просто сделай так что б появился маркер
Здесь ответ, который я придумал, позволит вам иметь часть строки жирным шрифтом и регулярной в той же строке.
То, что я делал, было автоматизировано, но то же самое относится, если вы знаете, что делаете. Имейте в виду, что Bold — это только int, нет логического true/false (по какой-то причине).
Как и в случае с Рикардо, я также отправлю код здесь:
private void InsertMultiFormatParagraph(string psText, int piSize, int piSpaceAfter = 10) {
Word.Paragraph para = mdocWord.Content.Paragraphs.Add(ref mobjMissing);
para.Range.Text = psText;
// Explicitly set this to "not bold"
para.Range.Font.Bold = 0;
para.Range.Font.Size = piSize;
para.Format.SpaceAfter = piSpaceAfter;
object objStart = para.Range.Start;
object objEnd = para.Range.Start + psText.IndexOf(":");
Word.Range rngBold = mdocWord.Range(ref objStart, ref objEnd);
rngBold.Bold = 1;
para.Range.InsertParagraphAfter();
}
Очевидно, что если вы пытаетесь отвлечь его еще больше, вы можете добавить параметр для char
или string
, чтобы вы могли изменить то, что используется для установки жирного начала/остановки.
Одно замечание, которое обсуждалось в комментариях другого потока, состояло в том, что по какой-то причине Bold является только int. Для установки этого значения нет значения bool. Это странно, я знаю.
Моя программа должна генерировать очень простые отчеты в Office .doc
формат (не XML), и некоторые части документа должны быть выделены жирным шрифтом. Я искал документацию для определения диапазонов, отчасти это то, из чего мой код извлекается в данный момент. Эта часть документации на самом деле не дает мне достаточно деталей, чтобы реализовать это в моем документе. Вот мой код до сих пор:
object miss = System.Reflection.Missing.Value;
object Visible = true;
object start = 0;
Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application();
Document report = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss);
String header = "Bold Header: ";
Range headerRange = report.Range(ref start, ref miss);
headerRange.Text = header;
headerRange.Font.Bold = -1;
String data = "Information underneath the header";
Range dataRange = report.Range();
dataRange.Text = data;
dataRange.Font.Bold = 1;
object filename = "test.doc";
report.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges;
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument;
object routeDocument = true;
WordApp.Visible = true;
Это создает документ Word только с текстом **Information underneath the header**
, Это простой пример.
Мой документ не станет намного более сложным, чем этот, но я надеюсь создать документы Word на основе переменных объемов данных, с жирным текстом и не жирным текстом, разбросанным по всему.
2012-07-19 15:24
3
ответа
Решение
Вот ответ, который я придумал, который позволит вам иметь часть строки, выделенную жирным шрифтом и регулярную в одной строке.
То, что я делал, было автоматизировано, но то же самое применимо, если вы знаете, что делаете. Имейте также в виду, что Bold — только int, здесь нет логического true/false (по какой-то причине).
Что касается превосходного замечания Рикардо, я также выложу здесь код:
private void InsertMultiFormatParagraph(string psText, int piSize, int piSpaceAfter = 10) {
Word.Paragraph para = mdocWord.Content.Paragraphs.Add(ref mobjMissing);
para.Range.Text = psText;
// Explicitly set this to "not bold"
para.Range.Font.Bold = 0;
para.Range.Font.Size = piSize;
para.Format.SpaceAfter = piSpaceAfter;
object objStart = para.Range.Start;
object objEnd = para.Range.Start + psText.IndexOf(":");
Word.Range rngBold = mdocWord.Range(ref objStart, ref objEnd);
rngBold.Bold = 1;
para.Range.InsertParagraphAfter();
}
Очевидно, что если вы пытаетесь абстрагировать это еще дальше, вы можете добавить параметр для char
или же string
так что вы можете изменить то, что используется для установки жирного пуска / остановки.
Стоит отметить, что в комментариях другой ветки обсуждалось, что по какой-то причине Bold является только int. Там нет значения bool для установки этого. Это странно, я знаю.
2012-07-19 16:49
Вы можете просто использовать объект Paragraph для настройки форматирования различных текстовых блоков. Пример кода, как показано ниже:
object DocumentEndIndex = "\endofdoc";
object endDocument = wordDocument.Bookmarks.get_Item(ref DocumentEndIndex).Range;
Paragraph para = wordDocument.Content.Paragraphs.Add(ref endDocument);
para.Range.Text = text;
para.Range.set_Style(ref headingLevel);
// do format the text with para.Range object as you want
para.Range.InsertParagraphAfter();
Надеюсь это поможет.
2012-07-19 16:43
Это старый вопрос, но, поскольку я столкнулся с той же проблемой, и это не помогло мне для изменений в верхнем или нижнем колонтитуле, но помогло мне понять, как это сделать, вот мое решение:
Word.Paragraph p = c2.Range.Paragraphs.Add(ref missing);
p.Range.Text = "your trip at " + sejour.Location;
SetTextColor(p.Range, Word.WdColor.wdColorWhite,0, p.Range.Text.Length - 1);
SetTextSize(p.Range, (float)14, 0, p.Range.Text.Length - 1);
SetTextSize(p.Range, (float)16, p.Range.Text.Length - 2 - sejour.Location.Length, sejour.Location.Length);
public void SetTextColor( Word.Range range, Microsoft.Office.Interop.Word.WdColor color, int start, int length)
{
Word.Range rng = range;
rng.Start = range.Start + start;
rng.End = range.Start + start + length;
rng.Font.Color = color;
}
public void SetTextSize(Word.Range range, float size, int start, int length)
{
Word.Range rng = range;
rng.Start = range.Start + start;
rng.End = range.Start + start + length;
rng.Font.Size = size;
}
2015-02-20 11:44