ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 8882|回复: 9

[讨论]关于vbs自动生成word文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-6 21:58 | 显示全部楼层 |阅读模式

现在的代码如下,可是好像红色的code不起作用

现在就是想询问一下对于修改文本的格式,如居中,修改字体这些如何实现

还有想给图片加黑色边框,如何用vbs实现

帮我一下吧,thx

'*******************************************************************************
Set Word = CreateObject("Word.Application")
Word.Documents.Add

Word.Selection.MoveDown 5, 1000
Word.Selection="统计结果"
Word.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Word.Selection.Style = Word.ActiveDocument.Styles("标题 1")

Word.Selection.MoveDown 5, 1000
Word.Selection.TypeParagraph


Word.Selection.MoveDown 5, 1000
Word.Selection="统计子项详细信息"
Word.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Word.Selection.Style = Word.ActiveDocument.Styles("标题 2")

Word.Selection.MoveDown 5, 1000
Word.Selection.TypeParagraph

Word.Selection.TypeParagraph

Word.Selection ="11 12 13 14 15 16 "+ vbCrLf+ _
"21 22 23 24 25 26 "+ vbCrLf+ _
"31 32 33 34 45 46 "+ vbCrLf+ _
"41 42 43 44 45 56 "

Word.Selection.ConvertToTable 100, 100, 0, 0
With Word.Selection.Tables(1)
        If .Style <> "网格型" Then
            .Style = "网格型"
        End If
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = True
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = True
End With

Word.ActiveDocument.SaveAs ("test.doc")
Word.Quit (False)
Set Word = Nothing
'*******************************************************************************

TA的精华主题

TA的得分主题

发表于 2006-9-7 06:02 | 显示全部楼层

请楼主注意两个事:

相同或者相关内容的贴子,请在同一主题贴中进行!

VBAVBS是两个不同的编辑器(编程语言),请注意你的描述!

VBS我不是太懂的,VBA来凑个数吧:

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2006-9-7 6:01:03
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0069^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------
Option Explicit
Sub Example()
    Dim myDoc As Document, myRange As Range, myTable As Table
    Dim tabString() As Variant, oCell As Cell, N As Byte, myPicture As InlineShape
    Application.ScreenUpdating = False
    tabString = Array("
1", "2", "3", "4", "5", "aaa", "123", "456", "xxx", "zzz", _
                      "bbb", "345", "789", "yyy", "uuu")
    'Set myDoc = Word.Documents.Add
    Set myDoc = ThisDocument
    Set myRange = myDoc.Range(myDoc.Content.End - 1, myDoc.Content.End - 1)
    With myRange
        .InsertAfter "
范例标题" & Chr(13)
        .Style = "
标题 1"
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        .SetRange myDoc.Content.End - 1, myDoc.Content.End - 1
        .InsertAfter "
标题 2" & Chr(13)
        .Style = "
标题 2"
        .SetRange myDoc.Content.End - 1, myDoc.Content.End - 1

TA的精华主题

TA的得分主题

发表于 2006-9-7 06:02 | 显示全部楼层

        Set myTable = .Tables.Add(Range:=myRange, numrows:=3, numcolumns:=5)
        With myTable
            .Style = "
