如何按特定字符串对单词 table 进行排序,这是第一列每一行内的时间 HH:MM
How can I sort a word table by specific string, which is a time like HH:MM inside each line of the first column
我有一个word文档,里面有3个table(如下图),我需要按照第一列每行里面显示的小时进行排序(遇到第一次引用) .如果我应用盲目排序,例如:
ActiveDocument.Tables(1).Sort ExcludeHeader:= true, SortOrder:=wdSortOrderAscending
在 table 上,它不是以时间参考开头,而是以其他时间开头,这种类型的排序将无法按我的需要进行。它只会考虑每行中找到的第一个单词。
谁能知道如何解决这个问题?
举个例子,考虑这样的 table:
描述
HEADER1
HEADER2
Às 11.00 iniciou.se a do Gr.# da NNN.
F
Às 16.18 iniciou-se a do Gr.# da FFF.
G
Das 07.05 às 16.57 a Bateria de Condensadores # da CCC.
K
Das 07.22 às 16.24 a do disjuntor IBBP de 400 kV da KKK.
D
Das 08.10 às 16.58 a do disjuntor # do módulo ## do PPPPP.
Y
Das 08.27 às 17.34 a do disjuntor IBBP de 220 kV da LLLL.
S
Das 09.00 iniciou-se a do Gr.# da JJ.
H
Das 10.00 às 14.59 os Gr.#, Gr.# e Gr.# da VVV.
R
Das 10.04 às 19.16 a Reactância Shunt da GGGG.
H
Das 14.00 às 15.23 o Gr.# e das 14.00 às 16.11 o Gr.# da HHH.
U
Das 14.00 às 16.55 o Gr.# da MMM.
A
所以我不知道每行的开头词,但我需要在排序过程中忽略它们。我可以为 word 文档 (docm) 使用一些 vba 吗?
例如:
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
For Each Tbl In ActiveDocument.Tables
With Tbl
.Columns.Add beforecolumn:=.Columns(1)
For r = 2 To .Rows.Count
.Cell(r, 1).Range.Text = .Cell(r, 2).Range.Words.First
.Cell(r, 2).Range.Words.First.Text = vbNullString
Next
.Sort ExcludeHeader:=True, FieldNumber:="Column 2", _
SortFieldType:=wdSortFieldAlphanumeric, _
SortOrder:=wdSortOrderAscending
For r = 1 To .Rows.Count
.Cell(r, 1).Merge Mergeto:=.Cell(r, 2)
.Cell(r, 1).Range.Paragraphs.First.Range.Characters.Last.Text = vbNullString
Next
End With
Next
Application.ScreenUpdating = True
End Sub
我有一个word文档,里面有3个table(如下图),我需要按照第一列每行里面显示的小时进行排序(遇到第一次引用) .如果我应用盲目排序,例如:
ActiveDocument.Tables(1).Sort ExcludeHeader:= true, SortOrder:=wdSortOrderAscending
在 table 上,它不是以时间参考开头,而是以其他时间开头,这种类型的排序将无法按我的需要进行。它只会考虑每行中找到的第一个单词。 谁能知道如何解决这个问题? 举个例子,考虑这样的 table:
描述
HEADER1 | HEADER2 |
---|---|
Às 11.00 iniciou.se a do Gr.# da NNN. | F |
Às 16.18 iniciou-se a do Gr.# da FFF. | G |
Das 07.05 às 16.57 a Bateria de Condensadores # da CCC. | K |
Das 07.22 às 16.24 a do disjuntor IBBP de 400 kV da KKK. | D |
Das 08.10 às 16.58 a do disjuntor # do módulo ## do PPPPP. | Y |
Das 08.27 às 17.34 a do disjuntor IBBP de 220 kV da LLLL. | S |
Das 09.00 iniciou-se a do Gr.# da JJ. | H |
Das 10.00 às 14.59 os Gr.#, Gr.# e Gr.# da VVV. | R |
Das 10.04 às 19.16 a Reactância Shunt da GGGG. | H |
Das 14.00 às 15.23 o Gr.# e das 14.00 às 16.11 o Gr.# da HHH. | U |
Das 14.00 às 16.55 o Gr.# da MMM. | A |
所以我不知道每行的开头词,但我需要在排序过程中忽略它们。我可以为 word 文档 (docm) 使用一些 vba 吗?
例如:
Sub Demo()
Application.ScreenUpdating = False
Dim Tbl As Table, r As Long
For Each Tbl In ActiveDocument.Tables
With Tbl
.Columns.Add beforecolumn:=.Columns(1)
For r = 2 To .Rows.Count
.Cell(r, 1).Range.Text = .Cell(r, 2).Range.Words.First
.Cell(r, 2).Range.Words.First.Text = vbNullString
Next
.Sort ExcludeHeader:=True, FieldNumber:="Column 2", _
SortFieldType:=wdSortFieldAlphanumeric, _
SortOrder:=wdSortOrderAscending
For r = 1 To .Rows.Count
.Cell(r, 1).Merge Mergeto:=.Cell(r, 2)
.Cell(r, 1).Range.Paragraphs.First.Range.Characters.Last.Text = vbNullString
Next
End With
Next
Application.ScreenUpdating = True
End Sub