发表回复 
ahk调用com对象实现对word宏的写入,删除?
2013-01-12, 11 : 02
ahk调用com对象实现对word宏的写入,删除?
[i=s] 本帖最后由 善源 于 2013-1-22 18:13 编辑 [/i]

如何实现调用com对象对word宏的写入,删除?这个参数如何可以得到?望各位老师指点!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-15, 14 : 41
 
为什么没有人登门呢?难道这个问题比较难?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-15, 23 : 46
 
[i=s] 本帖最后由 jony.tw 于 2013-1-16 00:00 编辑 [/i]

用Autohotkey做前台操作VBE是有可能的,Alt-F11可以自Word 開啟VBE
當然VBA本身對這方面的支援是比較完整的,下面這行可以開啟VBE(VBA編輯器)
Application.VBE.MainWindow.Visible = True
代码: (全选)
#F12::
SetTitleMatchMode, 2
DetectHiddenWindows, On  
If WinExist("ahk_class wndclass_desked_gsk")
WinShow  
WinActivate
return
Word文件開啟時,這個代碼Win+F12可以開啟VBE
即然窗口能被找到,用Autohotkey去操作也沒什麼不可能的
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-16, 18 : 22
 
我知道楼主的需求,之前我也和楼主一样想用这种迂回的方式,但随着不断学习,个人感觉应该把原来的宏代码全部改写成ahk代码,这是完全可行的,所用功能应该都能实现,而​且不会在目标文件中留下痕迹,比较直接,楼主可以重新考虑下使用这种方法。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-16, 20 : 15
 
[i=s] 本帖最后由 善源 于 2013-1-16 20:23 编辑 [/i]

4# stirb
兄弟简单直接的切中要害啊,我就是这么想的,宏代码可以直接写成ahk代码?不明白什么意思?具体如何转换呢?word里面的排版功能也可以用ahk搞定?这貌似有点难啊​,主要是没有帮助文件!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-16, 23 : 05
 
英文官網提到的說明就http://msdn.microsoft.com/en-us/library
http://www.autohotkey.com/board/topic/56...y-l/page-3#42 Learning one 那篇
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-16, 23 : 48
 
[i=s] 本帖最后由 stirb 于 2013-1-16 23:49 编辑 [/i]

5# 善源

非常容易转换,不用重写太多,关键是你现在的代码长度也不会长。
至于如何转换,简单来说就是用com接口来控制word,排版那些当然也是能控制的!很多功能你可以看word自带的帮助,应该都找得到。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-17, 18 : 00
 
6# jony.tw
感谢tw提供资料!很好的学习资料。不过跟我的需求还是所不同。非常感谢!帮助开拓思路!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-17, 18 : 07
 
8# 善源
我现在的难题是如何将下面的代码转化为ahk代码!纵观这些代码有很多地方是相同的。希望能得到大家的帮助!代码如下:
代码: (全选)
Sub 宏处理()
     '设置字号
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.WholeStory  '全选
    Selection.ClearFormatting  '清除全文格式
    Selection.Font.Name = "宋体"
    Selection.Font.Size = 14  '设置字号为14号
    '设置行距
    Selection.ParagraphFormat.LineSpacingRule = wdLineSpaceExactly
    Selection.ParagraphFormat.LineSpacing = 25

'全文格式化


ActiveDocument.Content.Find.Execute findtext:=" ", replacewith:="", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:=" ", replacewith:="", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="\(*\)", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="<*>", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="\[*\]", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="\<*\>", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="(*)", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="^p^p^p", replacewith:="^p", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="^p^p", replacewith:="^p", Replace:=wdReplaceAll
'全文格式化介绍

'替换正文开始
ActiveDocument.Content.Find.Execute findtext:="([0-9])。([0-9])", replacewith:="\1.\2", Replace:=wdReplaceAll, MatchWildcards:=True '替换小数点错误
ActiveDocument.Content.Find.Execute findtext:="【", replacewith:="(", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="】", replacewith:=")", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="--[0-9]{1,2}[-/.:月][0-9]{1,2}[日-]-{1,2}", replacewith:="(2012.^&)", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="--([0-9]@[-./::月][0-9日]@)--", replacewith:="\1", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="\(([0-9]{4})([.])([0-9]{1,2})([/月.::-])([0-9]{1,2})*^13", replacewith:="--(\1年\3月\5日)--", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="--(2012", replacewith:="--2012", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="日)----", replacewith:="日----", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="--[0-9]{4}[年][0-9]{1,2}[月][0-9]{1,2}[日]----", replacewith:="(新闻热度:★☆/新闻时间:^&/新闻来源:", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="新闻来源:*--", replacewith:="^&)", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="新闻来源", replacewith:="", Replace:=wdReplaceAll, MatchWildcards:=True
ActiveDocument.Content.Find.Execute findtext:="--^13(", replacewith:="】^&", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="--", replacewith:="", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="[!^13]@】^13", replacewith:="【^&", Replace:=wdReplaceAll, MatchWildcards:=True
'替换正文结束


'段首空2格
    Dim myRange As Word.Range
    Application.ScreenUpdating = False
    Set myRange = IIf(Selection.Type = wdSelectionIP, Word.ActiveDocument.Content, Selection.Range)
    With myRange
        .InsertParagraphBefore
        .Find.Execute "(^13)([! ])", , , True, , , , , , "\1  \2", wdReplaceAll
        .Paragraphs(1).Range.Delete
    End With
    Application.ScreenUpdating = True

