VB.NET操作WORD(VBA)

该库提供了一系列用于自动化Word文档处理的功能,包括文档创建、编辑、格式调整等。支持文本插入、表格操作、书签管理和图片处理等多种操作。
   1      Public   Class  WordOpLib
  
2
  
3
  
4      Private  oWordApplic  As  Word.ApplicationClass
  
5      Private  oDocument  As  Word.Document
  
6      Private  oRange  As  Word.Range
  
7      Private  oShape  As  Word.Shape
  
8      Private  oSelection  As  Word.Selection
  
9
 
10
 
11      Public   Sub   New ()
 
12          ' 激活com  word接口
  13         oWordApplic  =   New  Word.ApplicationClass
 
14         oWordApplic.Visible  =   False
 
15
 
16      End Sub
 
17      ' 设置选定文本
  18      Public   Sub  SetRange( ByVal  para  As   Integer )
 
19         oRange  =  oDocument.Paragraphs(para).Range
 
20         oRange.Select()
 
21      End Sub
 
22      Public   Sub  SetRange( ByVal  para  As   Integer ByVal  sent  As   Integer )
 
23         oRange  =  oDocument.Paragraphs(para).Range.Sentences(sent)
 
24         oRange.Select()
 
25      End Sub
 
26      Public   Sub  SetRange( ByVal  startpoint  As   Integer ByVal  endpoint  As   Integer ByVal  flag  As   Boolean )
 
27          If  flag  =   True   Then
 
28             oRange  =  oDocument.Range(startpoint, endpoint)
 
29             oRange.Select()
 
30          Else
 
31
 
32          End   If
 
33      End Sub
 
34
 
35      ' 生成空的新文档
  36      Public   Sub  NewDocument()
 
37          Dim  missing  =  System.Reflection.Missing.Value
 
38          Dim  isVisible  As   Boolean   =   True
 
39         oDocument  =  oWordApplic.Documents.Add(missing, missing, missing, missing)
 
40         oDocument.Activate()
 
41      End Sub
 
42      ' 使用模板生成新文档
  43      Public   Sub  NewDocWithModel( ByVal  FileName  As   String )
 
44          Dim  missing  =  System.Reflection.Missing.Value
 
45          Dim  isVisible  As   Boolean   =   False
 
46          Dim  strName  As   String
 
47         strName  =  FileName
 
48         oDocument  =  oWordApplic.Documents.Add(strName, missing, missing, isVisible)
 
49         oDocument.Activate()
 
50      End Sub
 
51      ' 打开已有文档
  52      Public   Sub  OpenFile( ByVal  FileName  As   String )
 
53          Dim  strName  As   String
 
54          Dim  isReadOnly  As   Boolean
 
55          Dim  isVisible  As   Boolean
 
56          Dim  missing  =  System.Reflection.Missing.Value
 
57
 
58         strName  =  FileName
 
59         isReadOnly  =   False
 
60         isVisible  =   True
 
61
 
62         oDocument  =  oWordApplic.Documents.Open(strName, missing, isReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing, missing)
 
63         oDocument.Activate()
 
64
 
65      End Sub
 
66      Public   Sub  OpenFile( ByVal  FileName  As   String ByVal  isReadOnly  As   Boolean )
 
67          Dim  strName  As   String
 
68          Dim  isVisible  As   Boolean
 
69          Dim  missing  =  System.Reflection.Missing.Value
 
70
 
71         strName  =  FileName
 
72         isVisible  =   True
 
73
 
74         oDocument  =  oWordApplic.Documents.Open(strName, missing, isReadOnly, missing, missing, missing, missing, missing, missing, missing, missing, isVisible, missing, missing, missing, missing)
 
75         oDocument.Activate()
 
76      End Sub
 
77      ' 退出Word
  78      Public   Sub  Quit()
 
79          Dim  missing  =  System.Reflection.Missing.Value
 
80         oWordApplic.Quit()
 
81         System.Runtime.InteropServices.Marshal.ReleaseComObject(oWordApplic)
 
82         oWordApplic  =   Nothing
 
83      End Sub
 
84      ' 关闭所有打开的文档
  85      Public   Sub  CloseAllDocuments()
 
86         oWordApplic.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
 
87      End Sub
 
