2012-05-01 3 views
7

Я пытаюсь заменить пули списка в текстовом документе с тиром, в основном только «оказанный значок», чтобы заменить, т.е.Заменить пули с прочерками в документе Word,

Заменить пули из ниже списка:

  • это вещь

  • список это еще один элемент списка

  • еще один пункт

с прочерками:

- это элемент списка

- это еще один элемент

список - еще один элемент

Я собираюсь сделать это, используя ActiveX в Delphi, но код VB также сделает, спасибо!

ответ

5

В Delphi код:

uses ..., ComObj; 

const 
    wdListNumberStyleBullet = 23; 
var 
    vMSWord      : variant; 
    Doc       : Variant; 
    oListTemplate    : Variant; 
    oListLevel     : Variant; 
    iLoopTemplates, iMaxTemplates: Integer; 
    iLoopLevels, iMaxLevels  : Integer; 
begin 
    try 
    vMSWord   := GetActiveOleObject('Word.Application'); 
    vMSWord.Visible := True; 
    Doc    := vMSWord.ActiveDocument; 
    iMaxTemplates := Doc.ListTemplates.Count; 
    for iLoopTemplates := 1 to iMaxTemplates do 
    begin 
     oListTemplate := Doc.ListTemplates.Item(iLoopTemplates); 
     iMaxLevels := oListTemplate.ListLevels.Count; 
     for iLoopLevels := 1 to iMaxLevels do 
     begin 
     oListLevel := oListTemplate.ListLevels.Item(iLoopLevels); 
     if  (oListLevel.NumberStyle = wdListNumberStyleBullet) 
      and (oListLevel.NumberFormat = UTF8String(#61623)) 
      and (oListLevel.Font.Name = 'Symbol') then 
//  if (oListLevel.NumberStyle = wdListNumberStyleBullet) then 
     begin 
      oListLevel.NumberFormat := UTF8String('-'); 
      oListLevel.Font.Name := 'Arial'; 
     end; 
     end; 
    end; 
    except 
    ShowMessage('Open a Word document before running this method'); 
    end; 

Ток IF проверяет, если это действительно • пуля Жека •

Если вам не нужен этот чек, закомментировать эту строку (если ...) и раскомментируйте следующую ...

+0

+1 Большое вам спасибо, до сих пор не смотрел на это, но если ваш код работает из коробки, я буду принимать это как ответ! (: – ComputerSaysNo

+0

Я тестировал его с помощью Delphi XE2 и Word 2010 ... так что это тоже сработает для вас ...; o) – Whiler

+0

благодарим вас за дополнительные усилия по предоставлению кода delphi, я принял ваш ответ из-за дополнительных усилий. – ComputerSaysNo

6

Это то, что вы пытаетесь?

Option Explicit 

'~~> Select the relevant range before running this code 
Sub Sample() 
    With ListGalleries(wdBulletGallery).ListTemplates(1).ListLevels(1) 
     .NumberFormat = ChrW(61485) 
     .TrailingCharacter = wdTrailingTab 
     .NumberStyle = wdListNumberStyleBullet 
     .NumberPosition = InchesToPoints(0.25) 
     .Alignment = wdListLevelAlignLeft 
     .TextPosition = InchesToPoints(0.5) 
     .ResetOnHigher = 0 
     .StartAt = 1 
     .Font.Name = "Symbol" 
     .LinkedStyle = "" 
    End With 
    ListGalleries(wdBulletGallery).ListTemplates(1).Name = "" 

    Selection.Range.ListFormat.ApplyListTemplateWithLevel ListTemplate:= _ 
    ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:= _ 
    False, ApplyTo:=wdListApplyToSelection, DefaultListBehavior:= _ 
    wdWord10ListBehavior 
End Sub 

СНАПШОТ

enter image description here

+0

+1 и принято, большое спасибо, сэр! – ComputerSaysNo

+0

+1 красиво закодирован. – brettdj

4

Макрос, который делает работу ...

Dim oListTemplate As ListTemplate 
Dim oListLevel As ListLevel 

For Each oListTemplate In ActiveDocument.ListTemplates 
    For Each oListLevel In oListTemplate.ListLevels 
     If oListLevel.NumberStyle = wdListNumberStyleBullet Then 
      With oListLevel 
       .NumberFormat = "-" 
       .Font.Name = "Arial" 
      End With 
     End If 
    Next oListLevel 
Next oListTemplate 
+0

Я думаю, что это намного лучшее и более надежное решение. Первое похоже, что это результат записи макроса и не будет работать с несколькими списками или машинами с другим набором шаблонов списков. – Alain

+0

+1 Благодарю вас за ответ – ComputerSaysNo

+1

@DorinDuminica: я не знаю, нужно ли вам * только * заменить * маркеры * на тире ... Если да, вам нужно добавить второй тест, чтобы проверить, является ли текущий символ is: .NumberFormat = ChrW (61623) AND .Font.Name = "Symbol" – Whiler

Смежные вопросы