xowen 发表于 2013-5-23 22:30:28

如何拼合WORD文件中的表格单元?

求教,我要是Autoit操作WPS/MSOffice制作如下图的表格,但是拼合始终不成功,请大神指点一下,谢谢!此外,按照下面的代码,执行完毕后,文本“这是一个测试”总是会在表格的后面,我本意是放在前面的,这个怎么解决呢?还有就是怎么将这个文本设置为居中,字体为4号,黑体?再次谢谢!

$msg = ObjCreate("WPS.Application")
$msg.visible =1
$objdoc=$msg.Documents.Add()
$objdoc.Range.Text='这是一个测试'&@CRLF
$objRange=$objdoc.Range()
$objdoc.Tables.Add($objRange,5,4)
$objTable = $objDoc.Tables(1)
$objRange.Tables(1).Rows(2).Cell(2,3).Merge#无法拼合
$objRange.Tables(1).Columns(1).Cell(3,4).Merge   #无法拼合
$objTable.Cell(2, 2).Range.Text = "拼合这个"
$objTable.Cell(3, 1).Range.Text = "拼合这个,居中"


penguinl 发表于 2013-5-23 22:45:25

你录制宏之后,按照宏转成AU3的就可以了!

xowen 发表于 2013-5-24 10:57:43

你录制宏之后,按照宏转成AU3的就可以了!
penguinl 发表于 2013-5-23 22:45 http://www.autoitx.com/images/common/back.gif

尝试录制了一下,但不会转换,求教

Sub 宏1()
'
' 宏1 宏
'
'
    Selection.TypeText Text:="这是一个测试"
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.MoveUp Unit:=wdLine, Count:=2
    Selection.MoveRight Unit:=wdCharacter, Count:=6, Extend:=wdExtend
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.Font.Size = 14
    Selection.Font.Bold = wdToggle
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.MoveUp Unit:=wdLine, Count:=2
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=5, NumColumns:= _
      4, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
      wdAutoFitFixed
    With Selection.Tables(1)
      If .Style <> "网格型" Then
            .Style = "网格型"
      End If
      .ApplyStyleHeadingRows = True
      .ApplyStyleLastRow = False
      .ApplyStyleFirstColumn = True
      .ApplyStyleLastColumn = False
      .ApplyStyleRowBands = True
      .ApplyStyleColumnBands = False
    End With
    Selection.MoveRight Unit:=wdCharacter, Count:=3
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Cells.Merge
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="拼合了"
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=2, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.MoveUp Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
    Selection.MoveDown Unit:=wdLine, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=2, Extend:=wdExtend
    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Cells.Merge
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="拼合居中"
    Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
    Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
    Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
    Selection.SelectCell
    Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
    Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
    ChangeFileOpenDirectory "C:\Documents and Settings\Administrator\桌面\"
End Sub

xowen 发表于 2013-5-24 22:51:33

大神快点出现吧!都快沉了,郁闷。。。{:face (394):}

kevinch 发表于 2013-5-26 15:56:27

$word=ObjCreate("word.application")
$word.visible=True
$doc=$word.documents.add
$doc.tables.add($doc.range(0,1),5,4)
For $n=-6 To -1
        $doc.tables(1).borders($n).linestyle=1
Next
With $doc
        .range(.tables(1).cell(2,2).range.start,.tables(1).cell(2,3).range.end).cells.merge
EndWith
$doc.tables(1).cell(2,2).range.text="合并这里"

With $doc
        .range(.tables(1).cell(3,1).range.start,.tables(1).cell(4,1).range.end).select ;cells.merge
EndWith
With $doc.application.selection
        .cells.merge
        .range.text="合并这里,居中"
        .ParagraphFormat.Alignment=1
        .cells.VerticalAlignment=1
EndWith很奇怪,横向合并可以直接进行,竖向的合并必须选择了才可以

xowen 发表于 2013-5-27 10:50:12

回复 5# kevinch

.range(.tables(1).cell(3,1).range.start,.tables(1).cell(4,1).range.end).select,这个选择方式貌似有点问题,会将3、4行全部选中。而不能只选中(3,1)、(4,1两个单元格)。

kevinch 发表于 2013-5-27 12:07:12

不要貌似,测试过再说

xowen 发表于 2013-5-28 09:26:02

不要貌似,测试过再说
kevinch 发表于 2013-5-27 12:07 http://www.autoitx.com/images/common/back.gif
测试过了吖!看到大神的代码后,第一时间就测试过了,确实会选中并拼合3至4行。

kevinch 发表于 2013-5-28 12:16:34

本地测试是正常的,环境:word2010,xp系统

xowen 发表于 2013-5-29 16:15:41

本地测试是正常的,环境:word2010,xp系统
kevinch 发表于 2013-5-28 12:16 http://www.autoitx.com/images/common/back.gif
环境:Word2007,XP系统不行,谢谢耐心解答!

kevinch 发表于 2013-5-31 08:49:27

$word=ObjCreate("word.application")
$word.visible=True
$doc=$word.documents.add
$doc.tables.add($doc.range(0,1),5,4)
For $n=-6 To -1
      $doc.tables(1).borders($n).linestyle=1
Next
With $doc
      .range(.tables(1).cell(2,2).range.start,.tables(1).cell(2,3).range.end).cells.merge
EndWith
$doc.tables(1).cell(2,2).range.text="合并这里"

$doc.tables(1).cell(3,1).range.select

With $doc.application.selection
                .movedown(5,1,1)
      .cells.merge
      .range.text="合并这里,居中"
      .ParagraphFormat.Alignment=1
      .cells.VerticalAlignment=1
EndWith这个再试一下

shqf 发表于 2013-5-31 15:19:38

本帖最后由 shqf 于 2013-6-3 08:42 编辑

这个再试一下
kevinch 发表于 2013-5-31 08:49 http://www.autoitx.com/images/common/back.gif$msg = ObjCreate("word.Application")
$msg.visible = 1
$objdoc = $msg.Documents.Add()
$objSel = $msg.Selection
$objSel.TypeText("这是一个测试")
$objdoc.Tables.Add($objSel.Range, 5, 4)
$objTable = $objdoc.Tables(1)
With $objTable
        If .Style <> "网格型" Then
                .Style = "网格型"
        EndIf
        .ApplyStyleHeadingRows = True
        .ApplyStyleLastRow = False
        .ApplyStyleFirstColumn = True
        .ApplyStyleLastColumn = False
        .ApplyStyleRowBands = True
        .ApplyStyleColumnBands = False
EndWith

$Range1 = $objdoc.Range($objTable.Cell(2, 2).Range.Start, $objTable.Cell(2, 3).Range.End)
$Range1.Cells.Merge
$objTable.Cell(2, 2).Range.Text = "拼合这个"

;$Range2 = $objdoc.Range($objTable.Cell(3, 1).Range.Start, $objTable.Cell(4, 1).Range.End)
;$Range2.Cells.Merge
$objTable.cell(3, 1).range.Select
$objdoc.application.selection.movedown(5, 1, 1)
$objdoc.application.selection.cells.merge
$objTable.Cell(3, 1).Range.Text = "合并这里,居中"同感,竖向合并Cell(3, 1)-Cell(4,2)或Cell(3, 2)-Cell(4,2)都能成功。第1列总不成功(注释掉的2 句),怪了。看了你的代码,学习了,总算把代码完成贴上,供楼主参考。(系统winxpsp3,word2003)
页: [1]
查看完整版本: 如何拼合WORD文件中的表格单元?