A Somewhat Comprehensive Word Properties Miner

Post your working scripts, libraries and tools for AHK v1.1 and older
steventaitinger
Posts: 20
Joined: 14 Jan 2014, 10:28
Contact:

A Somewhat Comprehensive Word Properties Miner

14 Jan 2014, 10:33

I used this when I needed to discover how a cell was formatted. It loops through all the cell, paragraph, and font properties/formatting options and styles and records them in excel columns so you can easily compare two formats if you are trying to duplicate an existing format. Note that when trying to write formats what you put in ahk is not always what word vba receives. You need to try and figure out what units they are using too.

Code: Select all

SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance force ;sets script to automatically override the replace instance dialog with yes

word_application:=ComObjActive("Word.Application") 

;add_to_index(object,"string")
index:=1

a_range:=word_application.selection

num:=get_cell_info()
write_info_to_excel(num,1,2)
num:=get_paragraph_info()
write_info_to_excel(num,1,2)
num:=get_font_info()
write_info_to_excel(num,1,2)
msgbox done
exitapp

add_to_index(object,object_name) {
global
info_name%index%:=object_name
info%index%:=object
index++
}

get_font_info() {
global
font:=a_range.font
add_to_index(font.AllCaps,"font.AllCaps")
add_to_index(font.Animation ,"font.Animation ")
add_to_index(font.Bold ,"font.Bold ")
add_to_index(font.BoldBi ,"font.BoldBi ")
add_to_index(font.Borders.enable,"font.Borders.enable")
add_to_index(font.ColorIndex ,"font.ColorIndex ")
add_to_index(font.ColorIndexBi ,"font.ColorIndexBi ")
add_to_index(font.ContextualAlternates ,"font.ContextualAlternates ")
add_to_index(font.Creator ,"font.Creator ")
add_to_index(font.DiacriticColor ,"font.DiacriticColor ")
add_to_index(font.DisableCharacterSpaceGrid ,"font.DisableCharacterSpaceGrid ")
add_to_index(font.DoubleStrikeThrough ,"font.DoubleStrikeThrough ")
;add_to_index(font.Duplicate ,"font.Duplicate ")
add_to_index(font.Emboss ,"font.Emboss ")
add_to_index(font.EmphasisMark ,"font.EmphasisMark ")
add_to_index(font.Engrave ,"font.Engrave ")
;add_to_index(font.Fill ,"font.Fill ")
;add_to_index(font.Glow ,"font.Glow ")
add_to_index(font.Hidden ,"font.Hidden ")
add_to_index(font.Italic ,"font.Italic ")
add_to_index(font.ItalicBi ,"font.ItalicBi ")
add_to_index(font.Kerning ,"font.Kerning ")
add_to_index(font.Ligatures ,"font.Ligatures ")
;add_to_index(font.Line ,"font.Line ")
add_to_index(font.Name ,"font.Name ")
add_to_index(font.NameAscii ,"font.NameAscii ")
add_to_index(a,"a")
add_to_index(font.NameBi ,"font.NameBi ")
add_to_index(font.NameFarEast ,"font.NameFarEast ")
add_to_index(font.NameOther ,"font.NameOther ")
add_to_index(font.NumberForm ,"font.NumberForm ")
add_to_index(font.NumberSpacing ,"font.NumberSpacing ")
add_to_index(font.Outline ,"font.Outline ")
add_to_index(font.Parent ,"font.Parent ")
add_to_index(font.Position ,"font.Position ")
;add_to_index(font.Reflection ,"font.Reflection ")
add_to_index(font.Scaling ,"font.Scaling ")
add_to_index(font.shading.BackgroundPatternColor,"font.shading.BackgroundPatternColor")
add_to_index(font.shading.BackgroundPatternColorIndex ,"font.shading.BackgroundPatternColorIndex ")
add_to_index(font.shading.ForegroundPatternColor ,"font.shading.ForegroundPatternColor ")
;add_to_index(font.shading.parent,"font.shading.parent")
add_to_index(font.shading.texture,"font.shading.texture")
add_to_index(font.Shadow ,"font.Shadow ")
add_to_index(font.Size ,"font.Size ")
add_to_index(font.SizeBi ,"font.SizeBi ")
add_to_index(font.SmallCaps ,"font.SmallCaps ")
add_to_index(font.Spacing ,"font.Spacing ")
add_to_index(font.StrikeThrough ,"font.StrikeThrough ")
add_to_index(font.StylisticSet ,"font.StylisticSet ")
add_to_index(font.Subscript ,"font.Subscript ")
add_to_index(font.Superscript ,"font.Superscript ")
add_to_index(a,"a")
;add_to_index(font.TextColor.BackColor,"font.TextColor.BackColor")
;add_to_index(font.TextColor.ForeColor,"font.TextColor.ForeColor")
;add_to_index(font.TextShadow ,"font.TextShadow ")
;add_to_index(font.ThreeD ,"font.ThreeD ")
add_to_index(font.Underline ,"font.Underline ")
add_to_index(font.UnderlineColor ,"font.UnderlineColor ")
return %index%
}

