激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼

Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼

2021-01-06 11:30Gavinjou大笨象 Java教程

這篇文章主要介紹了Java編程實(shí)現(xiàn)調(diào)用com操作Word方法實(shí)例代碼,代碼注釋很詳細(xì),在這里分給大家,需要的朋友可以參考下。

實(shí)例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
 * jacob操作MSword類
 * @author
 */
public class WordBean {
  // word文檔
  private Dispatch doc;
  // word運(yùn)行程序?qū)ο?
  private ActiveXComponent word;
  // 所有word文檔集合
  private Dispatch documents;
  // 選定的范圍或插入點(diǎn)
  private Dispatch selection;
  private boolean saveOnExit = true;
  public WordBean()throws Exception{
    if (word == null) {
      word = new ActiveXComponent("Word.Application");
      word.setProperty("Visible", new Variant(false));  //不可見打開word     
      word.setProperty("AutomationSecurity", new Variant(3)); //禁用宏
    }
    if (documents == null)
      documents = word.getProperty("Documents").toDispatch();
  }
  /**
   * 設(shè)置退出時(shí)參數(shù)
   *
   * @param saveOnExit
   *      boolean true-退出時(shí)保存文件,false-退出時(shí)不保存文件
   */
  public void setSaveOnExit(boolean saveOnExit) {
    this.saveOnExit = saveOnExit;
  }
  /**
   * 創(chuàng)建一個(gè)新的word文檔
   *
   */
  public void createNewDocument() {
    doc = Dispatch.call(documents, "Add").toDispatch();
    selection = Dispatch.get(word, "Selection").toDispatch();
  }
  /**
   * 打開一個(gè)已存在的文檔
   *
   * @param docPath
   */
  public void openDocument(String docPath) {
    closeDocument();
    doc = Dispatch.call(documents, "Open", docPath).toDispatch();
    selection = Dispatch.get(word, "Selection").toDispatch();
  }
  /**
   * 打開一個(gè)保護(hù)文檔,
   * @param docPath-文件全名
   * @param pwd-密碼
   */
  public void openDocumentOnlyRead(String docPath, String pwd)throws Exception {
    closeDocument();
//   doc = Dispatch.invoke(documents, "Open", Dispatch.Method, 
//       new Object[]{docPath, new Variant(false), new Variant(true), new Variant(true), pwd}, 
//       new int[1]).toDispatch();//打開word文件 
    doc = Dispatch.callN(documents, "Open", new Object[]{docPath, new Variant(false), 
        new Variant(true), new Variant(true), pwd, "", new Variant(false)}).toDispatch();
    selection = Dispatch.get(word, "Selection").toDispatch();
  }
  public void openDocument(String docPath, String pwd)throws Exception {
    closeDocument();    
    doc = Dispatch.callN(documents, "Open", new Object[]{docPath, new Variant(false), 
        new Variant(false), new Variant(true), pwd}).toDispatch();
    selection = Dispatch.get(word, "Selection").toDispatch();
  }
  /**
   * 把選定的內(nèi)容或插入點(diǎn)向上移動(dòng)
   *
   * @param pos
   *      移動(dòng)的距離
   */
  public void moveUp(int pos) {
    if (selection == null)
      selection = Dispatch.get(word, "Selection").toDispatch();
    for (int i = 0; i < pos; i++)
      Dispatch.call(selection, "MoveUp");
  }
  /**
   * 把選定的內(nèi)容或者插入點(diǎn)向下移動(dòng)
   *
   * @param pos
   *      移動(dòng)的距離
   */
  public void moveDown(int pos) {
    if (selection == null)
      selection = Dispatch.get(word, "Selection").toDispatch();
    for (int i = 0; i < pos; i++)
      Dispatch.call(selection, "MoveDown");
  }
  /**
   * 把選定的內(nèi)容或者插入點(diǎn)向左移動(dòng)
   *
   * @param pos
   *      移動(dòng)的距離
   */
  public void moveLeft(int pos) {
    if (selection == null)
      selection = Dispatch.get(word, "Selection").toDispatch();
    for (int i = 0; i < pos; i++) {
      Dispatch.call(selection, "MoveLeft");
    }
  }
  /**
   * 把選定的內(nèi)容或者插入點(diǎn)向右移動(dòng)
   *
   * @param pos
   *      移動(dòng)的距離
   */
  public void moveRight(int pos) {
    if (selection == null)
      selection = Dispatch.get(word, "Selection").toDispatch();
    for (int i = 0; i < pos; i++)
      Dispatch.call(selection, "MoveRight");
  }
  /**
   * 把插入點(diǎn)移動(dòng)到文件首位置
   *
   */
  public void moveStart() {
    if (selection == null)
      selection = Dispatch.get(word, "Selection").toDispatch();
    Dispatch.call(selection, "HomeKey", new Variant(6));
  }
  /**
   * 從選定內(nèi)容或插入點(diǎn)開始查找文本
   *
   * @param toFindText
   *      要查找的文本
   * @return boolean true-查找到并選中該文本,false-未查找到文本
   */
  @SuppressWarnings("static-access")
  public boolean find(String toFindText) {
    if (toFindText == null || toFindText.equals(""))
      return false;
    // 從selection所在位置開始查詢
    Dispatch find = word.call(selection, "Find").toDispatch();
    // 設(shè)置要查找的內(nèi)容
    Dispatch.put(find, "Text", toFindText);
    // 向前查找
    Dispatch.put(find, "Forward", "True");
    // 設(shè)置格式
    Dispatch.put(find, "Format", "True");
    // 大小寫匹配
    Dispatch.put(find, "MatchCase", "True");
    // 全字匹配
    Dispatch.put(find, "MatchWholeWord", "True");
    // 查找并選中
    return Dispatch.call(find, "Execute").getBoolean();
  }
  /**
   * 把選定選定內(nèi)容設(shè)定為替換文本
   *
   * @param toFindText
   *      查找字符串
   * @param newText
   *      要替換的內(nèi)容
   * @return
   */
  public boolean replaceText(String toFindText, String newText) {
    if (!find(toFindText))
      return false;
    Dispatch.put(selection, "Text", newText);
    return true;
  }
  /**
   * 全局替換文本
   *
   * @param toFindText
   *      查找字符串
   * @param newText
   *      要替換的內(nèi)容
   */
  public void replaceAllText(String toFindText, String newText) {
    while (find(toFindText)) {
      Dispatch.put(selection, "Text", newText);
      Dispatch.call(selection, "MoveRight");
    }
  }
  /**
   * 在當(dāng)前插入點(diǎn)插入字符串
   *
   * @param newText
   *      要插入的新字符串
   */
  public void insertText(String newText) {
    Dispatch.put(selection, "Text", newText);
  }
  /**
   *
   * @param toFindText
   *      要查找的字符串
   * @param imagePath
   *      圖片路徑
   * @return
   */
  public boolean replaceImage(String toFindText, String imagePath) {
    if (!find(toFindText))
      return false;
    Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
        "AddPicture", imagePath);
    return true;
  }
  /**
   * 全局替換圖片
   *
   * @param toFindText
   *      查找字符串
   * @param imagePath
   *      圖片路徑
   */
  public void replaceAllImage(String toFindText, String imagePath) {
    while (find(toFindText)) {
      Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
          "AddPicture", imagePath);
      Dispatch.call(selection, "MoveRight");
    }
  }
  /**
   * 在當(dāng)前插入點(diǎn)插入圖片
   *
   * @param imagePath
   *      圖片路徑
   */
  public void insertImage(String imagePath) {
    Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
        "AddPicture", imagePath);
  }
  /**
   * 合并單元格
   *
   * @param tableIndex
   * @param fstCellRowIdx
   * @param fstCellColIdx
   * @param secCellRowIdx
   * @param secCellColIdx
   */
  public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,
      int secCellRowIdx, int secCellColIdx) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    Dispatch fstCell = Dispatch.call(table, "Cell",
        new Variant(fstCellRowIdx), new Variant(fstCellColIdx))
        .toDispatch();
    Dispatch secCell = Dispatch.call(table, "Cell",
        new Variant(secCellRowIdx), new Variant(secCellColIdx))
        .toDispatch();
    Dispatch.call(fstCell, "Merge", secCell);
  }
  /**
   * 在指定的單元格里填寫數(shù)據(jù)
   *
   * @param tableIndex
   * @param cellRowIdx
   * @param cellColIdx
   * @param txt
   */
  public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
      String txt) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
        new Variant(cellColIdx)).toDispatch();
    Dispatch.call(cell, "Select");
    Dispatch.put(selection, "Text", txt);    
  }
  /**
   * 獲得指定的單元格里數(shù)據(jù)
   *
   * @param tableIndex
   * @param cellRowIdx
   * @param cellColIdx
   * @return
   */
  public String getTxtFromCell(int tableIndex, int cellRowIdx, int cellColIdx) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
        new Variant(cellColIdx)).toDispatch();
    Dispatch.call(cell, "Select"); 
    String ret = "";  
    ret = Dispatch.get(selection, "Text").toString();
    ret = ret.substring(0, ret.length()-1); //去掉最后的回車符;
    return ret;
  }
  /**
   * 在當(dāng)前文檔拷貝剪貼板數(shù)據(jù)
   * @param pos
   */
  public void pasteExcelSheet(String pos) {
    moveStart();
    if (this.find(pos)) {
      Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
      Dispatch.call(textRange, "Paste");
    }
  }
  /**
   * 在當(dāng)前文檔指定的位置拷貝表格
   *
   * @param pos
   *      當(dāng)前文檔指定的位置
   * @param tableIndex
   *      被拷貝的表格在word文檔中所處的位置
   */
  public void copyTable(String pos, int tableIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    Dispatch range = Dispatch.get(table, "Range").toDispatch();
    Dispatch.call(range, "Copy");
    if (this.find(pos)) {
      Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
      Dispatch.call(textRange, "Paste");
    }
  }
  /**
   * 在當(dāng)前文檔指定的位置拷貝來自另一個(gè)文檔中的表格
   *
   * @param anotherDocPath
   *      另一個(gè)文檔的磁盤路徑
   * @param tableIndex
   *      被拷貝的表格在另一格文檔中的位置
   * @param pos
   *      當(dāng)前文檔指定的位置
   */
  public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,
      String pos) {
    Dispatch doc2 = null;
    try {
      doc2 = Dispatch.call(documents, "Open", anotherDocPath)
          .toDispatch();
      // 所有表格
      Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();
      // 要填充的表格
      Dispatch table = Dispatch.call(tables, "Item",
          new Variant(tableIndex)).toDispatch();
      Dispatch range = Dispatch.get(table, "Range").toDispatch();
      Dispatch.call(range, "Copy");
      if (this.find(pos)) {
        Dispatch textRange = Dispatch.get(selection, "Range")
            .toDispatch();
        Dispatch.call(textRange, "Paste");
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (doc2 != null) {
        Dispatch.call(doc2, "Close", new Variant(saveOnExit));
        doc2 = null;
      }
    }
  }
  /**
   * 在當(dāng)前文檔指定的位置拷貝來自另一個(gè)文檔中的圖片
   *
   * @param anotherDocPath 另一個(gè)文檔的磁盤路徑
   * @param shapeIndex 被拷貝的圖片在另一格文檔中的位置
   * @param pos 當(dāng)前文檔指定的位置
   */
  public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,
      String pos) {
    Dispatch doc2 = null;
    try {
      doc2 = Dispatch.call(documents, "Open", anotherDocPath)
          .toDispatch();
      Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();
      Dispatch shape = Dispatch.call(shapes, "Item",
          new Variant(shapeIndex)).toDispatch();
      Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();
      Dispatch.call(imageRange, "Copy");
      if (this.find(pos)) {
        Dispatch textRange = Dispatch.get(selection, "Range")
            .toDispatch();
        Dispatch.call(textRange, "Paste");
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (doc2 != null) {
        Dispatch.call(doc2, "Close", new Variant(saveOnExit));
        doc2 = null;
      }
    }
  }
  /**
   * 創(chuàng)建表格
   *
   * @param pos
   *      位置
   * @param cols
   *      列數(shù)
   * @param rows
   *      行數(shù)
   */
  public void createTable(String pos, int numCols, int numRows) {
    if (find(pos)) {
      Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
      Dispatch range = Dispatch.get(selection, "Range").toDispatch();
      @SuppressWarnings("unused")
      Dispatch newTable = Dispatch.call(tables, "Add", range,
          new Variant(numRows), new Variant(numCols)).toDispatch();
      Dispatch.call(selection, "MoveRight");
    } else {
      Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
      Dispatch range = Dispatch.get(selection, "Range").toDispatch();
      @SuppressWarnings("unused")
      Dispatch newTable = Dispatch.call(tables, "Add", range,
          new Variant(numRows), new Variant(numCols)).toDispatch();
      Dispatch.call(selection, "MoveRight");
    }
  }
  /**
   * 在指定行前面增加行
   *
   * @param tableIndex
   *      word文件中的第N張表(從1開始)
   * @param rowIndex
   *      指定行的序號(hào)(從1開始)
   */
  public void addTableRow(int tableIndex, int rowIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
    Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex))
        .toDispatch();
    Dispatch.call(rows, "Add", new Variant(row));
  }
  /**
   * 在第1行前增加一行
   *
   * @param tableIndex
   * word文檔中的第N張表(從1開始)
   */
  public void addFirstTableRow(int tableIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
    Dispatch row = Dispatch.get(rows, "First").toDispatch();
    Dispatch.call(rows, "Add", new Variant(row));
  }
  /**
   * 在最后1行前增加一行
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   */
  public void addLastTableRow(int tableIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
    Dispatch row = Dispatch.get(rows, "Last").toDispatch();
    Dispatch.call(rows, "Add", new Variant(row));
  }
  /**
   * 增加一行
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   */
  public void addRow(int tableIndex) {
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
    Dispatch.call(rows, "Add");
  }
  /**
   * 增加一列
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   */
  public void addCol(int tableIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
    Dispatch.call(cols, "Add").toDispatch();
    Dispatch.call(cols, "AutoFit");
  }
  /**
   * 在指定列前面增加表格的列
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   * @param colIndex
   *      制定列的序號(hào) (從1開始)
   */
  public void addTableCol(int tableIndex, int colIndex) {
    // 所有表格
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
    System.out.println(Dispatch.get(cols, "Count"));
    Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex))
        .toDispatch();
    // Dispatch col = Dispatch.get(cols, "First").toDispatch();
    Dispatch.call(cols, "Add", col).toDispatch();
    Dispatch.call(cols, "AutoFit");
  }
  /**
   * 在第1列前增加一列
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   */
  public void addFirstTableCol(int tableIndex) {
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
    Dispatch col = Dispatch.get(cols, "First").toDispatch();
    Dispatch.call(cols, "Add", col).toDispatch();
    Dispatch.call(cols, "AutoFit");
  }
  /**
   * 在最后一列前增加一列
   *
   * @param tableIndex
   *      word文檔中的第N張表(從1開始)
   */
  public void addLastTableCol(int tableIndex) {
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    // 要填充的表格
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    // 表格的所有行
    Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
    Dispatch col = Dispatch.get(cols, "Last").toDispatch();
    Dispatch.call(cols, "Add", col).toDispatch();
    Dispatch.call(cols, "AutoFit");
  }
  /**
   * 自動(dòng)調(diào)整表格
   *
   */
  @SuppressWarnings("deprecation")
  public void autoFitTable() {
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    int count = Dispatch.get(tables, "Count").toInt();
    for (int i = 0; i < count; i++) {
      Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
          .toDispatch();
      Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
      Dispatch.call(cols, "AutoFit");
    }
  }
  /**
   * 調(diào)用word里的宏以調(diào)整表格的寬度,其中宏保存在document下
   *
   */
  @SuppressWarnings("deprecation")
  public void callWordMacro() {
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    int count = Dispatch.get(tables, "Count").toInt();
    Variant vMacroName = new Variant("Normal.NewMacros.tableFit");
    @SuppressWarnings("unused")
    Variant vParam = new Variant("param1");
    @SuppressWarnings("unused")
    Variant para[] = new Variant[] { vMacroName };
    for (int i = 0; i < count; i++) {
      Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
          .toDispatch();
      Dispatch.call(table, "Select");
      Dispatch.call(word, "Run", "tableFitContent");
    }
  }
  /**
   * 設(shè)置當(dāng)前選定內(nèi)容的字體
   *
   * @param boldSize
   * @param italicSize
   * @param underLineSize
   *      下劃線
   * @param colorSize
   *      字體顏色
   * @param size
   *      字體大小
   * @param name
   *      字體名稱
   */
  public void setFont(boolean bold, boolean italic, boolean underLine,
      String colorSize, String size, String name) {
    Dispatch font = Dispatch.get(selection, "Font").toDispatch();
    Dispatch.put(font, "Name", new Variant(name));
    Dispatch.put(font, "Bold", new Variant(bold));
    Dispatch.put(font, "Italic", new Variant(italic));
    Dispatch.put(font, "Underline", new Variant(underLine));
    Dispatch.put(font, "Color", colorSize);
    Dispatch.put(font, "Size", size);
  }
  /**
   * 設(shè)置單元格被選中
   *
   * @param tableIndex
   * @param cellRowIdx
   * @param cellColIdx
   */
  public void setTableCellSelected(int tableIndex, int cellRowIdx, int cellColIdx){
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
        .toDispatch();
    Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
        new Variant(cellColIdx)).toDispatch();
    Dispatch.call(cell, "Select");
  }
  /**
   * 設(shè)置選定單元格的垂直對(duì)起方式, 請(qǐng)使用setTableCellSelected選中一個(gè)單元格
   * @param align 0-頂端, 1-居中, 3-底端
   */
  public void setCellVerticalAlign(int verticalAlign){
    Dispatch cells = Dispatch.get(selection, "Cells").toDispatch();   
    Dispatch.put(cells, "VerticalAlignment", new Variant(verticalAlign));    
  }
  /**
   * 設(shè)置當(dāng)前文檔中所有表格水平居中方式及其它一些格式,用在將word文件轉(zhuǎn)化為html中,針對(duì)申報(bào)表
   */
  @SuppressWarnings("deprecation")
  public void setApplyTableFormat(){
    Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
    int tabCount = Integer.valueOf(Dispatch.get(tables, "Count").toString());  //System.out.println(tabCount);
    System.out.println("*******************************************************");
    for(int i=1; i<=tabCount; i++){   
      Dispatch table = Dispatch.call(tables, "Item", new Variant(i)).toDispatch();
      Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
        
      if(i==1){
        Dispatch.put(rows, "Alignment", new Variant(2));  //1-居中,2-Right
        continue ;
      }
      Dispatch.put(rows, "Alignment", new Variant(1));  //1-居中     
      Dispatch.call(table, "AutoFitBehavior", new Variant(1));//設(shè)置自動(dòng)調(diào)整表格方式,1-根據(jù)窗口自動(dòng)調(diào)整
      Dispatch.put(table, "PreferredWidthType", new Variant(1));
      Dispatch.put(table, "PreferredWidth", new Variant(700));      
      System.out.println(Dispatch.get(rows, "HeightRule").toString());
      Dispatch.put(rows, "HeightRule", new Variant(1));  //0-自動(dòng)wdRowHeightAuto,1-最小值wdRowHeightAtLeast, 2-固定wdRowHeightExactly  
      Dispatch.put(rows, "Height", new Variant(0.04*28.35));     
      //int oldAlign = Integer.valueOf(Dispatch.get(rows, "Alignment").toString());  
      //System.out.println("Algin:" + oldAlign);
    }  
  }
  /**
   * 設(shè)置段落格式
   *
   * @param alignment
   *     0-左對(duì)齊, 1-右對(duì)齊, 2-右對(duì)齊, 3-兩端對(duì)齊, 4-分散對(duì)齊
   * @param lineSpaceingRule 
   * @param lineUnitBefore  
   * @param lineUnitAfter 
   * @param characterUnitFirstLineIndent
   */
  public void setParagraphsProperties(int alignment, int lineSpaceingRule,
      int lineUnitBefore, int lineUnitAfter, int characterUnitFirstLineIndent){
    Dispatch paragraphs = Dispatch.get(selection, "Paragraphs").toDispatch();  
    Dispatch.put(paragraphs, "Alignment", new Variant(alignment));       //對(duì)齊方式     
    Dispatch.put(paragraphs, "LineSpacingRule", new Variant(lineSpaceingRule)); //行距
    Dispatch.put(paragraphs, "LineUnitBefore", new Variant(lineUnitBefore));  //段前
    Dispatch.put(paragraphs, "LineUnitAfter", new Variant(lineUnitAfter));   //段后  
    Dispatch.put(paragraphs, "CharacterUnitFirstLineIndent"
        new Variant(characterUnitFirstLineIndent));             //首行縮進(jìn)字符數(shù)
  }  
  /**
   * 設(shè)置當(dāng)前段落格式, 使用前,請(qǐng)先選中段落
   */
  public void getParagraphsProperties(){
    Dispatch paragraphs = Dispatch.get(selection, "Paragraphs").toDispatch();    
    String val = Dispatch.get(paragraphs, "LineSpacingRule").toString();  //行距
    val = Dispatch.get(paragraphs, "Alignment").toString();     //對(duì)齊方式 
    val = Dispatch.get(paragraphs, "LineUnitBefore").toString();  //段前行數(shù)
    val = Dispatch.get(paragraphs, "LineUnitAfter").toString();   //段后行數(shù)
    val = Dispatch.get(paragraphs, "FirstLineIndent").toString();  //首行縮進(jìn)
    val = Dispatch.get(paragraphs, "CharacterUnitFirstLineIndent").toString(); //首行縮進(jìn)字符數(shù)
  }
  /**
   * 文件保存或另存為
   *
   * @param savePath
   *      保存或另存為路徑
   */
  public void save(String savePath) {
    Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),
        "FileSaveAs", savePath);
  }  
  /**
   * 文件保存為html格式
   *
   * @param savePath
   * @param htmlPath
   */
  public void saveAsHtml(String htmlPath){
    Dispatch.invoke(doc,"SaveAs", Dispatch.Method, 
        new Object[]{htmlPath, new Variant(8)}, new int[1]); 
  }
  /**
   * 關(guān)閉文檔
   *@param val 0不保存修改 -1 保存修改 -2 提示是否保存修改
   */
  public void closeDocument(int val) {
    Dispatch.call(doc, "Close", new Variant(val));
    doc = null;
  }
  /**
   * 關(guān)閉當(dāng)前word文檔
   *
   */
  public void closeDocument() {
    if (doc != null) {
      Dispatch.call(doc, "Save");
      Dispatch.call(doc, "Close", new Variant(saveOnExit));
      doc = null;
    }
  }
  public void closeDocumentWithoutSave(){
    if (doc != null) {     
      Dispatch.call(doc, "Close", new Variant(false));
      doc = null;
    }
  }
  /**
   * 關(guān)閉全部應(yīng)用
   *
   */
  public void close() {
    //closeDocument();
    if (word != null) {
      Dispatch.call(word, "Quit");
      word = null;
    }
    selection = null;
    documents = null;
  }
  /**
   * 打印當(dāng)前word文檔
   *
   */
  public void printFile() {
    if (doc != null) {
      Dispatch.call(doc, "PrintOut");
    }
  }
  /**
   * 保護(hù)當(dāng)前檔,如果不存在, 使用expression.Protect(Type, NoReset, Password)
   *
   * @param pwd
   * WdProtectionType 可以是下列 WdProtectionType 常量之一:
   *   1-wdAllowOnlyComments, 2-wdAllowOnlyFormFields, 0-wdAllowOnlyRevisions,
   *   -1-wdNoProtection, 3-wdAllowOnlyReading
   *
   * 使用參照 main1()
   */
  public void protectedWord(String pwd){
    String protectionType = Dispatch.get(doc, "ProtectionType").toString();
    if(protectionType.equals("-1")){  
      Dispatch.call(doc, "Protect", new Variant(3), new Variant(true), pwd);
    }  
  }
  /**
   * 解除文檔保護(hù),如果存在
   * @param pwd
   * WdProtectionType 常量之一(Long 類型,只讀):
   *   1-wdAllowOnlyComments,2-wdAllowOnlyFormFields、
   *   0-wdAllowOnlyRevisions,-1-wdNoProtection, 3-wdAllowOnlyReading
   *
   *   使用參照 main1()
   */
  public void unProtectedWord(String pwd){
    String protectionType = Dispatch.get(doc, "ProtectionType").toString();
    if(protectionType.equals("3")){ 
      Dispatch.call(doc, "Unprotect", pwd);
    }
  }
  /**
   * 設(shè)置word文檔安全級(jí)別
   * @param value
   *   1-msoAutomationSecurityByUI 使用“安全”對(duì)話框指定的安全設(shè)置。
   *   2-msoAutomationSecurityForceDisable 在程序打開的所有文件中禁用所有宏,而不顯示任何安全提醒。
   *   3-msoAutomationSecurityLow 啟用所有宏,這是啟動(dòng)應(yīng)用程序時(shí)的默認(rèn)值。
   */
  public void setAutomationSecurity(int value){
    word.setProperty("AutomationSecurity", new Variant(value)); 
  }
  /**
   * 讀取文檔中第paragraphsIndex段文字的內(nèi)容;
   * @param paragraphsIndex
   * @return
   */
  public String getParagraphs(int paragraphsIndex){
    String ret = "";
    Dispatch paragraphs = Dispatch.get(doc, "Paragraphs").toDispatch(); // 所有段落
    int paragraphCount = Dispatch.get(paragraphs, "Count").getInt();      // 一共的段落數(shù)
    Dispatch paragraph = null;
    Dispatch range = null;
    if(paragraphCount > paragraphsIndex && 0 < paragraphsIndex){ 
      paragraph = Dispatch.call(paragraphs, "Item", new Variant(paragraphsIndex)).toDispatch();
      range = Dispatch.get(paragraph, "Range").toDispatch();
      ret = Dispatch.get(range, "Text").toString();
    }  
    return ret;
  }
  /**
   * 設(shè)置頁眉文字
   * @param cont
   * @return
   *
   * Sub AddHeaderText()
   * '設(shè)置頁眉或頁腳中的文字
   * '由 Headers、Footers 和 HeaderFooter 屬性返回 HeaderFooter 對(duì)象。下列示例更改當(dāng)前頁眉中的文字。
   * With ActiveDocument.ActiveWindow.View
   *   .SeekView = wdSeekCurrentPageHeader
   *   Selection.HeaderFooter.Range.Text = "Header text"
   *   .SeekView = wdSeekMainDocument
   * End With
   * End Sub
   */
  public void setHeaderContent(String cont){
    Dispatch activeWindow = Dispatch.get(doc, "ActiveWindow").toDispatch();
    Dispatch view = Dispatch.get(activeWindow, "View").toDispatch();
    //Dispatch seekView = Dispatch.get(view, "SeekView").toDispatch();
    Dispatch.put(view, "SeekView", new Variant(9));     //wdSeekCurrentPageHeader-9
      
    Dispatch headerFooter = Dispatch.get(selection, "HeaderFooter").toDispatch();
    Dispatch range = Dispatch.get(headerFooter, "Range").toDispatch();
    Dispatch.put(range, "Text", new Variant(cont)); 
    //String content = Dispatch.get(range, "Text").toString();
    Dispatch font = Dispatch.get(range, "Font").toDispatch();
      
    Dispatch.put(font, "Name", new Variant("楷體_GB2312"));
    Dispatch.put(font, "Bold", new Variant(true));
    //Dispatch.put(font, "Italic", new Variant(true));
    //Dispatch.put(font, "Underline", new Variant(true));
    Dispatch.put(font, "Size", 9);
    Dispatch.put(view, "SeekView", new Variant(0));     //wdSeekMainDocument-0恢復(fù)視圖;
  }
  public static void main(String[] args)throws Exception{
    WordBean word = new WordBean(); 
    word.openDocument("D:/競(jìng)價(jià)平臺(tái).doc");
    word.setHeaderContent("*****************88設(shè)置頁眉內(nèi)容11111111111111111!");
    //word.unProtectedWord("1qaz");
    //word.protectedWord("123");
    System.out.print(word.getParagraphs(3));
    word.closeDocument();
    word.close();
  }
}

