2012-05-01 17 views
7

che sto cercando di sostituire i proiettili di una lista in un documento di Word con i trattini, in pratica solo l'icona "resa" da sostituire, ovveroSostituire proiettili con trattini in un documento Word

Sostituire proiettili dalla lista qui sotto:

  • questo è un elemento della lista

  • questo è un altro elemento della lista

  • ancora un altro elemento

con i trattini:

- questo è un elemento della lista

- questo è un altro elemento della lista

- ancora un altro elemento

Lo farò usando ActiveX in Delphi, ma farebbe anche il codice VB, grazie!

risposta

5

Entro Delphi codice:

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; 

L'attuale SE sta controllando se è davvero un • proiettile wih un •

Se non avete bisogno di questo controllo, commentare questa linea (se ...) e rimuovere il commento successivo ...

+0

+1 grazie mille, ancora non ho esaminato questo, ma se il tuo codice funziona fuori dalla scatola, accetterò questa come risposta! (: – ComputerSaysNo

+0

L'ho provato con Delphi XE2 e Word 2010 ... quindi, dovrebbe funzionare anche per te ...; o) – Whiler

+0

grazie per lo sforzo extra di fornire il codice delphi, ho accettato la tua risposta a causa dello sforzo extra. – ComputerSaysNo

6

È questo che stai provando?

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 

ISTANTANEA

enter image description here

+0

+1 e accettato, grazie mille signore! – ComputerSaysNo

+0

+1 codificato piacevolmente. – brettdj

4

Una macro che fa il lavoro ...

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

Penso che questa sia una soluzione molto migliore e molto più robusta. Il primo sembra che sia solo il risultato della registrazione di una macro e non funzionerà su più elenchi o macchine con un diverso set di modelli di elenchi. – Alain

+0

+1 grazie per la risposta – ComputerSaysNo

+1

@DorinDuminica: non so se è necessario * solo * sostituire * pallottole * con trattini ... se sì, è necessario aggiungere un secondo test per verificare se il carattere corrente è: .NumberFormat = ChrW (61623) AND .Font.Name = "Simbolo" – Whiler