get_paragraph_info() {
global
paragraph:=a_range.paragraphs.item(1)
add_to_index(paragraph.alignment,"paragraph.alignment")
add_to_index(paragraph.AutoAdjustRightIndent ,"paragraph.AutoAdjustRightIndent")
add_to_index(paragraph.BaseLineAlignment ,"paragraph.BaseLineAlignment")
add_to_index(paragraph.CharacterUnitFirstLineIndent ,"paragraph.CharacterUnitFirstLineIndent ")
add_to_index(paragraph.CharacterUnitLeftIndent  ,"paragraph.CharacterUnitLeftIndent  ")
add_to_index(paragraph.CharacterUnitRightIndent ,"paragraph.CharacterUnitRightIndent ")
add_to_index(paragraph.DisableLineHeightGrid ,"paragraph.DisableLineHeightGrid ")
add_to_index(paragraph.FarEastLineBreakControl ,"paragraph.FarEastLineBreakControl ")
add_to_index(paragraph.FirstLineIndent,"paragraph.FirstLineIndent")
add_to_index(paragraph.HalfWidthPunctuationOnTopOfLine ,"paragraph.HalfWidthPunctuationOnTopOfLine ")
add_to_index(paragraph.HangingPunctuation ,"paragraph.HangingPunctuation ")
add_to_index(paragraph.Hyphenation ,"paragraph.Hyphenation ")
add_to_index(paragraph.ID ,"paragraph.ID ")
add_to_index(paragraph.IsStyleSeparator ,"paragraph.IsStyleSeparator ")
add_to_index(paragraph.shading.BackgroundPatternColor,"paragraph.shading.BackgroundPatternColor")
add_to_index(paragraph.shading.BackgroundPatternColorIndex ,"paragraph.shading.BackgroundPatternColorIndex ")
add_to_index(paragraph.shading.ForegroundPatternColor ,"paragraph.shading.ForegroundPatternColor ")
add_to_index(paragraph.shading.parent,"paragraph.shading.parent")
add_to_index(paragraph.shading.texture,"paragraph.shading.texture")
add_to_index(paragraph.KeepTogether ,"paragraph.KeepTogether ")
add_to_index(paragraph.KeepWithNext  ,"paragraph.KeepWithNext  ")
add_to_index(paragraph.LeftIndent  ,"paragraph.LeftIndent  ")
add_to_index(a,"a")
add_to_index(paragraph.LineSpacing,"paragraph.LineSpacing")
add_to_index(paragraph.LineSpacingRule ,"paragraph.LineSpacingRule ")
add_to_index(paragraph.LineUnitAfter  ,"paragraph.LineUnitAfter  ")
add_to_index(paragraph.LineUnitBefore  ,"paragraph.LineUnitBefore  ")
add_to_index(paragraph.MirrorIndents   ,"paragraph.MirrorIndents   ")
add_to_index(paragraph.NoLineNumber ,"paragraph.NoLineNumber ")
add_to_index(paragraph.OutlineLevel   ,"paragraph.OutlineLevel   ")
add_to_index(paragraph.PageBreakBefore   ,"paragraph.PageBreakBefore   ")
add_to_index(paragraph.Parent,"paragraph.Parent")
add_to_index(paragraph.ReadingOrder,"paragraph.ReadingOrder")
add_to_index(paragraph.RightIndent ,"paragraph.RightIndent ")
add_to_index(paragraph.SpaceAfter,"paragraph.SpaceAfter")
add_to_index(paragraph.SpaceAfterAuto,"paragraph.SpaceAfterAuto")
add_to_index(paragraph.SpaceBefore,"paragraph.SpaceBefore")
add_to_index(paragraph.SpaceBeforeAuto,"paragraph.SpaceBeforeAuto")
add_to_index(paragraph.Style,"paragraph.Style")
add_to_index(paragraph.TabStops.count,"paragraph.TabStops.count")
add_to_index(paragraph.TextboxTightWrap ,"paragraph.TextboxTightWrap ")
add_to_index(paragraph.WidowControl ,"paragraph.WidowControl ")
add_to_index(paragraph.WordWrap ,"paragraph.WordWrap ")
add_to_index(paragraph.Borders.count,"paragraph.Borders.count")
add_to_index(paragraph.Borders.enable,"paragraph.Borders.enable")
return %index%
}