//更新目錄并自動(dòng)保存辦法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**啟動(dòng)word進(jìn)程*/
     ActiveXComponent app = new ActiveXComponent("Word.Application");
     app.setProperty("Visible", new Variant(false)); 
     Dispatch docs = app.getProperty("Documents").toDispatch(); 
     /**打開word文檔*/
     Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] { "D:/aaa/a.doc", new Variant(false), 
             new Variant(false) }, new int[1]).toDispatch();
     Dispatch activeDocument = app.getProperty("ActiveDocument").toDispatch();
     /**獲取目錄*/
     Dispatch tablesOfContents = Dispatch.get(activeDocument,"TablesOfContents").toDispatch();
     /**獲取第一個(gè)目錄。若有多個(gè)目錄,則傳遞對(duì)應(yīng)的參數(shù)*/
     Variant tablesOfContent = Dispatch.call(tablesOfContents, "Item", new Variant(1));
     /**更新目錄,有兩個(gè)方法:Update 更新域,UpdatePageNumbers 只更新頁碼*/
     Dispatch toc = tablesOfContent.toDispatch();
     toc.call(toc, "Update");
     /**另存為*/
     /**關(guān)閉word文檔*/
     Dispatch.call(doc, "Save");
     Dispatch.call(doc, "Close", new Variant(-1));
     /**退出word進(jìn)程*/
     app.invoke("Quit", new Variant[] {});

