com.word库分享
By
巴克队长
at 2022-04-30 • 0人收藏 • 1447人看过
由于最近经常写报告,其中很多图片需要格式化大小,所以仿照excel库写了个word库,分享给有需要的朋友。
由于office系列操作比较多,只写了一些常用的智能提示,复杂的操作还是需要参照官方的vba手册。
测试工程:
简单的使用示例如下:
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="Button";left=198;top=192;right=473;bottom=296;z=1} ) /*}}*/ import com.wordDoc; var word = com.wordDoc( 1 ) word.Visible=true var aDoc = word.Open("\test.docx") //图片类型为InlineShapes,1cm等于28.35px var adjustPicSize=function(w,h){ for(i=1;aDoc.InlineShapes.Count ;1){ var pic = aDoc.InlineShapes(i) pic.LockAspectRatio = 0 if(w) pic.Width = w * 28.35 if(h) pic.Height = h * 28.35 } } winform.button.oncommand = function(id,event){ adjustPicSize(8.3) win.msgbox("图片调整完成") } winform.show(); win.loopMessage();
库代码如下:
//word 文档 namespace com; class wordDoc{ ctor( create ){ var createApp=function(){ this.oWord = ..com.TryCreateObject("word.Application","kwpp.Application","wpp.Application") if( ! this.oWord ) return null,"请先安装word"; this.oWord.Visible = false; ..table.gc(this,"Quit"); } if( create ) createApp() else { this.oWord = ..com.TryGetObject("word.Application","kwpp.Application","wpp.Application") if(! this.oWord) createApp() } if( ! this.oWord ) return null,"请先安装word"; }; @_metaProperty; } namespace wordDoc{ import util.metaProperty; _metaProperty = util.metaProperty( alerts = { _get = function(){ return owner.oWord.Application.DisplayAlerts && owner.oWord.Application.ScreenUpdating } _set = function( value ){ owner.oWord.Application.DisplayAlerts = value //wdalertsall=-1|wdalertsmessagebox-2|wdalertsnone=0 owner.oWord.Application.ScreenUpdating = value?1:0 } }; get = function(k){ return owner.oWord[k] }; set = function(k,v){ owner.oWord[k] = v; }; find=function(docName){ if(!owner.Documents.Count) return ; //尚无打开文档 for(i,name,path,aDoc in owner.eachDocument(1) ){ if(docName==name or path==docName) return aDoc; } }; eachDocument = function(index){ var aDoc = owner.Documents(index); if(!aDoc) return function(){}; var count = owner.Documents.Count var ind = 0 var documents=owner.Documents return function(){ ind++ if(ind<=count){ var aDoc = documents(ind); return ind,aDoc.Name,aDoc.FullName,aDoc } }; }; Open = function(path){ path = ..io.exist(path) return path ? owner.Documents.Open( path ) : null }; SaveAs = function(path,format){ if(!#path) error("请指定保存路径",2); if(format===null){ var ext = ..string.match(path,"[^.]+$"); if( ext ){ format = ( { doc=0/*wdformatdocument*/; docx=16/*wdFormatDocumentDefault*/; dotx=1/*wdformattemplate*/; rtf=6/*wdformatrtf*/; txt=7/*wdformatunicodetext*/; html=8/*wdformathtml*/; xml=12/*wdformatxml*/; pdf=17/*wdFormatPDF*/; xps=18/*wdFormatXPS*/; odt=23/*wdFormatOpenDocumentText*/; } ) [..string.lower(ext)]; }; } return owner.ActiveDocument.SaveAs( ..io.fullpath(path),format ); }; createFile = function(path){ var aDoc = owner.Open(path) if(aDoc) return aDoc; var word = owner.oWord; var aDoc = word.Documents.Add(); aDoc.SaveAs( ..io.fullpath(path) ) return aDoc; }; _topointer = lambda() owner.oWord; //将word对象链接到word.oWord地址上 ); } /**intellisense() com.wordDoc = word 支持库\n请不要使用精简版 word,\n兼容 WPS 表格,小提示:可在「WPS 配置工具」中关闭广告推送\n参考: https://docs.microsoft.com/en-us/office/vba/api/overview/word com.wordDoc( __/*是否创建新实例*/ ) = 创建word对象\n如果参数为true,则新建word对象,否则,先获取现有打开对象,若无打开对象则新建word对象 com.wordDoc() = !wordDoc. !wordDoc.eachDocument(1) = @for(i,name,path,aDoc in ??.eachDocument(1) ){ console.dump(i,name,path,aDoc) } !wordDoc.find(docNameWithExtOrPath) = 从已经打开的文档对象中查找文件名称(带后缀),若能查到则返回document对象\n参数@docNameWithExtOrPath,指定待查找文件名称(带后缀)或路径 !wordDoc.find()=!wordApp_document. !wordDoc.Visible = 是否显示 word 界面,\n注意这个属性的默认值是 false !wordDoc.alerts = 是否允许操作提示与屏幕更新,\n这个属性会同时设置 Application 对象的 DisplayAlerts 与 ScreenUpdating 属性\n如果只想设置其中一个属性,请直接通过 Application 对象设置即可 !wordDoc.Application = 请参考: https://docs.microsoft.com/en-us/office/vba/api/word.application%28object%29 !wordDoc.Application.DisplayAlerts = 是否允许操作提示,可选值-1,-2,0 !wordDoc.Application.ScreenUpdating = 是否允许屏幕更新,true|false !wordDoc.Documents = 活动工作簿\n请参考 https://docs.microsoft.com/en-us/office/vba/api/word.application.Documents \n!wordApp_documents. !wordDoc.Quit() = 退出word !wordDoc.Open(__path) = 打开word文件,成功返回document对象 !wordDoc.Open() = !wordApp_document. !wordDoc.ActiveDocument = 当前活动文档\n!wordApp_document. !wordDoc.SaveAs("/my->doc") = 存储word文件 !wordDoc.SaveAs = @.SaveAs( io.fullpath("\__.doc"),word.fileType.doc ) !wordDoc.createFile("/my->doc") = 如果目标文件存在则打开,\n否则创建新文件 !wordDoc.createFile() = !wordApp_document. !wordApp_documents.Add()=!wordApp_document. !wordDoc.Run("__/*宏名称*/(参数)") = 运行宏 !wordApp_document.documents = 返回文档对象集合\n!wordApp_documents. !wordApp_document.documents(__indexOrName) = 切换到其他文档\n!wordApp_document. end intellisense**/ /**intellisense(!wordApp_documents.) Count = 已打开文档的数量 Add(Template, NewTemplate, DocumentType, Visible)=新建空文档,并返回document对象。所有参数可选\参数@Template,指定模板名,默认使用 Normal 模板。\n参数@NewTemplate可选,默认false。True=将文档作为模板打开\n参数@DocumentType可选。_WdNew_指定一个常量,[默认0,空白文档|]\n参数@Visible可选,默认true。 Save(NoPrompt, OriginalFormat) = 保存 Documents 集合中的所有文档。如果用户没有保存过此文档或模板,可在“另存为”对话框中键入文件名。\n参数@NoPrompt可选[true,默认不提示|false],保存是否提醒;\n参数@OriginalFormat可选[1=原格式,默认|2=提醒用户|0=word文档] Close(SaveChanges, OriginalFormat) = 关闭指定的一个或多个文档。\n参数@SaveChanges可选[0,默认不保存|-2,提醒用户保存|-1,自动保存]\n参数@OriginalFormat可选[1=原格式,默认|2=提醒用户|0=word文档]\n参数 end intellisense**/ /**intellisense(!wordApp_document.) Name = 文档名称 AttachedTemplate.FullName=返回当前文档采用的模板名及模板所在位置 Bookmarks.Count=返回当前文档中的书签数 Characters.Count=返回当前文档的字符数 CodeName=返回当前文档的代码名称 Comments.Count=返回当前文档中的评论数 Endnotes.Count=返回当前文档中的尾注数 Fields.Count=返回当前文档中的域数目 Footnotes.Count=返回当前文档中的脚注数 FullName=返回当前文档的全名及所在位置 HasPassword=当前文档是否有密码保护 Hyperlinks.Count=返回当前文档中的链接数 Indexes.Count=返回当前文档中的索引数 ListParagraphs.Count=返回当前文档中项目编号或项目符号数 ListTemplates.Count=返回当前文档中使用的列表模板数 Paragraphs.Count=返回当前文档中的段落数 Password=XXX=设置打开文件使用的密码 ReadOnly=获取当前文档是否为只读属性 Saved=当前文档是否被保存 Sections.Count=当前文档中的节数 Sentences.Count=当前文档中的语句数 Shapes.Count=当前文档中的形状数 Styles.Count=当前文档中的样式数 Tables.Count=当前文档中的表格数 TablesOfAuthorities.Count=返回当前文档中的引文目录数 TablesOfAuthoritiesCategories.Count=返回当前文档中引文目录类别数 TablesOfContents.Count=返回当前文档中的目录数 TablesOfFigures.Count=返回当前文档中的图表目录数 ActiveWindow = 返回 Window 对象,该对象代表活动窗口(焦点所在的窗口)。如果没有打开的窗口,则会导致出错。只读\!wor_window. Save(NoPrompt, OriginalFormat) = 保存 文档。如果用户没有保存过此文档或模板,可在“另存为”对话框中键入文件名。\n参数@NoPrompt可选[true,默认不提示|false],保存是否提醒;\n参数@OriginalFormat可选[1=原格式,默认|2=提醒用户|0=word文档] Close(SaveChanges, OriginalFormat) = 关闭文档。\n参数@SaveChanges可选[0,默认不保存|-2,提醒用户保存|-1,自动保存]\n参数@OriginalFormat可选[1=原格式,默认|2=提醒用户|0=word文档]\n参数 Tables(index)=返回指定的表格对象\n!wordApp_TableObj. end intellisense**/ /**intellisense(!wordApp_TableObj.) AllowAutoFit=使 Microsoft Word 可以自动重新调整表格中的单元格的大小以适应内容。Boolean 类型,可读写。 Application=word对象\n!wordDoc. ApplyStyleColumnBands=布尔值,该值表示如果应用的预设表格样式为列提供了样式条带,则该值表示是否将样式波段应用于表中的列。读/写。 ApplyStyleFirstColumn=如果为 True,则 Microsoft Word 可将第一列格式应用于指定表的第一列。读/写布尔值 。 ApplyStyleHeadingRows=如果为 True,则 Microsoft Word 可将标题行格式应用于所选表的第一行。读/写布尔值 。 ApplyStyleLastColumn=如果为 True,则 Microsoft Word 可将最后一列格式应用于指定表的最后一列。读/写布尔值 。 ApplyStyleLastRow=如果为 True,则 Microsoft Word 可将最后一行格式应用于指定表的最后一行。读/写布尔值 。 ApplyStyleRowBands=返回或设置一个布尔值,该值表示如果应用的预设表格样式为行提供样式条带,则该值表示是否将样式波段应用于表中的行。读/写。 AutoFormatType=返回已应用于指定表的自动格式设置的类型。只读长整型。 Borders=返回一个Borders集合,该集合表示指定对象的所有边框\n!wordApp_Borders. BottomPadding=底边距(以磅为单位),读/写。 LeftPadding=左边距(以磅为单位),读/写 RightPadding=右边距(以磅为单位),读/写 TopPadding=顶边距(以磅为单位),读/写 Columns=返回Columns集合,该集合表示表中的所有表列。只读\n!wordApp_Columns. Creator=返回一个 32 位整数,该整数指示在其中创建指定对象的应用程序。只读长整型 Descr=返回或设置包含指定表的说明的String。读/写。 ID=将文档另存为网页时,返回或设置指定表的标识标签。读/写字符串。 NestingLevel=返回指定表的嵌套级别。只读长整型。 Parent=返回一个对象,该对象表示指定Table对象的父对象。 PreferredWidth=返回或设置指定表的首选宽度(以磅为单位或窗口宽度的百分比)。读/写单。 PreferredWidthType=返回或设置用于指定表宽度的首选度量单位。读/写 WdPreferredWidthType常量。 Range=返回一个Range对象,该对象代表指定表中包含的文档部分\n!wordApp_Range. Rows=返回一个Rows集合,该集合代表表中的所有表行。只读\n!wordApp_Rows. Shading=返回一个Shading对象,该对象引用指定对象的着色格式。 Spacing=表中单元格之间的间距(以磅为单位),读/写 Style=返回或设置指定表的样式。读/写。 TableDirection=Word 对指定表中的单元格进行排序的方向。读/写 WdTableDirection常量。 Tables=Tables集合,该集合代表嵌套在指定表中的所有表。只读。 Title=返回或设置包含指定表的标题的String。读/写。 Uniform=如果表中的所有行都具有相同的列数,则为 True。只读布尔值。 ApplyStyleDirectFormatting(StyleName)=应用指定的样式,但保留用户直接应用的任何格式。 AutoFitBehavior(Behavior)=确定 Microsoft Word 在使用自动调整功能时如何调整表的大小。参数为WdAutoFitBehavior常量 AutoFormat(Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit)= 将预定义外观应用于表格。本方法用于 Table AutoFormat 对话框中的属性设定(Table 菜单)。 Cell(Row, Column)=返回一个 Cell 对象,该对象代表表格中的一个单元格\n!wordApp_Cell. ConvertToText(Separator, NestedTables)=将表格转换为文本并返回一个 Range 对象,该对象代表带分隔符的文本 Delete()=删除选定的表格 Select()=选定指定的表格 Sort()=对选定的表格排序 SortAscending()=以字母升序给段落或表格行排序。将第一段或表格第一行视为域名记录,不进行排序。可用 Sort 方法将域名记录包含在排序中。\n注意,此方法为含有数据列的邮件合并数据源排序提供一种简化形式。对于大多数排序,请使用 Sort 方法。 SortDescending()=以字母降序给段落或表格行排序。将第一段或表格第一行视为域名记录,不进行排序。可用 Sort 方法将域名记录包含在排序中。\n注意,此方法为含有数据列的邮件合并数据源排序提供一种简化形式。对于大多数排序,请使用 Sort 方法。 Split(BeforeRow)=在表格中紧靠指定行的上面插入一空段落,并且返回一个 Table 对象,此对象包含指定行及其下一行。BeforeRow必选,将要拆分的表格的前一行,可以为 Row 对象或行号。 UpdateAutoFormat()=使用预定义表格格式对表格格式进行更新。例如,如果在用“自动套用格式”命令对一个表格设置格式之后插入行和列,那么该表格会不再与预定义格式相匹配。用 UpdateAutoFormat 方法可重新设置该格式。 end intellisense**/ /**intellisense(!wordApp_window.) end intellisense**/ /**intellisense() _wdalertsall=-1/*_wdalertsall*/ _wdalertsmessagebox=-2/*_wdalertsmessagebox*/ _wdalertsnone=0/*_wdalertsnone*/ _wdoriginaldocumentformat = 1/*_wdoriginaldocumentformat*/ _wdpromptuser = 2/*_wdpromptuser*/ _wdworddocument = 0/*_wdworddocument*/ _wddonotsavechanges= 0/*_wddonotsavechanges*/ _wdprompttosavechanges= -2/*_wdprompttosavechanges*/ _wdsavechanges= -1/*_wdsavechanges*/ _wdNewBlankDocument = 0/*_wdNewBlankDocument*/ _wdNewEmailMessage = 2/*_wdNewEmailMessage*/ _wdNewFrameset = 3/*_wdNewFrameset*/ _wdNewWebPage = 1/*_wdNewWebPage*/ _wdlinestyledashdot = 5/*_wdlinestyledashdot*/ _wdlinestyledashdotdot = 6/*_wdlinestyledashdotdot*/ _wdlinestyledashdotstroked = 20/*_wdlinestyledashdotstroked*/ _wdlinestyledashlargegap = 4/*_wdlinestyledashlargegap*/ _wdlinestyledashsmallgap = 3/*_wdlinestyledashsmallgap*/ _wdlinestyledot = 2/*_wdlinestyledot*/ _wdlinestyledouble = 7/*_wdlinestyledouble*/ _wdlinestyledoublewavy = 19/*_wdlinestyledoublewavy*/ _wdlinestyleemboss3d = 21/*_wdlinestyleemboss3d*/ _wdlinestyleengrave3d = 22/*_wdlinestyleengrave3d*/ _wdlinestyleinset = 24/*_wdlinestyleinset*/ _wdlinestylenone = 0/*_wdlinestylenone*/ _wdlinestyleoutset = 23/*_wdlinestyleoutset*/ _wdlinestylesingle = 1/*_wdlinestylesingle*/ _wdlinestylesinglewavy = 18/*_wdlinestylesinglewavy*/ _wdlinestylethickthinlargegap = 16/*_wdlinestylethickthinlargegap*/ _wdlinestylethickthinmedgap = 13/*_wdlinestylethickthinmedgap*/ _wdlinestylethickthinsmallgap = 10/*_wdlinestylethickthinsmallgap*/ _wdlinestylethinthicklargegap = 15/*_wdlinestylethinthicklargegap*/ _wdlinestylethinthickmedgap = 12/*_wdlinestylethinthickmedgap*/ _wdlinestylethinthicksmallgap = 9/*_wdlinestylethinthicksmallgap*/ _wdlinestylethinthickthinlargegap = 17/*_wdlinestylethinthickthinlargegap*/ _wdlinestylethinthickthinmedgap = 14/*_wdlinestylethinthickthinmedgap*/ _wdlinestylethinthickthinsmallgap = 11/*_wdlinestylethinthickthinsmallgap*/ _wdlinestyletriple = 8/*_wdlinestyletriple*/ _wdcolumnbreak = 8/*_wdcolumnbreak*/ _wdlinebreak = 6/*_wdlinebreak*/ _wdlinebreakclearleft = 9/*_wdlinebreakclearleft*/ _wdlinebreakclearright = 10/*_wdlinebreakclearright*/ _wdpagebreak = 7/*_wdpagebreak*/ _wdsectionbreakcontinuous = 3/*_wdsectionbreakcontinuous*/ _wdsectionbreakevenpage = 4/*_wdsectionbreakevenpage*/ _wdsectionbreaknextpage = 2/*_wdsectionbreaknextpage*/ _wdsectionbreakoddpage = 5/*_wdsectionbreakoddpage*/ _wdtextwrappingbreak = 11/*_wdtextwrappingbreak*/ _wdcollapseend = 0/*_wdcollapseend*/ _wdcollapsestart = 1/*_wdcollapsestart*/ end intellisense**/
7 个回复 | 最后更新于 2022-05-02
登录后方可回帖
辛苦队长 了..