get_cell_info() {
global
cell:=a_range.cells.item(1)
add_to_index(cell.Borders.count,"cell.Borders.count")
add_to_index(cell.Borders.enable,"cell.Borders.enable")
add_to_index(cell.bottompadding,"cell.bottompadding")
add_to_index(cell.fittext,"cell.fittext")
add_to_index(cell.height,"cell.height")
add_to_index(cell.heightrule,"cell.heightrule")
add_to_index(cell.id,"cell.id")
add_to_index(cell.leftpadding,"cell.leftpadding")
add_to_index(cell.nestinglevel,"cell.nestinglevel")
add_to_index(cell.preferredwidth,"cell.preferredwidth")
add_to_index(cell.preferredwidthtype,"cell.preferredwidthtype")
add_to_index(cell.rightpadding,"cell.rightpadding")
add_to_index(cell.shading.BackgroundPatternColor,"cell.shading.BackgroundPatternColor")
add_to_index(cell.toppadding,"cell.toppadding")
add_to_index(cell.verticalalignment,"cell.verticalalignment")
add_to_index(cell.width,"cell.width")
add_to_index(cell.wordwrap,"cell.wordwrap")
add_to_index(cell.shading.BackgroundPatternColor,"cell.shading.BackgroundPatternColor")
add_to_index(cell.shading.BackgroundPatternColorIndex,"cell.shading.BackgroundPatternColorIndex")
add_to_index(cell.shading.ForegroundPatternColor ,"cell.shading.ForegroundPatternColor ")
add_to_index(cell.shading.parent,"cell.shading.parent")
add_to_index(cell.shading.texture,"cell.shading.texture")
return %index%
}

write_info_to_excel(num,col1,col2) {
x_win:= ComObjActive("Excel.Application") ;creates a handle to your currently active excel sheet
loop %num% {
x_win.selection.cells(a_index,col1).value:=info_name%A_index%
x_win.selection.cells(a_index,col2).value:=info%A_index%
}
x_win=
}




;msgbox % word_application.activedocument.sentences(%index%)
;msgbox % word_application.activedocument.sentences(%index%).range().text
;msgbox % word_application.activedocument.sentences(%index%).text

/*
loop % word_application.activedocument.sentences.count {
current_range:=word_application.activedocument.sentences(a_index)
if (current_range.font.name="Swis%index%%index% Blk BT") {
msgbox % current_range.text
}
}
*/

word_application=
exitapp
Guest10
Posts: 578
Joined: 01 Oct 2013, 02:50

Re: A Somewhat Comprehensive Word Properties Miner

15 Jan 2014, 08:53

could you explain this part further with some examples?: :ugeek:
Note that when trying to write formats what you put in ahk is not always what word vba receives. You need to try and figure out what units they are using too.
steventaitinger
Posts: 20
Joined: 14 Jan 2014, 10:28
Contact:

Re: A Somewhat Comprehensive Word Properties Miner

28 Jan 2014, 17:11

An example would be if you go and try to set the width of a cell in a table the default unit is points but potentially if you record that it could be in a percent or something like that. Autohotkey seems to handle units a lot differently than vba which I think causes some confusion (at least I was confused). Also if you write a true value as 1 and record it it might be -1 or something like that.

Return to “Scripts and Functions (v1)”

Who is online

Users browsing this forum: No registered users and 107 guests