總結(jié):

本文關(guān)于Java編程實(shí)現(xiàn)調(diào)用com操作Word方法的介紹就到這里,希望對(duì)大家有所幫助。如果有什么問題可以留言,小編會(huì)及時(shí)回復(fù)大家的。

原文鏈接:https://www.2cto.com/kf/201612/578458.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产福利不卡一区二区三区 | 午夜精品小视频 | 久草在线播放视频 | 91高清在线观看 | 午夜视频观看 | 国产成人精品日本亚洲语音 | 天天色综合2 | 久久老司机 | 国产在线播放一区二区 | 免费黄色大片网站 | 网站激情| av在线日韩| 日本黄色a视频 | 国产欧美日韩在线不卡第一页 | 最新中文在线视频 | 久久草在线视频国产 | 中国女警察一级毛片视频 | 在线看一区二区三区 | 99精品视频在线导航 | av电影免费在线看 | 国产精品18久久久久久久 | 日本不卡一区二区三区在线观看 | 91精品国产91久久久 | 免费不卡一区 | 成人毛片免费在线 | 曰韩在线视频 | h视频在线播放 | 欧美乱淫 | 亚洲国产精品一区二区三区 | 粉嫩av一区二区三区四区在线观看 | 色99999| 久久色网站 | 另类亚洲孕妇分娩网址 | 久久av免费 | 欧洲色阁中文字幕 | 国产一级小视频 | 国内精品视频饥渴少妇在线播放 | 国产成人精品一区在线播放 | 学霸趴下被打肿光屁股小说 | av手机在线电影 | 日本看片一区二区三区高清 |