'将标题和新闻时间处段首空格清理
ActiveDocument.Content.Find.Execute findtext:="  【", replacewith:="【", Replace:=wdReplaceAll
ActiveDocument.Content.Find.Execute findtext:="  (新闻热度:", replacewith:="(新闻热度:", Replace:=wdReplaceAll


' 改变新闻标题样式
With ActiveDocument.Content.Find
        .ClearFormatting
        With .Replacement
            .ClearFormatting
            .Style = ActiveDocument.Styles(wdStyleHeading4)
            With .Font
                .Name = "黑体"
                .Size = 14
                .Bold = True
                .Color = wdColorIndigo
            End With
            With .ParagraphFormat
                .SpaceBefore = 14
                .SpaceAfter = 0
                .Alignment = wdAlignParagraphLeft
            End With
        End With
        .Execute findtext:="【*】", replacewith:="^&", Replace:=wdReplaceAll, MatchWildcards:=True
    End With
    
' 改变评级、新闻来源、时间样式
With ActiveDocument.Content.Find
        .ClearFormatting
        With .Replacement
            .ClearFormatting
            With .Font
                .Name = "宋体"
                .Size = 10
                '.Bold = True
                .Color = wdColorGray60
            End With
            With .ParagraphFormat
                .SpaceBefore = 0
                .SpaceAfter = 0
                .Alignment = wdAlignParagraphLeft
                .LineSpacingRule = wdLineSpaceSingle '单倍行距
            End With
        End With
        .Execute findtext:="\(新闻热度:*^13", replacewith:="^&", Replace:=wdReplaceAll, MatchWildcards:=True
        ' 取消标题符号
        ActiveDocument.Content.Find.Execute findtext:="【", replacewith:="", Replace:=wdReplaceAll
        ActiveDocument.Content.Find.Execute findtext:="】", replacewith:="", Replace:=wdReplaceAll
    End With
End Sub
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-17, 22 : 57
 
[i=s] 本帖最后由 stirb 于 2013-1-17 22:58 编辑 [/i]

9# 善源
类似这样,你试试看:
代码: (全选)
word:=comobjcreate("word.application")
word.activedocument.Selection.Find.Execute Replace:=wdReplaceAll

or

代码: (全选)
word:=comobjConnect("word.application")
word.activedocument.Selection.Find.Execute Replace:=wdReplaceAll
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 08 : 51
 
10# stirb
不行啊!报错:This line does not contain a recognized action.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 10 : 41
 
[i=s] 本帖最后由 stirb 于 2013-1-18 10:46 编辑 [/i]

11# 善源

是我写错了,呵呵,应该是这样:
代码: (全选)
word:=comobjcreate("word.application")
word.documents.add
word.Visible := true
word.Selection.Find.Execute(Replace:=2)
word.Selection.WholeStory
sleep 2000
word.quit
return
有参数的都改成放在括号里面,wdReplaceAll这种常数要改成对应的数字。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 11 : 20
 
12# stirb
亲,能不能帮忙写个案例?

比如将 A全部替换为B ,且支持通配符替换!帮助学习啊!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 17 : 05
 
12# stirb
你的代码我看过,只是没有报错。但还是没效果的!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 18 : 18
 
测试这段代码能完成查找,但就是不替换。麻烦看一下!
代码: (全选)
oWord := ComObjCreate("Word.Application")        ; create MS Word object
oWord.Documents.Add        ; create new document

oWord.Selection.Font.Bold := 1        ; bold
oWord.Selection.TypeText("Visit ") ; type text
oWord.ActiveDocument.Hyperlinks.Add(oWord.Selection.Range, "http://www.autohotkey.com/forum/topic61509.html"
        ,"","","COM Object Reference [AutoHotkey_L]")         ; insert hyperlink
oWord.Selection.TypeText("我是什么字体")        ; 选择文本
oWord.Selection.Font.Italic := 1        ; 倾斜
oWord.Selection.TypeText(".")        ; 选择文本
oWord.Selection.TypeParagraph ;换行
oWord.Visible := 1, oWord.Activate        ; make it visible and activate it.

return
f1::

oWord.Selection.Find.ClearFormatting
oWord.Selection.Find.Replacement.ClearFormatting
Sleep,100
oWord.Selection.Find.Text :=("我*字体"),oWord.Selection.Find.Replacement.Text :=("bbbbbbbb")
oWord.Selection.Find.Execute.Replace:=1,oWord.Selection.Find.MatchWildcards := 1 ;支持通配符
oWord.Selection.Find.MatchByte := True
oWord.Selection.Find.Wrap:= 1 ;查找换行内容


TrayTip,是啊,是啊
Sleep,1000
TrayTip

Return


return

ExitApp
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 22 : 12
 
vba代码
代码: (全选)
ActiveDocument.Content.Find.Execute findtext:="我",replacewith:="你",Replace:=2)
改成ahk代码,要这么写:
代码: (全选)
objWord.ActiveDocument.Content.Find.Execute("我",ComObjMissing(),ComObjMissing(),ComObjMissing(),ComObjMissing(),ComObjMissing()​,ComObjMissing(),ComObjMissing(), ComObjMissing(),"你",2)
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-18, 22 : 13
 
我也还在摸索,貌似也不是那么好转换啊。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-19, 13 : 35
 
16# stirb
这个代码中间为什么那么多的[color=#099cc]ComObjMissing(),这个是代表什么意思?[/color]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-19, 13 : 39
 
17# stirb
兄弟是如何摸索的?另外,如何支持通配符替换呢?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2013-01-20, 23 : 17
 
19# 善源
看帮助,搜索,实验!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合