接着上篇文章来写,上篇说了Word程序的几个常见对象,表格要单独拿出来说,因为Word的表格和Excel的表格有类似之处,有很多要说的地方。

Excel数据和Word数据交互,很多时候就是和Word内部的表格内容进行交互读取:


java word添加书签 java获取word书签_Word


一、了解Word VBA表格的表示方法

■知识点一:创建表格

在Word中插入2行3列的表格,录制宏得到下面的代码:

java word添加书签 java获取word书签_VBA_02

2行3列的表格

Sub 宏1() ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _ 3, 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 WithEnd Sub

简化后这就是插入表格得核心代码:

Sub 宏1() ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:=3 Selection.Tables(1).Style = "网格型" '如果不表格样式,看不到边框。End Sub

■知识点二:表格中单元格表示方法

Word和Excel中表示表格的方法类似,cellcells两种方式。看下面例子就很容易明白了。

•Cell 对象

代表单个表格单元格。Cell 对象是 Cells 集合中的元素。Cells 集合代表指定对象中所有的单元格。

Cell(row, column) 或 Cells(index)可返回 Cell 对象,其中 row 为行号,column 为列号,index为索引序号。


java word添加书签 java获取word书签_Word_03

Word表格动态写入内容的顺序

上面的动画是演示的Word表格动态写入内容,以下两段代码均可以实现。

Sub 第一种写入方法() Dim t As Table Set t = ActiveDocument.Tables(1) t.Cell(1, 1).Range = 1 t.Cell(1, 2).Range = 2 t.Cell(1, 3).Range = 3 t.Cell(2, 1).Range = 4 t.Cell(2, 2).Range = 5 t.Cell(2, 3).Range = 6End SubSub 第二种写入方法() Set t = ActiveDocument.Tables(1).Range For i = 1 To t.Cells.Count t.Cells(i).Range = i NextEnd Sub

也可以看得出来Word种表格的表示方法:一种是根据行、列坐标;一种是按照单元格的前后顺序。

从第二种方法,我们可以清晰的看出来,Word中表格默认的前后顺序

■知识点三:合并单元格表示方法

java word添加书签 java获取word书签_数据_04


利用第二种单元格的表示方法,按照顺序写入单元格数据,可以看到,合并单元格也是按照前后顺序表示的。

Word VBA中遍历文档中所有表格,统计表格个数。

Sub 遍历表格() Dim i As Integer Debug.Print "共" & ThisDocument.Tables.Count; "个表格" For i = 1 To ThisDocument.Tables.Count Tables(i).Range.Select Debug.Print "第" & i & "表格" Debug.Print Tables(i).Range.Rows.Count & "行" Debug.Print Tables(i).Range.Columns.Count & "列" Debug.Print Tables(i).Range.Cells.Count & "个单元格" Debug.Print Next End Sub

二、提取Word表格到Excel

这两天刚帮人写的一小段代码,这老哥有几万个这样的文档,每个文档有五六个表格,需要从中提取数据到excel中。

如图中的表格,需要提取红色内框中的数值,可以用方法一和方法二分别获取得到。我用的方法二读取的单元格数据。直接放总的代码,其中涉及循环打开Word文档的代码,比较综合。


java word添加书签 java获取word书签_Word_05


Word表格样式


java word添加书签 java获取word书签_java word添加书签_06


Excel表格样式

Sub test() Dim arr() k = 1 Set doc = CreateObject("word.application") '创建Word对象 With Application.FileDialog(msoFileDialogFilePicker) .AllowMultiSelect = True '多选择 .Filters.Clear '清除文件过滤器 .Filters.Add "Word 文件