- 浏览: 270357 次
- 性别:
- 来自: 武汉
文章分类
JACOB API
- 博客分类:
- Java
01.import com.jacob.activeX.ActiveXComponent;
02.import com.jacob.com.ComThread;
03.import com.jacob.com.Dispatch;
04.import com.jacob.com.Variant;
05./** *//***
06. *
07. * @author mawenwu
08. *
09. */
10.public class MSWordManager {
11. // word文档
12. private Dispatch doc;
13. // word运行程序对象
14. private ActiveXComponent word;
15. // 所有word文档集合
16. private Dispatch documents;
17. // 选定的范围或插入点
18. private Dispatch selection;
19. private boolean saveOnExit = true;
20. public MSWordManager() {
21. ComThread.InitSTA();
22. if (word == null) {
23. word = new ActiveXComponent("Word.Application");
24. word.setProperty("Visible", new Variant(false));
25. }
26. if (documents == null)
27. documents = word.getProperty("Documents").toDispatch();
28. }
29. /** *//**
30. * 设置退出时参数
31. *
32. * @param saveOnExit
33. * boolean true-退出时保存文件,false-退出时不保存文件
34. */
35. public void setSaveOnExit(boolean saveOnExit) {
36. this.saveOnExit = saveOnExit;
37. }
38. /** *//**
39. * 创建一个新的word文档
40. *
41. */
42. public void createNewDocument() {
43. doc = Dispatch.call(documents, "Add").toDispatch();
44. selection = Dispatch.get(word, "Selection").toDispatch();
45. }
46. /** *//**
47. * 打开一个已存在的文档
48. *
49. * @param docPath
50. */
51. public void openDocument(String docPath) {
52. closeDocument();
53. doc = Dispatch.call(documents, "Open", docPath).toDispatch();
54. selection = Dispatch.get(word, "Selection").toDispatch();
55. }
56. /** *//**
57. * 把选定的内容或插入点向上移动
58. *
59. * @param pos
60. * 移动的距离
61. */
62. public void moveUp(int pos) {
63. if (selection == null)
64. selection = Dispatch.get(word, "Selection").toDispatch();
65. for (int i = 0; i < pos; i++)
66. Dispatch.call(selection, "MoveUp");
67. }
68. /** *//**
69. * 把选定的内容或者插入点向下移动
70. *
71. * @param pos
72. * 移动的距离
73. */
74. public void moveDown(int pos) {
75. if (selection == null)
76. selection = Dispatch.get(word, "Selection").toDispatch();
77. for (int i = 0; i < pos; i++)
78. Dispatch.call(selection, "MoveDown");
79. }
80. /** *//**
81. * 把选定的内容或者插入点向左移动
82. *
83. * @param pos
84. * 移动的距离
85. */
86. public void moveLeft(int pos) {
87. if (selection == null)
88. selection = Dispatch.get(word, "Selection").toDispatch();
89. for (int i = 0; i < pos; i++) {
90. Dispatch.call(selection, "MoveLeft");
91. }
92. }
93. /** *//**
94. * 把选定的内容或者插入点向右移动
95. *
96. * @param pos
97. * 移动的距离
98. */
99. public void moveRight(int pos) {
100. if (selection == null)
101. selection = Dispatch.get(word, "Selection").toDispatch();
102. for (int i = 0; i < pos; i++)
103. Dispatch.call(selection, "MoveRight");
104. }
105. /** *//**
106. * 把插入点移动到文件首位置
107. *
108. */
109. public void moveStart() {
110. if (selection == null)
111. selection = Dispatch.get(word, "Selection").toDispatch();
112. Dispatch.call(selection, "HomeKey", new Variant(6));
113. }
114. /** *//**
115. * 从选定内容或插入点开始查找文本
116. *
117. * @param toFindText
118. * 要查找的文本
119. * @return boolean true-查找到并选中该文本,false-未查找到文本
120. */
121. public boolean find(String toFindText) {
122. if (toFindText == null || toFindText.equals(""))
123. return false;
124. // 从selection所在位置开始查询
125. Dispatch find = word.call(selection, "Find").toDispatch();
126. // 设置要查找的内容
127. Dispatch.put(find, "Text", toFindText);
128. // 向前查找
129. Dispatch.put(find, "Forward", "True");
130. // 设置格式
131. Dispatch.put(find, "Format", "True");
132. // 大小写匹配
133. Dispatch.put(find, "MatchCase", "True");
134. // 全字匹配
135. Dispatch.put(find, "MatchWholeWord", "True");
136. // 查找并选中
137. return Dispatch.call(find, "Execute").getBoolean();
138. }
139. /** *//**
140. * 把选定选定内容设定为替换文本
141. *
142. * @param toFindText
143. * 查找字符串
144. * @param newText
145. * 要替换的内容
146. * @return
147. */
148. public boolean replaceText(String toFindText, String newText) {
149. if (!find(toFindText))
150. return false;
151. Dispatch.put(selection, "Text", newText);
152. return true;
153. }
154. /** *//**
155. * 全局替换文本
156. *
157. * @param toFindText
158. * 查找字符串
159. * @param newText
160. * 要替换的内容
161. */
162. public void replaceAllText(String toFindText, String newText) {
163. while (find(toFindText)) {
164. Dispatch.put(selection, "Text", newText);
165. Dispatch.call(selection, "MoveRight");
166. }
167. }
168. /** *//**
169. * 在当前插入点插入字符串
170. *
171. * @param newText
172. * 要插入的新字符串
173. */
174. public void insertText(String newText) {
175. Dispatch.put(selection, "Text", newText);
176. }
177. /** *//**
178. *
179. * @param toFindText
180. * 要查找的字符串
181. * @param imagePath
182. * 图片路径
183. * @return
184. */
185. public boolean replaceImage(String toFindText, String imagePath) {
186. if (!find(toFindText))
187. return false;
188. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
189. "AddPicture", imagePath);
190. return true;
191. }
192. /** *//**
193. * 全局替换图片
194. *
195. * @param toFindText
196. * 查找字符串
197. * @param imagePath
198. * 图片路径
199. */
200. public void replaceAllImage(String toFindText, String imagePath) {
201. while (find(toFindText)) {
202. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
203. "AddPicture", imagePath);
204. Dispatch.call(selection, "MoveRight");
205. }
206. }
207. /** *//**
208. * 在当前插入点插入图片
209. *
210. * @param imagePath
211. * 图片路径
212. */
213. public void insertImage(String imagePath) {
214. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
215. "AddPicture", imagePath);
216. }
217. /** *//**
218. * 合并单元格
219. *
220. * @param tableIndex
221. * @param fstCellRowIdx
222. * @param fstCellColIdx
223. * @param secCellRowIdx
224. * @param secCellColIdx
225. */
226. public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,
227. int secCellRowIdx, int secCellColIdx) {
228. // 所有表格
229. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
230. // 要填充的表格
231. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
232. .toDispatch();
233. Dispatch fstCell = Dispatch.call(table, "Cell",
234. new Variant(fstCellRowIdx), new Variant(fstCellColIdx))
235. .toDispatch();
236. Dispatch secCell = Dispatch.call(table, "Cell",
237. new Variant(secCellRowIdx), new Variant(secCellColIdx))
238. .toDispatch();
239. Dispatch.call(fstCell, "Merge", secCell);
240. }
241. /** *//**
242. * 在指定的单元格里填写数据
243. *
244. * @param tableIndex
245. * @param cellRowIdx
246. * @param cellColIdx
247. * @param txt
248. */
249. public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
250. String txt) {
251. // 所有表格
252. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
253. // 要填充的表格
254. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
255. .toDispatch();
256. Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
257. new Variant(cellColIdx)).toDispatch();
258. Dispatch.call(cell, "Select");
259. Dispatch.put(selection, "Text", txt);
260. }
261. /** *//**
262. * 在指定的单元格里填写数据
263. *
264. * @param tableIndex
265. * @param cellRowIdx
266. * @param cellColIdx
267. * @param txt
268. */
269. public void putTxtToCellCenter(int tableIndex, int cellRowIdx,
270. int cellColIdx, String txt) {
271. // 所有表格
272. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
273. // 要填充的表格
274. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
275. .toDispatch();
276. Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
277. new Variant(cellColIdx)).toDispatch();
278. Dispatch.call(cell, "Select");
279. Dispatch alignment = Dispatch.get(selection, "ParagraphFormat")
280. .toDispatch();
281. Dispatch.put(alignment, "Alignment", "3");
282. Dispatch.put(selection, "Text", txt);
283. }
284. /** *//**
285. * 在当前文档拷贝剪贴板数据
286. *
287. * @param pos
288. */
289. public void pasteExcelSheet(String pos) {
290. moveStart();
291. if (this.find(pos)) {
292. Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
293. Dispatch.call(textRange, "Paste");
294. }
295. }
296. /** *//**
297. * 在当前文档指定的位置拷贝表格
298. *
299. * @param pos
300. * 当前文档指定的位置
301. * @param tableIndex
302. * 被拷贝的表格在word文档中所处的位置
303. */
304. public void copyTable(String pos, int tableIndex) {
305. // 所有表格
306. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
307. // 要填充的表格
308. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
309. .toDispatch();
310. Dispatch range = Dispatch.get(table, "Range").toDispatch();
311. Dispatch.call(range, "Copy");
312. if (this.find(pos)) {
313. Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
314. Dispatch.call(textRange, "Paste");
315. }
316. }
317. /** *//**
318. * 在当前文档指定的位置拷贝来自另一个文档中的表格
319. *
320. * @param anotherDocPath
321. * 另一个文档的磁盘路径
322. * @param tableIndex
323. * 被拷贝的表格在另一格文档中的位置
324. * @param pos
325. * 当前文档指定的位置
326. */
327. public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,
328. String pos) {
329. Dispatch doc2 = null;
330. try {
331. doc2 = Dispatch.call(documents, "Open", anotherDocPath)
332. .toDispatch();
333. // 所有表格
334. Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();
335. // 要填充的表格
336. Dispatch table = Dispatch.call(tables, "Item",
337. new Variant(tableIndex)).toDispatch();
338. Dispatch range = Dispatch.get(table, "Range").toDispatch();
339. Dispatch.call(range, "Copy");
340. if (this.find(pos)) {
341. Dispatch textRange = Dispatch.get(selection, "Range")
342. .toDispatch();
343. Dispatch.call(textRange, "Paste");
344. }
345. } catch (Exception e) {
346. e.printStackTrace();
347. } finally {
348. if (doc2 != null) {
349. Dispatch.call(doc2, "Close", new Variant(saveOnExit));
350. doc2 = null;
351. }
352. }
353. }
354. /** *//**
355. * 在当前文档指定的位置拷贝来自另一个文档中的图片
356. *
357. * @param anotherDocPath
358. * 另一个文档的磁盘路径
359. * @param shapeIndex
360. * 被拷贝的图片在另一格文档中的位置
361. * @param pos
362. * 当前文档指定的位置
363. */
364. public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,
365. String pos) {
366. Dispatch doc2 = null;
367. try {
368. doc2 = Dispatch.call(documents, "Open", anotherDocPath)
369. .toDispatch();
370. Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();
371. Dispatch shape = Dispatch.call(shapes, "Item",
372. new Variant(shapeIndex)).toDispatch();
373. Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();
374. Dispatch.call(imageRange, "Copy");
375. if (this.find(pos)) {
376. Dispatch textRange = Dispatch.get(selection, "Range")
377. .toDispatch();
378. Dispatch.call(textRange, "Paste");
379. }
380. } catch (Exception e) {
381. e.printStackTrace();
382. } finally {
383. if (doc2 != null) {
384. Dispatch.call(doc2, "Close", new Variant(saveOnExit));
385. doc2 = null;
386. }
387. }
388. }
389. /** *//**
390. * 创建表格
391. *
392. * @param pos
393. * 位置
394. * @param cols
395. * 列数
396. * @param rows
397. * 行数
398. */
399. public void createTable(String pos, int numCols, int numRows) {
400. if (find(pos)) {
401. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
402. Dispatch range = Dispatch.get(selection, "Range").toDispatch();
403. Dispatch newTable = Dispatch.call(tables, "Add", range,
404. new Variant(numRows), new Variant(numCols)).toDispatch();
405. Dispatch.call(selection, "MoveRight");
406. }
407. }
408. /** *//**
409. * 在指定行前面增加行
410. *
411. * @param tableIndex
412. * word文件中的第N张表(从1开始)
413. * @param rowIndex
414. * 指定行的序号(从1开始)
415. */
416. public void addTableRow(int tableIndex, int rowIndex) {
417. // 所有表格
418. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
419. // 要填充的表格
420. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
421. .toDispatch();
422. // 表格的所有行
423. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
424. Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex))
425. .toDispatch();
426. Dispatch.call(rows, "Add", new Variant(row));
427. }
428. /** *//**
429. * 在第1行前增加一行
430. *
431. * @param tableIndex
432. * word文档中的第N张表(从1开始)
433. */
434. public void addFirstTableRow(int tableIndex) {
435. // 所有表格
436. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
437. // 要填充的表格
438. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
439. .toDispatch();
440. // 表格的所有行
441. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
442. Dispatch row = Dispatch.get(rows, "First").toDispatch();
443. Dispatch.call(rows, "Add", new Variant(row));
444. }
445. /** *//**
446. * 在最后1行前增加一行
447. *
448. * @param tableIndex
449. * word文档中的第N张表(从1开始)
450. */
451. public void addLastTableRow(int tableIndex) {
452. // 所有表格
453. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
454. // 要填充的表格
455. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
456. .toDispatch();
457. // 表格的所有行
458. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
459. Dispatch row = Dispatch.get(rows, "Last").toDispatch();
460. Dispatch.call(rows, "Add", new Variant(row));
461. }
462. /** *//**
463. * 增加一行
464. *
465. * @param tableIndex
466. * word文档中的第N张表(从1开始)
467. */
468. public void addRow(int tableIndex) {
469. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
470. // 要填充的表格
471. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
472. .toDispatch();
473. // 表格的所有行
474. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
475. Dispatch.call(rows, "Add");
476. }
477. /** *//**
478. * 增加一列
479. *
480. * @param tableIndex
481. * word文档中的第N张表(从1开始)
482. */
483. public void addCol(int tableIndex) {
484. // 所有表格
485. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
486. // 要填充的表格
487. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
488. .toDispatch();
489. // 表格的所有行
490. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
491. Dispatch.call(cols, "Add").toDispatch();
492. Dispatch.call(cols, "AutoFit");
493. }
494. /** *//**
495. * 在指定列前面增加表格的列
496. *
497. * @param tableIndex
498. * word文档中的第N张表(从1开始)
499. * @param colIndex
500. * 制定列的序号 (从1开始)
501. */
502. public void addTableCol(int tableIndex, int colIndex) {
503. // 所有表格
504. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
505. // 要填充的表格
506. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
507. .toDispatch();
508. // 表格的所有行
509. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
510. System.out.println(Dispatch.get(cols, "Count"));
511. Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex))
512. .toDispatch();
513. // Dispatch col = Dispatch.get(cols, "First").toDispatch();
514. Dispatch.call(cols, "Add", col).toDispatch();
515. Dispatch.call(cols, "AutoFit");
516. }
517. /** *//**
518. * 在第1列前增加一列
519. *
520. * @param tableIndex
521. * word文档中的第N张表(从1开始)
522. */
523. public void addFirstTableCol(int tableIndex) {
524. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
525. // 要填充的表格
526. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
527. .toDispatch();
528. // 表格的所有行
529. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
530. Dispatch col = Dispatch.get(cols, "First").toDispatch();
531. Dispatch.call(cols, "Add", col).toDispatch();
532. Dispatch.call(cols, "AutoFit");
533. }
534. /** *//**
535. * 在最后一列前增加一列
536. *
537. * @param tableIndex
538. * word文档中的第N张表(从1开始)
539. */
540. public void addLastTableCol(int tableIndex) {
541. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
542. // 要填充的表格
543. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
544. .toDispatch();
545. // 表格的所有行
546. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
547. Dispatch col = Dispatch.get(cols, "Last").toDispatch();
548. Dispatch.call(cols, "Add", col).toDispatch();
549. Dispatch.call(cols, "AutoFit");
550. }
551. /** *//**
552. * 设置当前选定内容的字体
553. *
554. * @param boldSize
555. * @param italicSize
556. * @param underLineSize
557. * 下划线
558. * @param colorSize
559. * 字体颜色
560. * @param size
561. * 字体大小
562. * @param name
563. * 字体名称
564. */
565. public void setFont(boolean bold, boolean italic, boolean underLine,
566. String colorSize, String size, String name) {
567. Dispatch font = Dispatch.get(selection, "Font").toDispatch();
568. Dispatch.put(font, "Name", new Variant(name));
569. Dispatch.put(font, "Bold", new Variant(bold));
570. Dispatch.put(font, "Italic", new Variant(italic));
571. Dispatch.put(font, "Underline", new Variant(underLine));
572. Dispatch.put(font, "Color", colorSize);
573. Dispatch.put(font, "Size", size);
574. }
575. public void setFontCenter(String name) {
576. Dispatch font = Dispatch.get(selection, "Font").toDispatch();
577. Dispatch alignment = Dispatch.get(selection, "ParagraphFormat")
578. .toDispatch();
579. Dispatch.put(alignment, "Alignment", "3");
580. Dispatch.call(selection, "TypeText", name);
581. }
582. /** *//**
583. * 文件保存或另存为
584. *
585. * @param savePath
586. * 保存或另存为路径
587. */
588. public void save(String savePath) {
589. Dispatch.call(doc, "SaveAs", savePath); // 保存
590. /**//*
591. * Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),
592. * "FileSaveAs", savePath);
593. */
594. }
595. /** *//**
596. * 关闭当前word文档
597. *
598. */
599. public void closeDocument() {
600. if (doc != null) {
601. Dispatch.call(doc, "Save");
602. Dispatch.call(doc, "Close", new Variant(saveOnExit));
603. doc = null;
604. }
605. }
606. /** *//**
607. * 关闭全部应用
608. *
609. */
610. public void close() {
611. closeDocument();
612. if (word != null) {
613. Dispatch.call(word, "Quit");
614. word = null;
615. }
616. selection = null;
617. documents = null;
618. ComThread.Release();
619. }
620. /** *//**
621. * 打印当前word文档
622. *
623. */
624. public void printFile() {
625. if (doc != null) {
626. Dispatch.call(doc, "PrintOut");
627. }
628. }
629. /** *//**
630. * 删除一行
631. *
632. * @param tableIndex
633. * word文档中的第N张表(从1开始)
634. */
635. public void delRow(int tableIndex) {
636. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
637. // 要填充的表格
638. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
639. .toDispatch();
640. // 表格的所有行
641. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
642. Object temp1 = Dispatch.get(rows, "Count");
643. String temp2 = temp1.toString();
644. int count = Integer.parseInt(temp2);
645. while (count > 1) {
646. Dispatch row = Dispatch.get(rows, "Last").toDispatch();
647. Dispatch.call(row, "Delete");
648. rows = Dispatch.get(table, "Rows").toDispatch();
649. temp1 = Dispatch.get(rows, "Count");
650. temp2 = temp1.toString();
651. count = Integer.parseInt(temp2);
652. }
653. }
654. public void setProp(String sName, String sValue) {
655. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
656. .toDispatch();
657. Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();
658. String sOldVal = Dispatch.get(prop, "Value").toString();
659. if (!sOldVal.equals(sValue))
660. Dispatch.put(prop, "Value", sValue);
661. }
662. /** *//**
663. * @param nType:
664. * 1, number; 2,bool; 3,date; 4,str;
665. */
666. public void addProp(String sName, int nType, String sValue) {
667. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
668. .toDispatch();
669. Dispatch prop = null;
670. try {
671. prop = Dispatch.call(props, "Item", sName).toDispatch();
672. } catch (Exception e) {
673. prop = null;
674. }
675. if (prop != null)
676. return;
677. // 1, number; 2,bool; 3,date; 4,str;
678. prop = Dispatch.call(props, "Add", sName, false, nType, sValue)
679. .toDispatch();
680. Dispatch.put(prop, "Value", sValue);
681. }
682. public String getProp(String sName) {
683. String sValue = null;
684. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
685. .toDispatch();
686. Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();
687. sValue = Dispatch.get(prop, "Value").toString();
688. @SuppressWarnings("unused")
689. String sType = Dispatch.get(prop, "Type").toString();
690. try {
691. Dispatch prop0 = Dispatch.call(doc, "CustomDocumentProperties",
692. sName).toDispatch();
693. sValue = Dispatch.get(prop0, "Value").toString();
694. } catch (Exception e) {
695. e.printStackTrace();
696. }
697. return sValue;
698. }
699. public void fack_change() {
700. Dispatch _sel = Dispatch.call(doc, "Range", 0, 0).toDispatch();
701. Dispatch.call(_sel, "InsertBefore", "A");
702. Dispatch.call(_sel, "Select");
703. Dispatch.call(_sel, "Delete");
704. }
705.
706.}
02.import com.jacob.com.ComThread;
03.import com.jacob.com.Dispatch;
04.import com.jacob.com.Variant;
05./** *//***
06. *
07. * @author mawenwu
08. *
09. */
10.public class MSWordManager {
11. // word文档
12. private Dispatch doc;
13. // word运行程序对象
14. private ActiveXComponent word;
15. // 所有word文档集合
16. private Dispatch documents;
17. // 选定的范围或插入点
18. private Dispatch selection;
19. private boolean saveOnExit = true;
20. public MSWordManager() {
21. ComThread.InitSTA();
22. if (word == null) {
23. word = new ActiveXComponent("Word.Application");
24. word.setProperty("Visible", new Variant(false));
25. }
26. if (documents == null)
27. documents = word.getProperty("Documents").toDispatch();
28. }
29. /** *//**
30. * 设置退出时参数
31. *
32. * @param saveOnExit
33. * boolean true-退出时保存文件,false-退出时不保存文件
34. */
35. public void setSaveOnExit(boolean saveOnExit) {
36. this.saveOnExit = saveOnExit;
37. }
38. /** *//**
39. * 创建一个新的word文档
40. *
41. */
42. public void createNewDocument() {
43. doc = Dispatch.call(documents, "Add").toDispatch();
44. selection = Dispatch.get(word, "Selection").toDispatch();
45. }
46. /** *//**
47. * 打开一个已存在的文档
48. *
49. * @param docPath
50. */
51. public void openDocument(String docPath) {
52. closeDocument();
53. doc = Dispatch.call(documents, "Open", docPath).toDispatch();
54. selection = Dispatch.get(word, "Selection").toDispatch();
55. }
56. /** *//**
57. * 把选定的内容或插入点向上移动
58. *
59. * @param pos
60. * 移动的距离
61. */
62. public void moveUp(int pos) {
63. if (selection == null)
64. selection = Dispatch.get(word, "Selection").toDispatch();
65. for (int i = 0; i < pos; i++)
66. Dispatch.call(selection, "MoveUp");
67. }
68. /** *//**
69. * 把选定的内容或者插入点向下移动
70. *
71. * @param pos
72. * 移动的距离
73. */
74. public void moveDown(int pos) {
75. if (selection == null)
76. selection = Dispatch.get(word, "Selection").toDispatch();
77. for (int i = 0; i < pos; i++)
78. Dispatch.call(selection, "MoveDown");
79. }
80. /** *//**
81. * 把选定的内容或者插入点向左移动
82. *
83. * @param pos
84. * 移动的距离
85. */
86. public void moveLeft(int pos) {
87. if (selection == null)
88. selection = Dispatch.get(word, "Selection").toDispatch();
89. for (int i = 0; i < pos; i++) {
90. Dispatch.call(selection, "MoveLeft");
91. }
92. }
93. /** *//**
94. * 把选定的内容或者插入点向右移动
95. *
96. * @param pos
97. * 移动的距离
98. */
99. public void moveRight(int pos) {
100. if (selection == null)
101. selection = Dispatch.get(word, "Selection").toDispatch();
102. for (int i = 0; i < pos; i++)
103. Dispatch.call(selection, "MoveRight");
104. }
105. /** *//**
106. * 把插入点移动到文件首位置
107. *
108. */
109. public void moveStart() {
110. if (selection == null)
111. selection = Dispatch.get(word, "Selection").toDispatch();
112. Dispatch.call(selection, "HomeKey", new Variant(6));
113. }
114. /** *//**
115. * 从选定内容或插入点开始查找文本
116. *
117. * @param toFindText
118. * 要查找的文本
119. * @return boolean true-查找到并选中该文本,false-未查找到文本
120. */
121. public boolean find(String toFindText) {
122. if (toFindText == null || toFindText.equals(""))
123. return false;
124. // 从selection所在位置开始查询
125. Dispatch find = word.call(selection, "Find").toDispatch();
126. // 设置要查找的内容
127. Dispatch.put(find, "Text", toFindText);
128. // 向前查找
129. Dispatch.put(find, "Forward", "True");
130. // 设置格式
131. Dispatch.put(find, "Format", "True");
132. // 大小写匹配
133. Dispatch.put(find, "MatchCase", "True");
134. // 全字匹配
135. Dispatch.put(find, "MatchWholeWord", "True");
136. // 查找并选中
137. return Dispatch.call(find, "Execute").getBoolean();
138. }
139. /** *//**
140. * 把选定选定内容设定为替换文本
141. *
142. * @param toFindText
143. * 查找字符串
144. * @param newText
145. * 要替换的内容
146. * @return
147. */
148. public boolean replaceText(String toFindText, String newText) {
149. if (!find(toFindText))
150. return false;
151. Dispatch.put(selection, "Text", newText);
152. return true;
153. }
154. /** *//**
155. * 全局替换文本
156. *
157. * @param toFindText
158. * 查找字符串
159. * @param newText
160. * 要替换的内容
161. */
162. public void replaceAllText(String toFindText, String newText) {
163. while (find(toFindText)) {
164. Dispatch.put(selection, "Text", newText);
165. Dispatch.call(selection, "MoveRight");
166. }
167. }
168. /** *//**
169. * 在当前插入点插入字符串
170. *
171. * @param newText
172. * 要插入的新字符串
173. */
174. public void insertText(String newText) {
175. Dispatch.put(selection, "Text", newText);
176. }
177. /** *//**
178. *
179. * @param toFindText
180. * 要查找的字符串
181. * @param imagePath
182. * 图片路径
183. * @return
184. */
185. public boolean replaceImage(String toFindText, String imagePath) {
186. if (!find(toFindText))
187. return false;
188. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
189. "AddPicture", imagePath);
190. return true;
191. }
192. /** *//**
193. * 全局替换图片
194. *
195. * @param toFindText
196. * 查找字符串
197. * @param imagePath
198. * 图片路径
199. */
200. public void replaceAllImage(String toFindText, String imagePath) {
201. while (find(toFindText)) {
202. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
203. "AddPicture", imagePath);
204. Dispatch.call(selection, "MoveRight");
205. }
206. }
207. /** *//**
208. * 在当前插入点插入图片
209. *
210. * @param imagePath
211. * 图片路径
212. */
213. public void insertImage(String imagePath) {
214. Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
215. "AddPicture", imagePath);
216. }
217. /** *//**
218. * 合并单元格
219. *
220. * @param tableIndex
221. * @param fstCellRowIdx
222. * @param fstCellColIdx
223. * @param secCellRowIdx
224. * @param secCellColIdx
225. */
226. public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,
227. int secCellRowIdx, int secCellColIdx) {
228. // 所有表格
229. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
230. // 要填充的表格
231. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
232. .toDispatch();
233. Dispatch fstCell = Dispatch.call(table, "Cell",
234. new Variant(fstCellRowIdx), new Variant(fstCellColIdx))
235. .toDispatch();
236. Dispatch secCell = Dispatch.call(table, "Cell",
237. new Variant(secCellRowIdx), new Variant(secCellColIdx))
238. .toDispatch();
239. Dispatch.call(fstCell, "Merge", secCell);
240. }
241. /** *//**
242. * 在指定的单元格里填写数据
243. *
244. * @param tableIndex
245. * @param cellRowIdx
246. * @param cellColIdx
247. * @param txt
248. */
249. public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
250. String txt) {
251. // 所有表格
252. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
253. // 要填充的表格
254. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
255. .toDispatch();
256. Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
257. new Variant(cellColIdx)).toDispatch();
258. Dispatch.call(cell, "Select");
259. Dispatch.put(selection, "Text", txt);
260. }
261. /** *//**
262. * 在指定的单元格里填写数据
263. *
264. * @param tableIndex
265. * @param cellRowIdx
266. * @param cellColIdx
267. * @param txt
268. */
269. public void putTxtToCellCenter(int tableIndex, int cellRowIdx,
270. int cellColIdx, String txt) {
271. // 所有表格
272. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
273. // 要填充的表格
274. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
275. .toDispatch();
276. Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
277. new Variant(cellColIdx)).toDispatch();
278. Dispatch.call(cell, "Select");
279. Dispatch alignment = Dispatch.get(selection, "ParagraphFormat")
280. .toDispatch();
281. Dispatch.put(alignment, "Alignment", "3");
282. Dispatch.put(selection, "Text", txt);
283. }
284. /** *//**
285. * 在当前文档拷贝剪贴板数据
286. *
287. * @param pos
288. */
289. public void pasteExcelSheet(String pos) {
290. moveStart();
291. if (this.find(pos)) {
292. Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
293. Dispatch.call(textRange, "Paste");
294. }
295. }
296. /** *//**
297. * 在当前文档指定的位置拷贝表格
298. *
299. * @param pos
300. * 当前文档指定的位置
301. * @param tableIndex
302. * 被拷贝的表格在word文档中所处的位置
303. */
304. public void copyTable(String pos, int tableIndex) {
305. // 所有表格
306. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
307. // 要填充的表格
308. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
309. .toDispatch();
310. Dispatch range = Dispatch.get(table, "Range").toDispatch();
311. Dispatch.call(range, "Copy");
312. if (this.find(pos)) {
313. Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
314. Dispatch.call(textRange, "Paste");
315. }
316. }
317. /** *//**
318. * 在当前文档指定的位置拷贝来自另一个文档中的表格
319. *
320. * @param anotherDocPath
321. * 另一个文档的磁盘路径
322. * @param tableIndex
323. * 被拷贝的表格在另一格文档中的位置
324. * @param pos
325. * 当前文档指定的位置
326. */
327. public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,
328. String pos) {
329. Dispatch doc2 = null;
330. try {
331. doc2 = Dispatch.call(documents, "Open", anotherDocPath)
332. .toDispatch();
333. // 所有表格
334. Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();
335. // 要填充的表格
336. Dispatch table = Dispatch.call(tables, "Item",
337. new Variant(tableIndex)).toDispatch();
338. Dispatch range = Dispatch.get(table, "Range").toDispatch();
339. Dispatch.call(range, "Copy");
340. if (this.find(pos)) {
341. Dispatch textRange = Dispatch.get(selection, "Range")
342. .toDispatch();
343. Dispatch.call(textRange, "Paste");
344. }
345. } catch (Exception e) {
346. e.printStackTrace();
347. } finally {
348. if (doc2 != null) {
349. Dispatch.call(doc2, "Close", new Variant(saveOnExit));
350. doc2 = null;
351. }
352. }
353. }
354. /** *//**
355. * 在当前文档指定的位置拷贝来自另一个文档中的图片
356. *
357. * @param anotherDocPath
358. * 另一个文档的磁盘路径
359. * @param shapeIndex
360. * 被拷贝的图片在另一格文档中的位置
361. * @param pos
362. * 当前文档指定的位置
363. */
364. public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,
365. String pos) {
366. Dispatch doc2 = null;
367. try {
368. doc2 = Dispatch.call(documents, "Open", anotherDocPath)
369. .toDispatch();
370. Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();
371. Dispatch shape = Dispatch.call(shapes, "Item",
372. new Variant(shapeIndex)).toDispatch();
373. Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();
374. Dispatch.call(imageRange, "Copy");
375. if (this.find(pos)) {
376. Dispatch textRange = Dispatch.get(selection, "Range")
377. .toDispatch();
378. Dispatch.call(textRange, "Paste");
379. }
380. } catch (Exception e) {
381. e.printStackTrace();
382. } finally {
383. if (doc2 != null) {
384. Dispatch.call(doc2, "Close", new Variant(saveOnExit));
385. doc2 = null;
386. }
387. }
388. }
389. /** *//**
390. * 创建表格
391. *
392. * @param pos
393. * 位置
394. * @param cols
395. * 列数
396. * @param rows
397. * 行数
398. */
399. public void createTable(String pos, int numCols, int numRows) {
400. if (find(pos)) {
401. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
402. Dispatch range = Dispatch.get(selection, "Range").toDispatch();
403. Dispatch newTable = Dispatch.call(tables, "Add", range,
404. new Variant(numRows), new Variant(numCols)).toDispatch();
405. Dispatch.call(selection, "MoveRight");
406. }
407. }
408. /** *//**
409. * 在指定行前面增加行
410. *
411. * @param tableIndex
412. * word文件中的第N张表(从1开始)
413. * @param rowIndex
414. * 指定行的序号(从1开始)
415. */
416. public void addTableRow(int tableIndex, int rowIndex) {
417. // 所有表格
418. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
419. // 要填充的表格
420. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
421. .toDispatch();
422. // 表格的所有行
423. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
424. Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex))
425. .toDispatch();
426. Dispatch.call(rows, "Add", new Variant(row));
427. }
428. /** *//**
429. * 在第1行前增加一行
430. *
431. * @param tableIndex
432. * word文档中的第N张表(从1开始)
433. */
434. public void addFirstTableRow(int tableIndex) {
435. // 所有表格
436. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
437. // 要填充的表格
438. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
439. .toDispatch();
440. // 表格的所有行
441. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
442. Dispatch row = Dispatch.get(rows, "First").toDispatch();
443. Dispatch.call(rows, "Add", new Variant(row));
444. }
445. /** *//**
446. * 在最后1行前增加一行
447. *
448. * @param tableIndex
449. * word文档中的第N张表(从1开始)
450. */
451. public void addLastTableRow(int tableIndex) {
452. // 所有表格
453. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
454. // 要填充的表格
455. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
456. .toDispatch();
457. // 表格的所有行
458. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
459. Dispatch row = Dispatch.get(rows, "Last").toDispatch();
460. Dispatch.call(rows, "Add", new Variant(row));
461. }
462. /** *//**
463. * 增加一行
464. *
465. * @param tableIndex
466. * word文档中的第N张表(从1开始)
467. */
468. public void addRow(int tableIndex) {
469. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
470. // 要填充的表格
471. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
472. .toDispatch();
473. // 表格的所有行
474. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
475. Dispatch.call(rows, "Add");
476. }
477. /** *//**
478. * 增加一列
479. *
480. * @param tableIndex
481. * word文档中的第N张表(从1开始)
482. */
483. public void addCol(int tableIndex) {
484. // 所有表格
485. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
486. // 要填充的表格
487. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
488. .toDispatch();
489. // 表格的所有行
490. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
491. Dispatch.call(cols, "Add").toDispatch();
492. Dispatch.call(cols, "AutoFit");
493. }
494. /** *//**
495. * 在指定列前面增加表格的列
496. *
497. * @param tableIndex
498. * word文档中的第N张表(从1开始)
499. * @param colIndex
500. * 制定列的序号 (从1开始)
501. */
502. public void addTableCol(int tableIndex, int colIndex) {
503. // 所有表格
504. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
505. // 要填充的表格
506. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
507. .toDispatch();
508. // 表格的所有行
509. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
510. System.out.println(Dispatch.get(cols, "Count"));
511. Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex))
512. .toDispatch();
513. // Dispatch col = Dispatch.get(cols, "First").toDispatch();
514. Dispatch.call(cols, "Add", col).toDispatch();
515. Dispatch.call(cols, "AutoFit");
516. }
517. /** *//**
518. * 在第1列前增加一列
519. *
520. * @param tableIndex
521. * word文档中的第N张表(从1开始)
522. */
523. public void addFirstTableCol(int tableIndex) {
524. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
525. // 要填充的表格
526. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
527. .toDispatch();
528. // 表格的所有行
529. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
530. Dispatch col = Dispatch.get(cols, "First").toDispatch();
531. Dispatch.call(cols, "Add", col).toDispatch();
532. Dispatch.call(cols, "AutoFit");
533. }
534. /** *//**
535. * 在最后一列前增加一列
536. *
537. * @param tableIndex
538. * word文档中的第N张表(从1开始)
539. */
540. public void addLastTableCol(int tableIndex) {
541. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
542. // 要填充的表格
543. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
544. .toDispatch();
545. // 表格的所有行
546. Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
547. Dispatch col = Dispatch.get(cols, "Last").toDispatch();
548. Dispatch.call(cols, "Add", col).toDispatch();
549. Dispatch.call(cols, "AutoFit");
550. }
551. /** *//**
552. * 设置当前选定内容的字体
553. *
554. * @param boldSize
555. * @param italicSize
556. * @param underLineSize
557. * 下划线
558. * @param colorSize
559. * 字体颜色
560. * @param size
561. * 字体大小
562. * @param name
563. * 字体名称
564. */
565. public void setFont(boolean bold, boolean italic, boolean underLine,
566. String colorSize, String size, String name) {
567. Dispatch font = Dispatch.get(selection, "Font").toDispatch();
568. Dispatch.put(font, "Name", new Variant(name));
569. Dispatch.put(font, "Bold", new Variant(bold));
570. Dispatch.put(font, "Italic", new Variant(italic));
571. Dispatch.put(font, "Underline", new Variant(underLine));
572. Dispatch.put(font, "Color", colorSize);
573. Dispatch.put(font, "Size", size);
574. }
575. public void setFontCenter(String name) {
576. Dispatch font = Dispatch.get(selection, "Font").toDispatch();
577. Dispatch alignment = Dispatch.get(selection, "ParagraphFormat")
578. .toDispatch();
579. Dispatch.put(alignment, "Alignment", "3");
580. Dispatch.call(selection, "TypeText", name);
581. }
582. /** *//**
583. * 文件保存或另存为
584. *
585. * @param savePath
586. * 保存或另存为路径
587. */
588. public void save(String savePath) {
589. Dispatch.call(doc, "SaveAs", savePath); // 保存
590. /**//*
591. * Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),
592. * "FileSaveAs", savePath);
593. */
594. }
595. /** *//**
596. * 关闭当前word文档
597. *
598. */
599. public void closeDocument() {
600. if (doc != null) {
601. Dispatch.call(doc, "Save");
602. Dispatch.call(doc, "Close", new Variant(saveOnExit));
603. doc = null;
604. }
605. }
606. /** *//**
607. * 关闭全部应用
608. *
609. */
610. public void close() {
611. closeDocument();
612. if (word != null) {
613. Dispatch.call(word, "Quit");
614. word = null;
615. }
616. selection = null;
617. documents = null;
618. ComThread.Release();
619. }
620. /** *//**
621. * 打印当前word文档
622. *
623. */
624. public void printFile() {
625. if (doc != null) {
626. Dispatch.call(doc, "PrintOut");
627. }
628. }
629. /** *//**
630. * 删除一行
631. *
632. * @param tableIndex
633. * word文档中的第N张表(从1开始)
634. */
635. public void delRow(int tableIndex) {
636. Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
637. // 要填充的表格
638. Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
639. .toDispatch();
640. // 表格的所有行
641. Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
642. Object temp1 = Dispatch.get(rows, "Count");
643. String temp2 = temp1.toString();
644. int count = Integer.parseInt(temp2);
645. while (count > 1) {
646. Dispatch row = Dispatch.get(rows, "Last").toDispatch();
647. Dispatch.call(row, "Delete");
648. rows = Dispatch.get(table, "Rows").toDispatch();
649. temp1 = Dispatch.get(rows, "Count");
650. temp2 = temp1.toString();
651. count = Integer.parseInt(temp2);
652. }
653. }
654. public void setProp(String sName, String sValue) {
655. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
656. .toDispatch();
657. Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();
658. String sOldVal = Dispatch.get(prop, "Value").toString();
659. if (!sOldVal.equals(sValue))
660. Dispatch.put(prop, "Value", sValue);
661. }
662. /** *//**
663. * @param nType:
664. * 1, number; 2,bool; 3,date; 4,str;
665. */
666. public void addProp(String sName, int nType, String sValue) {
667. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
668. .toDispatch();
669. Dispatch prop = null;
670. try {
671. prop = Dispatch.call(props, "Item", sName).toDispatch();
672. } catch (Exception e) {
673. prop = null;
674. }
675. if (prop != null)
676. return;
677. // 1, number; 2,bool; 3,date; 4,str;
678. prop = Dispatch.call(props, "Add", sName, false, nType, sValue)
679. .toDispatch();
680. Dispatch.put(prop, "Value", sValue);
681. }
682. public String getProp(String sName) {
683. String sValue = null;
684. Dispatch props = Dispatch.get(doc, "CustomDocumentProperties")
685. .toDispatch();
686. Dispatch prop = Dispatch.call(props, "Item", sName).toDispatch();
687. sValue = Dispatch.get(prop, "Value").toString();
688. @SuppressWarnings("unused")
689. String sType = Dispatch.get(prop, "Type").toString();
690. try {
691. Dispatch prop0 = Dispatch.call(doc, "CustomDocumentProperties",
692. sName).toDispatch();
693. sValue = Dispatch.get(prop0, "Value").toString();
694. } catch (Exception e) {
695. e.printStackTrace();
696. }
697. return sValue;
698. }
699. public void fack_change() {
700. Dispatch _sel = Dispatch.call(doc, "Range", 0, 0).toDispatch();
701. Dispatch.call(_sel, "InsertBefore", "A");
702. Dispatch.call(_sel, "Select");
703. Dispatch.call(_sel, "Delete");
704. }
705.
706.}
发表评论
-
获取几种项目路径的方式(Done)
2013-10-09 11:20 901// 第一种:获取类加载的根路径 D:\git\daoti ... -
Spring 学习笔记-1
2013-07-23 13:51 840一,Maven配置 <dependency> &l ... -
Github问题
2013-07-03 10:28 1114错误提示: The current branch is not ... -
Java Basis
2013-03-14 11:03 825--java 1,类的关系 • De ... -
java Final 关键字
2013-03-07 10:21 7531、final类不能被继承,没有子类,final类中的方法默认 ... -
Java中的Enum用法介绍
2013-01-10 17:17 106171. 关于Java Enum: JDK1.5之前没有Enum ... -
Eclipse WTP 配置tomcat 但无法访问tomcat主页的解决方法
2013-01-07 14:07 1326首先,在Eclipse的servers view下双击要配置的 ... -
JAVA 使用 JACOB包 调用.NET DLL(测试连接成功)
2012-12-21 14:36 102291,大概步骤 1) 准备好 ... -
(Done)关于 instance of
2012-07-19 10:26 9391. “String” instanceof Object - ... -
启动tomcat 7 一闪而过
2012-06-06 23:12 8139问题概述: 在win7下,,点击startup.bat , 命 ... -
java的final和static总结
2012-05-15 23:53 939一、final 根据程序上下文环境,Java关键字final ... -
关于String的 split方法
2012-04-28 10:35 10961、如果用“.”作为分隔的话,必须是如下写法:String.s ... -
int 和 String 互相转换的多种方法
2012-02-29 16:38 8031 如何将字串 String 转换成整数 int? A. 有 ... -
Eclipse External Tools --变量设置
2012-01-09 14:18 11120外部工具的输出显示在控制台视图中。 在配置外部工具时可使用如 ... -
java的System.getProperty()方法可以获取的值
2011-12-26 14:30 4903java.version Java 运 ... -
java的comparable接口和comparator
2011-12-01 16:24 1667使用这两个接口,用于Collections.sort或Arra ... -
JUnit 4 常用的几个 annotation
2011-11-15 14:15 1009[size=large][size=medium]@Befor ... -
通过APACHE POI操作OFFICE --EXCEL(一)
2011-11-07 18:20 1314一、简介 使用Java程序读写Microsoft Office ... -
键盘数字对应的ASCII码
2011-10-31 16:41 2325keycode 1 = 鼠标左键 keycode 2 = 鼠标 ... -
一段java代码
2011-10-21 17:50 856import java.io.InputStream; im ...
相关推荐
jacob API html格式 jacob API
jacob API 源码 jacob API 源码 jacob API 源码
这里呢是三份文档,里面有jacob的一些具体使用方法包括代码案例也有,三份文档有些重复的不过都是比较全的
jacob API chm格式,方便查看
此API是以网页格式展现,大家可以参考里面的函数。很有帮助(自带的API 英文)
jacob API,Java操作Word会用到
jacob 1.18支持jdk7,jacob -1.19只支持jdk8,建议使用1.19以下版本
jacob-1.17-M2 语音朗读jar 包和开发文档 jacob-1.17-M2 语音朗读jar 包和开发文档
在官网下载的,html格式,浏览器都能解析,解压压缩包,打开index.html页面
jacob学习,以及提供比较稳定的版本15-m2。希望对你有帮助。
jacob插件附带操作类及相应API文档,走过路过不要错过
word/excel等转html工具,很好用的。
jacob-1.18-M2! 含Jacob.jar包以及Jacob.dll(32位和64位均有)文件, 说明文档API等文件集合
jacob-1.18 含Jacob.jar包以及Jacob.dll(32位和64位均有)文件, 说明文档API等文件集合,目前只有英文,需要时间等待翻译
里面提供了调度MS windows系统API 比如进程的管理 com jacob com Variant; 里面数据类型的转换的方法 Variant类本身是JACOB的最最基本的数据类 他可以被转换成任何的类 如: 使用toDispatch();可以将Variant...
(1)首先将JACOB的DLL拷贝至 C:\Windows\System32 中 (2)DCom Server Process Launcher(DcomLaunch)服务需要打开[services.msc] (3)需要安装Microsoft office 2003+ 打印属性参见 ...
jacob-1.18-M2! 含Jacob.jar包以及Jacob.dll(32位和64位均有)文件, 说明文档API等文件集合
本文件夹中的示例程序中JacobWordBeanServiceImpl.java是由XiaoKai参考网上资料,整理而成的一个类,本类提供了Jacob对Word的基本操作的一些方法,包括:文档的打开、保存、关闭、打印等基本操作,同时定义了复制、...
里面提供了调度MS windows系统API 比如进程的管理 com jacob com Variant; 里面数据类型的转换的方法 Variant类本身是JACOB的最最基本的数据类 他可以被转换成任何的类 如: 使用toDispatch();可以将Variant转化...
jacob-1.18-M2 含Jacob.jar包以及Jacob.dll(32位和64位)文件,API文件