88      ' 关闭当前的文档
  89      Public   Sub  CloseCurrentDocument()
 
90
 
91         oDocument.Close(Word.WdSaveOptions.wdDoNotSaveChanges)
 
92      End Sub
 
93      ' 保存当前文档
  94      Public   Sub  Save()
 
95          Try
 
96             oDocument.Save()
 
97          Catch
 
98              MsgBox (Err.Description)
 
99          End   Try
100      End Sub
101      ' 另存为文档
102      Public   Sub  SaveAs( ByVal  FileName  As   String )
103          Dim  strName  As   String
104          Dim  missing  =  System.Reflection.Missing.Value
105
106         strName  =  FileName
107
108         oDocument.SaveAs(strName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)
109      End Sub
110      ' 保存为Html文件
111      Public   Sub  SaveAsHtml( ByVal  FileName  As   String )
112          Dim  missing  =  System.Reflection.Missing.Value
113          Dim  strName  As   String
114
115         strName  =  FileName
116          Dim   format   =   CInt (Word.WdSaveFormat.wdFormatHTML)
117
118         oDocument.SaveAs(strName,  format , missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing)
119      End Sub
120      ' 插入文本
121      Public   Sub  InsertText( ByVal  text  As   String )
122         oWordApplic.Selection.TypeText(text)
123      End Sub
124      ' 插入一个空行
125      Public   Sub  InsertLineBreak()
126         oWordApplic.Selection.TypeParagraph()
127      End Sub
128      ' 插入指定行数的空行
129      Public   Sub  InsertLineBreak( ByVal  lines  As   Integer )
130          Dim  i  As   Integer
131          For  i  =   1   To  lines
132             oWordApplic.Selection.TypeParagraph()
133          Next
134      End Sub
135      ' 插入表格
136      Public   Sub  InsertTable( ByRef  table  As  DataTable)
137          Dim  oTable  As  Word.Table
138          Dim  rowIndex, colIndex, NumRows, NumColumns  As   Integer
139         rowIndex  =   1
140         colIndex  =   0
141          If  (table.Rows.Count  =   0 Then
142              Exit Sub
143          End   If
144
145         NumRows  =  table.Rows.Count  +   1
146         NumColumns  =  table.Columns.Count
147         oTable  =  oDocument.Tables.Add(oWordApplic.Selection.Range(), NumRows, NumColumns)
148
149
150          ' 初始化列
151          Dim  Row  As  DataRow
152          Dim  Col  As  DataColumn
153          ' For Each Col In table.Columns
154          '     colIndex = colIndex + 1
155          '     oTable.Cell(1, colIndex).Range.InsertAfter(Col.ColumnName)
156          ' Next
157
158          ' 将行添入表格
159          For   Each  Row  In  table.Rows
160             rowIndex  =  rowIndex  +   1
161             colIndex  =   0
162              For   Each  Col  In  table.Columns
163                 colIndex  =  colIndex  +   1
164                 oTable.Cell(rowIndex, colIndex).Range.InsertAfter(Row(Col.ColumnName))
165              Next
166          Next
167         oTable.Rows( 1 ).Delete()
168         oTable.AllowAutoFit  =   True
169         oTable.ApplyStyleFirstColumn  =   True
170         oTable.ApplyStyleHeadingRows  =   True
171
172      End Sub
173      ' 插入表格(修改为在原有表格的基础上添加数据)
174      Public   Sub  InsertTable2( ByRef  table  As  DataTable,  ByVal  strbmerge  As   String ByVal  totalrow  As   Integer )
175          Dim  oTable  As  Word.Table
176          Dim  rowIndex, colIndex, NumRows, NumColumns  As   Integer
177          Dim  strm()  As   String
178          Dim  i  As   Integer
179         rowIndex  =   1
180         colIndex  =   0
181
182          If  (table.Rows.Count  =   0 Then
183              Exit Sub
184          End   If
185
186         NumRows  =  table.Rows.Count  +   1
187         NumColumns  =  table.Columns.Count
188          ' oTable = oDocument.Tables.Add(oWordApplic.Selection.Range(), NumRows, NumColumns)
189
190
191          ' 初始化列
192          Dim  Row  As  DataRow
193          Dim  Col  As  DataColumn
194          ' For Each Col In table.Columns
195          '     colIndex = colIndex + 1
196          '     oTable.Cell(1, colIndex).Range.InsertAfter(Col.ColumnName)
197          ' Next
198
199          ' 将行添入表格
200          For   Each  Row  In  table.Rows
201             colIndex  =   0
202             GotoRightCell()
203             oWordApplic.Selection.InsertRows( 1 )
204              For   Each  Col  In  table.Columns
205                 GotoRightCell()
206                 colIndex  =  colIndex  +   1
207                  Try
208                     oWordApplic.Selection.TypeText(Row(Col.ColumnName))
209                  Catch  ex  As  Exception
210                     oWordApplic.Selection.TypeText( "   " )
211                  End   Try
212                  ' oWordApplic.Selection.Cell(rowIndex, colIndex).Range.InsertAfter(Row(Col.ColumnName))
213              Next
214          Next
215          ' 如果strbmerge不为空.则要合并相应的行和列
216          If  strbmerge.Trim().Length  <>   0   Then
217             strm  =  strbmerge.Split( " ; " )
218              For  i  =   1   To  strm.Length  -   1
219                  If  strm(i).Split( " , " ).Length  =   2   Then
220                     MergeDouble(totalrow, strm( 0 ), strm(i).Split( " , " )( 1 ), strm(i).Split( " , " )( 0 ))
221                  End   If
222                 MergeSingle(totalrow, strm( 0 ), strm(i))
223              Next
224          End   If
225          ' 删除可能多余的一行
226          ' GotoRightCell()
227          ' GotoDownCell()
228          ' oWordApplic.Selection.Rows.Delete()
229          ' oTable.AllowAutoFit = True
230          ' oTable.ApplyStyleFirstColumn = True
231          ' oTable.ApplyStyleHeadingRows = True
232      End Sub
233      ' 插入表格(专门适应工程结算工程量清单)
234      Public   Sub  InsertTableQD( ByRef  table  As  DataTable,  ByRef  table1  As  DataTable)
235          Dim  oTable  As  Word.Table
236          Dim  rowIndex, colIndex, NumRows, NumColumns  As   Integer
237          Dim  xmmc  As   String
238          Dim  i  As   Integer
239          Dim  j  As   Integer
240         rowIndex  =   1
241         colIndex  =   0
242
243          If  (table.Rows.Count  =   0 Then
244              Exit Sub
245          End   If
246
247         NumRows  =  table.Rows.Count  +   1
248         NumColumns  =  table.Columns.Count
249          ' oTable = oDocument.Tables.Add(oWordApplic.Selection.Range(), NumRows, NumColumns)
250
251
252          ' 初始化列
253          Dim  Row  As  DataRow
254          Dim  rowtemp  As  DataRow
255          Dim  row1()  As  DataRow
256          Dim  Col  As  DataColumn
257          Dim  coltemp  As  DataColumn
258          ' For Each Col In table.Columns
259          '     colIndex = colIndex + 1
260          '     oTable.Cell(1, colIndex).Range.InsertAfter(Col.ColumnName)
261          ' Next
262
263          ' 将行添入表格
264          For   Each  Row  In  table.Rows
265             colIndex  =   0
266             xmmc  =  Row( " 项目名称 " )
267             GotoRightCell()
268             oWordApplic.Selection.InsertRows( 1 )
269              For   Each  Col  In  table.Columns
270                 GotoRightCell()
271                  Try
272                      If  (Col.ColumnName  =   " 项目序号 " Then
273                         oWordApplic.Selection.TypeText(intToUpint( Val (Row(Col.ColumnName))))
274                      Else
275                         oWordApplic.Selection.TypeText(Row(Col.ColumnName))
276                      End   If
277                  Catch  ex  As  Exception
278                     oWordApplic.Selection.TypeText( "   " )
279                  End   Try
280                  ' oWordApplic.Selection.Cell(rowIndex, colIndex).Range.InsertAfter(Row(Col.ColumnName))
281              Next
282             row1  =  table1.Select( " 项目名称=' "   +  xmmc  +   " ' " )
283
284              For  i  =   0   To  row1.Length  -   1
285                 GotoRightCell()
286                 oWordApplic.Selection.InsertRows( 1 )
287                  For  j  =   0   To  table1.Columns.Count  -   1
288                      If  (table1.Columns(j).ColumnName  <>   " 项目名称 " Then
289                         GotoRightCell()
290                          Try
291                             oWordApplic.Selection.TypeText(row1(i)(j))
292                          Catch  ex  As  Exception
293                             oWordApplic.Selection.TypeText( "   " )
294                          End   Try
295                      End   If
296                      ' oWordApplic.Selection.Cell(rowIndex, colIndex).Range.InsertAfter(Row(Col.ColumnName))
297                  Next
298              Next
299
300
301
302          Next
303          ' 删除可能多余的一行
304          ' GotoRightCell()
305          ' GotoDownCell()
306          ' oWordApplic.Selection.Rows.Delete()
307          ' oTable.AllowAutoFit = True
308          ' oTable.ApplyStyleFirstColumn = True
309          ' oTable.ApplyStyleHeadingRows = True
310      End Sub
311      ' 插入表格,为了满足要求,在中间添加一根竖线
312      Public   Sub  InsertTable3( ByRef  table  As  DataTable,  ByVal  introw  As   Integer ByVal  intcol  As   Integer )
313          Dim  rowIndex, colIndex, NumRows, NumColumns  As   Integer
314          Dim  Row  As  DataRow
315          Dim  Col  As  DataColumn
316          If  (table.Rows.Count  =   0 Then
317              Exit Sub
318          End   If
319          ' 首先是拆分选中的单元格
320         oDocument.Tables( 1 ).Cell(introw,  3 ).Split(table.Rows.Count,  2 )
321          ' 选中初始的单元格
322         oDocument.Tables( 1 ).Cell(introw,  3 ).Select()
323          ' 将行添入表格
324          For   Each  Row  In  table.Rows
325              Try
326                 oDocument.Tables( 1 ).Cell(introw,  3 ).Range.InsertAfter(Row( 0 ))
327                 oDocument.Tables( 1 ).Cell(introw,  4 ).Range.InsertAfter(Row( 1 ))
328              Catch  ex  As  Exception
329                 oDocument.Tables( 1 ).Cell(introw,  3 ).Range.InsertAfter( "   " )
330                 oDocument.Tables( 1 ).Cell(introw,  4 ).Range.InsertAfter( "   " )
331              End   Try
332             introw  =  introw  +   1
333          Next
334      End Sub
335      ' 设置对齐
336      Public   Sub  SetAlignment( ByVal  strType  As   String )
337          Select   Case  strType
338              Case   " center "
339                 oWordApplic.Selection.ParagraphFormat.Alignment  =  Word.WdParagraphAlignment.wdAlignParagraphCenter
340              Case   " left "
341                 oWordApplic.Selection.ParagraphFormat.Alignment  =  Word.WdParagraphAlignment.wdAlignParagraphLeft
342              Case   " right "
343                 oWordApplic.Selection.ParagraphFormat.Alignment  =  Word.WdParagraphAlignment.wdAlignParagraphRight
344              Case   " justify "
345                 oWordApplic.Selection.ParagraphFormat.Alignment  =  Word.WdParagraphAlignment.wdAlignParagraphJustify
346          End   Select
347      End Sub
348      ' 设置字体
349      Public   Sub  SetStyle( ByVal  strFont  As   String )
350          Select   Case  strFont
351              Case   " bold "
352                 oWordApplic.Selection.Font.Bold  =   1
353              Case   " italic "
354                 oWordApplic.Selection.Font.Italic  =   1
355              Case   " underlined "
356                 oWordApplic.Selection.Font.Subscript  =   1
357          End   Select
358      End Sub
359      ' 取消字体风格
360      Public   Sub  DissableStyle()
361         oWordApplic.Selection.Font.Bold  =   0
362         oWordApplic.Selection.Font.Italic  =   0
363         oWordApplic.Selection.Font.Subscript  =   0
364      End Sub
365      ' 设置字体字号
366      Public   Sub  SetFontSize( ByVal  nSize  As   Integer )
367         oWordApplic.Selection.Font.Size  =  nSize
368      End Sub
369      ' 跳过本页
370      Public   Sub  InsertPageBreak()
371          Dim  pBreak  As   Integer
372         pBreak  =   CInt (Word.WdBreakType.wdPageBreak)
373         oWordApplic.Selection.InsertBreak(pBreak)
374      End Sub
375      ' 转到书签
376      Public   Sub  GotoBookMark( ByVal  strBookMark  As   String )
377          Dim  missing  =  System.Reflection.Missing.Value
378          Dim  BookMark  =   CInt (Word.WdGoToItem.wdGoToBookmark)
379         oWordApplic.Selection.GoTo(BookMark, missing, missing, strBookMark)
380      End Sub
381      ' 判断书签是否存在
382      Public   Function  BookMarkExist( ByVal  strBookMark  As   String As   Boolean
383          Dim  Exist  As   Boolean
384         Exist  =  oDocument.Bookmarks.Exists(strBookMark)
385          Return  Exist
386      End Function
387      ' 替换书签的内容
388      Public   Sub  ReplaceBookMark( ByVal  icurnum  As   String ByVal  strcontent  As   String )
389         strcontent  =  strcontent.Replace( " 0:00:00 " "" )
390         oDocument.Bookmarks(icurnum).Select()
391         oWordApplic.Selection.TypeText(strcontent)
392      End Sub
393
394      ' 得到书签的名称
395      Public   Function  GetBookMark( ByVal  icurnum  As   String ByRef  bo  As   Boolean As   String
396          Dim  strReturn  As   String
397          If   Right (oDocument.Bookmarks(icurnum).Name,  5 =   " TABLE "   Then
398             bo  =   True
399              Dim  strTemp  As   String
400             strTemp  =  oDocument.Bookmarks(icurnum).Name()
401             strReturn  =   Mid (strTemp,  1 Len (strTemp)  -   5 )
402          Else
403             bo  =   False
404             strReturn  =  oDocument.Bookmarks(icurnum).Name
405          End   If
406          Return  strReturn
407      End Function
408      ' 得到书签的名称
409      Public   Function  GetBookMark1( ByVal  icurnum  As   String As   String
410          Return  oDocument.Bookmarks(icurnum).Name
411      End Function
412      ' 转到文档结尾
413      Public   Sub  GotoTheEnd()
414          Dim  missing  =  System.Reflection.Missing.Value
415          Dim  unit  =  Word.WdUnits.wdStory
416         oWordApplic.Selection.EndKey(unit, missing)
417      End Sub
418      ' 转到文档开头
419      Public   Sub  GotoTheBegining()
420          Dim  missing  =  System.Reflection.Missing.Value
421          Dim  unit  =  Word.WdUnits.wdStory
422         oWordApplic.Selection.HomeKey(unit, missing)
423      End Sub
424      ' 删除多余的一行
425      Public   Sub  DelUnuseRow()
426         oWordApplic.Selection.Rows.Delete()
427      End Sub
428      ' 转到表格
429      Public   Sub  GotoTheTable( ByVal  ntable  As   Integer )
430          ' Dim missing = System.Reflection.Missing.Value
431          ' Dim what = Word.WdGoToItem.wdGoToTable
432          ' Dim which = Word.WdGoToDirection.wdGoToFirst
433          ' Dim count = ntable
434
435          ' oWordApplic.Selection.GoTo(what, which, count, missing)
436          ' oWordApplic.Selection.ClearFormatting()
437
438          ' oWordApplic.Selection.Text = ""
439         oRange  =  oDocument.Tables(ntable).Cell( 1 1 ).Range
440         oRange.Select()
441
442      End Sub
443      ' 转到表格的某个单元格
444      Public   Sub  GotoTableCell( ByVal  ntable  As   Integer ByVal  nRow  As   Integer ByVal  nColumn  As   Integer )
445         oRange  =  oDocument.Tables(ntable).Cell(nRow, nColumn).Range
446         oRange.Select()
447      End Sub
448      ' 表格中转到右面的单元格
449      Public   Sub  GotoRightCell()
450          Dim  missing  =  System.Reflection.Missing.Value
451          Dim  direction  =  Word.WdUnits.wdCell
452         oWordApplic.Selection.MoveRight(direction, missing, missing)
453      End Sub
454      ' 表格中转到左面的单元格
455      Public   Sub  GotoLeftCell()
456          Dim  missing  =  System.Reflection.Missing.Value
457          Dim  direction  =  Word.WdUnits.wdCell
458         oWordApplic.Selection.MoveLeft(direction, missing, missing)
459      End Sub
460      ' 表格中转到下面的单元格
461      Public   Sub  GotoDownCell()
462          Dim  missing  =  System.Reflection.Missing.Value
463          Dim  direction  =  Word.WdUnits.wdCell
464         oWordApplic.Selection.MoveDown(direction, missing, missing)
465      End Sub
466      ' 表格中转到上面的单元格
467      Public   Sub  GotoUpCell()
468          Dim  missing  =  System.Reflection.Missing.Value
469          Dim  direction  =  Word.WdUnits.wdCell
470         oWordApplic.Selection.MoveUp(direction, missing, missing)
471      End Sub
472      ' 文档中所有的书签总数
473      Public   Function  TotalBkM()  As   Integer
474          Return  oDocument.Bookmarks.Count
475      End Function
476      ' 选中书签
477      Public   Sub  SelectBkMk( ByVal  strName  As   String )
478         oDocument.Bookmarks.Item(strName).Select()
479      End Sub
480      ' 插入图片
481      Public   Sub  InsertPic( ByVal  FileName  As   String )
482          Dim  missing  =  System.Reflection.Missing.Value
483         oWordApplic.Selection.InlineShapes.AddPicture(FileName,  False True , missing).Select()
484         oShape  =  oWordApplic.Selection.InlineShapes( 1 ).ConvertToShape
485         oWordApplic.Selection.WholeStory()
486         oShape.ZOrder(Microsoft.Office.Core.MsoZOrderCmd.msoSendBehindText)
487      End Sub
488      ' 统一调整图片的位置.也就是往上面调整图片一半的高度
489      Public   Sub  SetCurPicHei()
490          Dim  e  As  Word.Shape
491          For   Each  e  In  oDocument.Shapes
492             oDocument.Shapes(e.Name).Select()
493             oWordApplic.Selection.ShapeRange.RelativeHorizontalPosition  =  Word.WdRelativeHorizontalPosition.wdRelativeHorizontalPositionPage
494             oWordApplic.Selection.ShapeRange.RelativeVerticalPosition  =  Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionParagraph
495             oWordApplic.Selection.ShapeRange.LockAnchor  =   True
496              ' oWordApplic.Selection.ShapeRange.IncrementTop(oDocument.Shapes(e.Name).Height)
497          Next
498      End Sub
499
500      Public   Sub  SetCurPicHei1()
501          Dim  e  As  Word.Shape
502          For   Each  e  In  oDocument.Shapes
503             oDocument.Shapes(e.Name).Select()
504             oWordApplic.Selection.ShapeRange.IncrementTop(oDocument.Shapes(e.Name).Height  /   2 )
505          Next
506      End Sub
507      Public   Sub  SetCurPicHei2()
508          Dim  e  As  Word.Shape
509          For   Each  e  In  oDocument.Shapes
510             oDocument.Shapes(e.Name).Select()
511             oWordApplic.Selection.ShapeRange.IncrementTop( - oDocument.Shapes(e.Name).Height  /   2 )
512          Next
513      End Sub
514      Public   Function  intToUpint( ByVal  a  As   Integer As   String
515          Dim  result  As   String   =   " 一百 "
516          Dim  a1, a2  As   Integer
517          Dim  strs()  As   String   =  { " " " " " " " " " " " " " " " " " " " " " " }
518          If  (a  <=   10 Then
519             result  =  strs(a)
520          ElseIf  (a  <   100 Then
521             a1  =  a  /   10
522             a2  =  a  Mod   10
523              If  (a  =   1 Then
524                 result  =   " "   +  strs(a2)
525              End   If
526          Else
527             result  =  strs(a1)  +   " "   +  strs(a2)
528          End   If
529          Return  result
530      End Function
531      ' 合并没有参照的某一列,一般来讲对应第一列
532      ' itotalrow 总行数
533      ' initrow   初始开始的行数,一般情况下该值不为0,没有标题栏的一般为0
534      ' intcol    列数
535      Public   Sub  MergeSingle( ByVal  itotalrow  As   Integer ByVal  initrow  As   Integer ByVal  intcol  As   Integer )
536         oDocument.Tables( 1 ).Cell(initrow  +   1 , intcol).Select()
537          Dim  irow  As   Integer        ' 当前行数
538          Dim  strValue  As   String     ' 循环比较的行初值
539          Dim  i  As   Integer
540          Dim  direction  =  Word.WdUnits.wdLine
541          Dim  extend  =  Word.WdMovementType.wdExtend
542
543         i  =   0
544         irow  =   1   +  initrow  ' 初始值为1
545          For  i  =   2   +  initrow  To  itotalrow  +  initrow
546
547             strValue  =  oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text
548              If  (oDocument.Tables( 1 ).Cell(i, intcol).Range.Text  =  oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text)  Then
549                  ' 这是对最后一次处理的特殊情况.
550                  If  (i  =  itotalrow  +  initrow)  Then
551                     oWordApplic.Selection.MoveDown(direction, (i  -  irow), extend)
552                      If  (i  -  irow  >=   1 Then
553                         oWordApplic.Selection.Cells.Merge()
554                      End   If
555                     oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text  =  strValue
556                  End   If
557              Else
558                 oWordApplic.Selection.MoveDown(direction, (i  -  irow  -   1 ), extend)
559                  If  (i  -  irow  -   1   >=   1 Then
560                     oWordApplic.Selection.Cells.Merge()
561                  End   If
562                 oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text  =  strValue
563                 irow  =  i
564                 oDocument.Tables( 1 ).Cell(irow, intcol).Select()
565              End   If
566          Next  i
567      End Sub
568      ' 合并有参照的某一列
569      ' itotalrow 总行数
570      ' initrow   初始开始的行数,一般情况下该值不为0,没有标题栏的一般为0
571      ' intcol    列数
572      ' basecol   参照合并的那一列
573      Public   Sub  MergeDouble( ByVal  itotalrow  As   Integer ByVal  initrow  As   Integer ByVal  intcol  As   Integer ByVal  basecol  As   Integer )
574         oDocument.Tables( 1 ).Cell(initrow  +   1 , intcol).Select()
575          Dim  irow  As   Integer        ' 当前行数
576          Dim  strValue  As   String     ' 循环比较的行初值
577          Dim  i  As   Integer
578          Dim  direction  =  Word.WdUnits.wdLine
579          Dim  extend  =  Word.WdMovementType.wdExtend
580
581         i  =   0
582         irow  =   1   +  initrow  ' 初始值为1
583          For  i  =   2   +  initrow  To  itotalrow  +  initrow
584
585             strValue  =  oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text
586              If  (oDocument.Tables( 1 ).Cell(i, intcol).Range.Text  =  oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text)  And  (getdata(i, basecol)  =  getdata(irow, basecol))  Then
587                  ' 这是对最后一次处理的特殊情况.
588                  If  (i  =  itotalrow  +  initrow)  Then
589                     oWordApplic.Selection.MoveDown(direction, (i  -  irow), extend)
590                      If  (i  -  irow  >=   1 Then
591                         oWordApplic.Selection.Cells.Merge()
592                      End   If
593                     oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text  =  strValue
594                  End   If
595              Else
596                 oWordApplic.Selection.MoveDown(direction, (i  -  irow  -   1 ), extend)
597                  If  (i  -  irow  -   1   >=   1 Then
598                     oWordApplic.Selection.Cells.Merge()
599                  End   If
600                 oDocument.Tables( 1 ).Cell(irow, intcol).Range.Text  =  strValue
601                 irow  =  i
602                 oDocument.Tables( 1 ).Cell(irow, intcol).Select()
603              End   If
604          Next  i
605      End Sub
606      ' 得到某个单元的值,如果为空的话,有两种情况.
607      ' 其一:是一个合并的单元格,取其上面的值
608      ' 其二:该单元格本来就是空值
609      Public   Function  getdata( ByVal  introw  As   Integer ByVal  intcol  As   Integer As   String
610          Try
611              If  (oDocument.Tables( 1 ).Cell(introw, intcol).Range.Text  =   ""   Or  (oDocument.Tables( 1 ).Cell(introw, intcol).Range.Text  =   Nothing ))  Then
612                 getdata  =  getdata(introw  -   1 , intcol)
613              Else
614                 getdata  =  oDocument.Tables( 1 ).Cell(introw, intcol).Range.Text
615              End   If
616          Catch  ex  As  Exception
617             getdata  =  getdata(introw  -   1 , intcol)
618          End   Try
619
620
621      End Function
622
End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值