實例代碼如下:
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 */ // word文檔 private Dispatch doc; // word運行程序對象 private ActiveXComponent word; // 所有word文檔集合 private Dispatch documents; // 選定的范圍或插入點 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(); } /** * 設置退出時參數 * * @param saveOnExit * boolean true-退出時保存文件,false-退出時不保存文件 */ public void setSaveOnExit( boolean saveOnExit) { this .saveOnExit = saveOnExit; } /** * 創建一個新的word文檔 * */ public void createNewDocument() { doc = Dispatch.call(documents, "Add" ).toDispatch(); selection = Dispatch.get(word, "Selection" ).toDispatch(); } /** * 打開一個已存在的文檔 * * @param docPath */ public void openDocument(String docPath) { closeDocument(); doc = Dispatch.call(documents, "Open" , docPath).toDispatch(); selection = Dispatch.get(word, "Selection" ).toDispatch(); } /** * 打開一個保護文檔, * @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(); } /** * 把選定的內容或插入點向上移動 * * @param pos * 移動的距離 */ 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" ); } /** * 把選定的內容或者插入點向下移動 * * @param pos * 移動的距離 */ 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" ); } /** * 把選定的內容或者插入點向左移動 * * @param pos * 移動的距離 */ 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" ); } } /** * 把選定的內容或者插入點向右移動 * * @param pos * 移動的距離 */ 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" ); } /** * 把插入點移動到文件首位置 * */ public void moveStart() { if (selection == null ) selection = Dispatch.get(word, "Selection" ).toDispatch(); Dispatch.call(selection, "HomeKey" , new Variant( 6 )); } /** * 從選定內容或插入點開始查找文本 * * @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(); // 設置要查找的內容 Dispatch.put(find, "Text" , toFindText); // 向前查找 Dispatch.put(find, "Forward" , "True" ); // 設置格式 Dispatch.put(find, "Format" , "True" ); // 大小寫匹配 Dispatch.put(find, "MatchCase" , "True" ); // 全字匹配 Dispatch.put(find, "MatchWholeWord" , "True" ); // 查找并選中 return Dispatch.call(find, "Execute" ).getBoolean(); } /** * 把選定選定內容設定為替換文本 * * @param toFindText * 查找字符串 * @param newText * 要替換的內容 * @return */ public boolean replaceText(String toFindText, String newText) { if (!find(toFindText)) return false ; Dispatch.put(selection, "Text" , newText); return true ; } /** * 全局替換文本 * * @param toFindText * 查找字符串 * @param newText * 要替換的內容 */ public void replaceAllText(String toFindText, String newText) { while (find(toFindText)) { Dispatch.put(selection, "Text" , newText); Dispatch.call(selection, "MoveRight" ); } } /** * 在當前插入點插入字符串 * * @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" ); } } /** * 在當前插入點插入圖片 * * @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); } /** * 在指定的單元格里填寫數據 * * @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); } /** * 獲得指定的單元格里數據 * * @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; } /** * 在當前文檔拷貝剪貼板數據 * @param pos */ public void pasteExcelSheet(String pos) { moveStart(); if ( this .find(pos)) { Dispatch textRange = Dispatch.get(selection, "Range" ).toDispatch(); Dispatch.call(textRange, "Paste" ); } } /** * 在當前文檔指定的位置拷貝表格 * * @param pos * 當前文檔指定的位置 * @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" ); } } /** * 在當前文檔指定的位置拷貝來自另一個文檔中的表格 * * @param anotherDocPath * 另一個文檔的磁盤路徑 * @param tableIndex * 被拷貝的表格在另一格文檔中的位置 * @param pos * 當前文檔指定的位置 */ 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 ; } } } /** * 在當前文檔指定的位置拷貝來自另一個文檔中的圖片 * * @param anotherDocPath 另一個文檔的磁盤路徑 * @param shapeIndex 被拷貝的圖片在另一格文檔中的位置 * @param pos 當前文檔指定的位置 */ 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 ; } } } /** * 創建表格 * * @param pos * 位置 * @param cols * 列數 * @param rows * 行數 */ 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 * 指定行的序號(從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 * 制定列的序號 (從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" ); } /** * 自動調整表格 * */ @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" ); } } /** * 調用word里的宏以調整表格的寬度,其中宏保存在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" ); } } /** * 設置當前選定內容的字體 * * @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); } /** * 設置單元格被選中 * * @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" ); } /** * 設置選定單元格的垂直對起方式, 請使用setTableCellSelected選中一個單元格 * @param align 0-頂端, 1-居中, 3-底端 */ public void setCellVerticalAlign( int verticalAlign){ Dispatch cells = Dispatch.get(selection, "Cells" ).toDispatch(); Dispatch.put(cells, "VerticalAlignment" , new Variant(verticalAlign)); } /** * 設置當前文檔中所有表格水平居中方式及其它一些格式,用在將word文件轉化為html中,針對申報表 */ @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 )); //設置自動調整表格方式,1-根據窗口自動調整 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-自動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); } } /** * 設置段落格式 * * @param alignment * 0-左對齊, 1-右對齊, 2-右對齊, 3-兩端對齊, 4-分散對齊 * @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)); //對齊方式 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)); //首行縮進字符數 } /** * 設置當前段落格式, 使用前,請先選中段落 */ public void getParagraphsProperties(){ Dispatch paragraphs = Dispatch.get(selection, "Paragraphs" ).toDispatch(); String val = Dispatch.get(paragraphs, "LineSpacingRule" ).toString(); //行距 val = Dispatch.get(paragraphs, "Alignment" ).toString(); //對齊方式 val = Dispatch.get(paragraphs, "LineUnitBefore" ).toString(); //段前行數 val = Dispatch.get(paragraphs, "LineUnitAfter" ).toString(); //段后行數 val = Dispatch.get(paragraphs, "FirstLineIndent" ).toString(); //首行縮進 val = Dispatch.get(paragraphs, "CharacterUnitFirstLineIndent" ).toString(); //首行縮進字符數 } /** * 文件保存或另存為 * * @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 ]); } /** * 關閉文檔 *@param val 0不保存修改 -1 保存修改 -2 提示是否保存修改 */ public void closeDocument( int val) { Dispatch.call(doc, "Close" , new Variant(val)); doc = null ; } /** * 關閉當前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 ; } } /** * 關閉全部應用 * */ public void close() { //closeDocument(); if (word != null ) { Dispatch.call(word, "Quit" ); word = null ; } selection = null ; documents = null ; } /** * 打印當前word文檔 * */ public void printFile() { if (doc != null ) { Dispatch.call(doc, "PrintOut" ); } } /** * 保護當前檔,如果不存在, 使用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); } } /** * 解除文檔保護,如果存在 * @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); } } /** * 設置word文檔安全級別 * @param value * 1-msoAutomationSecurityByUI 使用“安全”對話框指定的安全設置。 * 2-msoAutomationSecurityForceDisable 在程序打開的所有文件中禁用所有宏,而不顯示任何安全提醒。 * 3-msoAutomationSecurityLow 啟用所有宏,這是啟動應用程序時的默認值。 */ public void setAutomationSecurity( int value){ word.setProperty( "AutomationSecurity" , new Variant(value)); } /** * 讀取文檔中第paragraphsIndex段文字的內容; * @param paragraphsIndex * @return */ public String getParagraphs( int paragraphsIndex){ String ret = "" ; Dispatch paragraphs = Dispatch.get(doc, "Paragraphs" ).toDispatch(); // 所有段落 int paragraphCount = Dispatch.get(paragraphs, "Count" ).getInt(); // 一共的段落數 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; } /** * 設置頁眉文字 * @param cont * @return * * Sub AddHeaderText() * '設置頁眉或頁腳中的文字 * '由 Headers、Footers 和 HeaderFooter 屬性返回 HeaderFooter 對象。下列示例更改當前頁眉中的文字。 * 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恢復視圖; } public static void main(String[] args) throws Exception{ WordBean word = new WordBean(); word.openDocument( "D:/競價平臺.doc" ); word.setHeaderContent( "*****************88設置頁眉內容11111111111111111!" ); //word.unProtectedWord("1qaz"); //word.protectedWord("123"); System.out.print(word.getParagraphs( 3 )); word.closeDocument(); word.close(); } } |
//更新目錄并自動保存辦法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/**啟動word進程*/ 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(); /**獲取第一個目錄。若有多個目錄,則傳遞對應的參數*/ Variant tablesOfContent = Dispatch.call(tablesOfContents, "Item" , new Variant( 1 )); /**更新目錄,有兩個方法:Update 更新域,UpdatePageNumbers 只更新頁碼*/ Dispatch toc = tablesOfContent.toDispatch(); toc.call(toc, "Update" ); /**另存為*/ /**關閉word文檔*/ Dispatch.call(doc, "Save" ); Dispatch.call(doc, "Close" , new Variant(- 1 )); /**退出word進程*/ app.invoke( "Quit" , new Variant[] {}); |
總結:
本文關于Java編程實現調用com操作Word方法的介紹就到這里,希望對大家有所幫助。如果有什么問題可以留言,小編會及時回復大家的。
原文鏈接:https://www.2cto.com/kf/201612/578458.html