2012-05-01 30 views
7

Tôi đang cố gắng để thay thế cho viên đạn của một danh sách trong tài liệu word với dấu gạch ngang, về cơ bản chỉ là "biểu tượng trả lại" được thay thế, tức làThay đạn với dấu gạch ngang trong một tài liệu Word

Thay đạn từ bên dưới danh sách:

  • đây là một mục danh sách

  • đây là một danh sách mục

  • chưa một mục

với dấu gạch ngang:

- đây là một mục danh sách

- đây là một danh sách mục

- nhưng mục khác

Tôi sẽ làm điều này bằng cách sử dụng ActiveX trong Delphi, nhưng mã VB cũng sẽ làm, cảm ơn bạn!

Trả lời

5

Trong Delphi mã:

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; 

hiện nay NẾU đang kiểm tra nếu nó thực sự là một viên đạn • wih một •

Nếu bạn không cần kiểm tra này, bình luận dòng này (nếu ...) và bỏ ghi chú kế tiếp ...

+0

+1 cảm ơn bạn rất nhiều, vẫn không nhìn vào điều này, nhưng nếu mã của bạn hoạt động ra khỏi hộp, tôi sẽ chấp nhận điều này như là câu trả lời! (: – ComputerSaysNo

+0

Tôi đã thử nghiệm nó với Delphi XE2 & Word 2010 ... vì vậy, điều này sẽ làm việc cho bạn quá ...; o) – Whiler

+0

cảm ơn bạn đã nỗ lực thêm để cung cấp mã delphi, tôi đã chấp nhận câu trả lời của bạn vì nỗ lực thêm. – ComputerSaysNo

6

Đây có phải là những gì bạn đang cố gắng không?

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 

SNAPSHOT

enter image description here

+0

+1 và được chấp nhận, cảm ơn bạn rất nhiều! – ComputerSaysNo

+0

+1 mã độc đáo. – brettdj

4

Một vĩ mô mà không được công việc ...

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

Tôi nghĩ rằng đây là một giải pháp tốt hơn và mạnh mẽ hơn nhiều. Trước đây có vẻ như nó chỉ là kết quả của việc ghi macro, và sẽ không hoạt động trên nhiều danh sách hoặc máy với một tập hợp các mẫu danh sách khác nhau. – Alain

+0

+1 cảm ơn bạn đã trả lời – ComputerSaysNo

+1

@DorinDuminica: Tôi không biết nếu bạn cần * chỉ * thay thế * dấu * bằng dấu gạch ngang ... nếu có, bạn cần phải thêm kiểm tra thứ hai để kiểm tra xem ký tự hiện tại là: .NumberFormat = ChrW (61623) AND .ont.Name = "Biểu tượng" – Whiler

Các vấn đề liên quan