30.07.2008, 20:21 | #1 |
Участник
|
COM Word и font.bold(true)
Есть шаблон. В нём таблица. Создание и заполнение строк этой таблицы работает без проблем.
В одну из ячеек нужно записать запись типа: Country: Russia. То есть часть текста должна быть bold, а другая часть нет. Как такого добиться??? PHP код:
Если после вставки части текста пытаться PHP код:
Можно по идеи в другом темплейте сделать две букмарки - одна жирная, другая нет, и потом данный документ вставлять в ячейку. Но изза одной строчки целый темплейт инициализировать и вставлять как то нехочется... Как такая проблема решается???????????? Заранее спасибо Какие есть варианты?? |
|
31.07.2008, 01:19 | #2 |
Участник
|
Вот запись макроса из Excel:
X++: With ActiveCell.Characters(Start:=1, Length:=8).Font .Name = "Calibri" .FontStyle = "??????????" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With |
|
31.07.2008, 13:49 | #3 |
Участник
|
Сенкс - получилось
X++: cell = table.cell(row, column); range = cell.range(); range.bold(false); chars = range.characters(); for(i = 1; i <= strlen(Name); i++) { char = chars.item(i); char.bold(true); } |
|
31.07.2008, 14:23 | #4 |
Moderator
|
Чтобы посимвольно не перебирать (а то мало ли какие длинные подстроки для болдирования предстоят в будущем), можно еще как-то вот так:
Код: Sub MSWord_VBA_Macro() Dim doc As Document Dim rngCell As Range Dim rngWord As Range Set doc = Application.ActiveDocument Set rngCell = doc.Tables(1).Cell(2, 3).Range Set rngWord = doc.Range(rngCell.Start, rngCell.Start + Len("Country:")) rngWord.Bold = True End Sub Код: Sub MSWord_VBA_Macro_2() Dim rng As Range Set rng = ActiveDocument.Tables(1).Cell(2, 3).Range rng.SetRange rng.Start, rng.Start + Len("Country:") rng.Bold = True End Sub |
|
31.07.2008, 15:04 | #5 |
Участник
|
И сново получилось ))
X++: cell = table.cell(rowCount, 1); range = cell.range(); range.bold(false); rangePart = doc.range(range.start(), range.start() + strlen(Name)); rangePart.bold(true); |
|
31.07.2008, 23:40 | #6 |
Moderator
|
А вот еще хорошее решение, когда не нужно вычислять длину слова и можно комфортно заболдить "Country:" в произвольной фразе типа "Our SuperCountry: Russia":
Код: Sub MSWord_VBA_Macro_3() Dim rng As Range Set rng = ActiveDocument.Tables(1).Cell(2, 3).Range rng.Find.Replacement.Font.Bold = True rng.Find.Execute "Country:", True, True, False, False, False, True, wdFindStop, True, "Country:", wdReplaceOne End Sub Код: FindText = "Country:" MatchCase = True MatchWholeWord = True MatchWildcards = False MatchSoundsLike = False MatchAllWordForms = False Forward = True Wrap = 0 (константа wdFindStop) Format = True ReplaceWith = "Country:" Replace = 1 (константа wdReplaceOne) |
|