网格型"
            .Rows(1).Range.Font.Bold = True
            .Rows(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
            For Each oCell In myTable.Range.Cells
                oCell.Range.Text = tabString(N)
                N = N + 1
            Next
        End With
        Word.CaptionLabels.Add Name:="
"
        With Word.CaptionLabels("
")
            .NumberStyle = wdCaptionNumberStyleArabic
            .IncludeChapterNumber = True
            .ChapterStyleLevel = 2
            .Separator = wdSeparatorEnDash
        End With
        Word.CaptionLabels.Add Name:="
"
        With Word.CaptionLabels("
")
            .NumberStyle = wdCaptionNumberStyleArabic
            .IncludeChapterNumber = True
            .ChapterStyleLevel = 2
            .Separator = wdSeparatorEnDash
        End With
        myTable.Range.InsertCaption Label:="
", TitleAutoText:="", Title:="", Position _
                                                                            :=wdCaptionPositionAbove, ExcludeLabel:=0
        myRange.ParagraphFormat.Alignment = wdAlignParagraphCenter
        .SetRange myDoc.Content.End - 1, myDoc.Content.End - 1
        myRange.InsertAfter Chr(13)
        .SetRange myDoc.Content.End - 1, myDoc.Content.End - 1
        Set myPicture = myDoc.InlineShapes.AddPicture(FileName:="C:\Documents and Settings\shourou\My Documents\My Pictures\PROCESS_Start.bmp", Range:=myRange)
        .ParagraphFormat.Alignment = wdAlignParagraphCenter
        myPicture.Range.InsertCaption Label:="
", TitleAutoText:="", Title:="", Position _
                                                                              :=wdCaptionPositionBelow, ExcludeLabel:=0
    End With
    Application.ScreenUpdating = False
End Sub
'----------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-7 10:00 | 显示全部楼层

之前不太清楚,以后注意

下不为例

先谢过了,试试再说

TA的精华主题

TA的得分主题

发表于 2006-9-7 10:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

将"wdAlignParagraphCenter"改为 "Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter"试试.

顺便问一下,你的开发环境是visual studio 2005吗?用的vb吗?

TA的精华主题

TA的得分主题

发表于 2006-9-7 10:45 | 显示全部楼层

其实如果你用模板的话就不会这么麻烦了,在模板中的指定位置调好格式,插入书签,就不用写这些调格式的代码了.

在vb.net下的用如下语句以指定模板新建文档

        MyWord = CreateObject("word.application")
        MyWord.Visible = True
        MyDoc = MyWord.Documents.Add(Template:=dotname)

其中dotname是模板文件的路径

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-7 13:38 | 显示全部楼层

我的开发环境是vc.net

我也想用模板的,只是还不知道怎么用书签

其实还有一个域我也很想用

只是一直找不到例子,不知如何使用

对了,你们现在所会的都是用vba写的吧

我现在把vba和vbs都混在一起了

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-7 13:40 | 显示全部楼层

ps 把我的那段code copy下来另存为*.vbs

可以自动生成文档的

TA的精华主题

TA的得分主题

发表于 2006-9-7 17:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

我举个例子来说一下模板和书签吧,假设你要生成的文档包括如下内容:

第一行是固定的两个字"标题",要求黑体四号字居中

第二行是从数据库导出的内容,要求宋体五号字

那么你可以建这样一个模板:

第一行是固定的两个字"标题",将其格式调整为黑体四号字居中

第二行插入书签,假设书签名为"head",把格式调整为宋体五号字

将这个模板存为一个dot模板文件或是直接存成doc文档,看你生成文件时的要求了.

假设你读取数据库,每条记录生成一个文档,那么用dot文件比较方便,每读取一条记录,以该模板文件为模板来创建一个word文档,然后定位到书签位置,插入指定字段的内容;如果所有记录生成到一个文档,那么模板文件存为doc文件比较方便,每读取一条记录,插入一次该模板,然后定位到书签位置,插入指定字段的内容,然后删除书签.

我使用较多的是vba,但有时vba的功能不能满足需要,就用vb.net了.

[此贴子已经被作者于2006-9-7 17:29:43编辑过]

TA的精华主题

TA的得分主题

发表于 2006-9-7 23:43 | 显示全部楼层

VBS知道一点,我来分析几行试试:


Word.Selection="统计结果"
Word.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Word.Selection.Style = Word.ActiveDocument.Styles("标题 1")

第1行不用说了,第2行代码,在VBS中是不认识wdAlignParagraphCenter的,幸好可以通过VBA的调试功能获取wdAlignParagraphCenter的数值(debug.print wdAlignParagraphCenter),其值等于1,这样第2行代码在VBS中应写为如下


Word.Selection.ParagraphFormat.Alignment = 1

可是运行这3行代码,似乎仍得不到结果,原因是第3行代码,把第2行的段落居中改了。知道原因就好办了,把上面3行代码改为如下就行了:


Word.Selection="统计结果"
Word.Selection.Style = Word.ActiveDocument.Styles("标题 1")
Word.Selection.ParagraphFormat.Alignment = 1

其它各行代码的分析,大体相似

[此贴子已经被作者于2006-9-7 23:43:57编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 22:57 , Processed in 0.045567 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表