com.word库分享
By
巴克队长
at 2022-04-30 • 0人收藏 • 1624人看过
由于最近经常写报告,其中很多图片需要格式化大小,所以仿照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
登录后方可回帖



辛苦队长 了..