- 浏览: 274673 次
- 性别:
- 来自: 武汉
文章分类
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 1017// 第一种:获取类加载的根路径 D:\git\daoti ... -
Spring 学习笔记-1
2013-07-23 13:51 880一,Maven配置 <dependency> &l ... -
Github问题
2013-07-03 10:28 1156错误提示: The current branch is not ... -
Java Basis
2013-03-14 11:03 866--java 1,类的关系 • De ... -
java Final 关键字
2013-03-07 10:21 8061、final类不能被继承,没有子类,final类中的方法默认 ... -
Java中的Enum用法介绍
2013-01-10 17:17 106611. 关于Java Enum: JDK1.5之前没有Enum ... -
Eclipse WTP 配置tomcat 但无法访问tomcat主页的解决方法
2013-01-07 14:07 1405首先,在Eclipse的servers view下双击要配置的 ... -
JAVA 使用 JACOB包 调用.NET DLL(测试连接成功)
2012-12-21 14:36 102931,大概步骤 1) 准备好 ... -
(Done)关于 instance of
2012-07-19 10:26 9911. “String” instanceof Object - ... -
启动tomcat 7 一闪而过
2012-06-06 23:12 8195问题概述: 在win7下,,点击startup.bat , 命 ... -
java的final和static总结
2012-05-15 23:53 991一、final 根据程序上下文环境,Java关键字final ... -
关于String的 split方法
2012-04-28 10:35 11371、如果用“.”作为分隔的话,必须是如下写法:String.s ... -
int 和 String 互相转换的多种方法
2012-02-29 16:38 8361 如何将字串 String 转换成整数 int? A. 有 ... -
Eclipse External Tools --变量设置
2012-01-09 14:18 11205外部工具的输出显示在控制台视图中。 在配置外部工具时可使用如 ... -
java的System.getProperty()方法可以获取的值
2011-12-26 14:30 4939java.version Java 运 ... -
java的comparable接口和comparator
2011-12-01 16:24 1712使用这两个接口,用于Collections.sort或Arra ... -
JUnit 4 常用的几个 annotation
2011-11-15 14:15 1059[size=large][size=medium]@Befor ... -
通过APACHE POI操作OFFICE --EXCEL(一)
2011-11-07 18:20 1355一、简介 使用Java程序读写Microsoft Office ... -
键盘数字对应的ASCII码
2011-10-31 16:41 2362keycode 1 = 鼠标左键 keycode 2 = 鼠标 ... -
一段java代码
2011-10-21 17:50 908import java.io.InputStream; im ...
相关推荐
**Jacob API 深度解析** Jacob(Java COM Bridge)是一个强大的Java库,它为Java开发者提供了与Microsoft Windows操作系统交互的能力,尤其是通过COM(Component Object Model)接口进行交互。Jacob API使得开发者...
**Jacob API文档及使用方法** Jacob(Java COM Bridge)是一个开源Java库,它允许Java程序与COM组件进行交互。在Windows环境下,COM组件是广泛使用的,例如与Office应用程序(如Excel、Word)进行自动化操作。Jacob...
**Jacob API 源码详解** Jacob(Java COm Bridge)是一个开源的Java库,它提供了与Microsoft Office应用程序,如Word、Excel、PowerPoint等进行交互的能力。通过Jacob,Java开发者能够利用COM(Component Object ...
**Jacob API 深度解析** Jacob,全称为Java-COM Bridge,是一个开源的Java库,旨在提供一种方式让Java程序能够与COM组件(Component Object Model)进行交互。这个库在Windows平台上尤其有用,因为COM是Microsoft ...
**Jacob API和Jacob-1.18.jar及源码详解** Jacob(Java COM Bridge)是一个开源库,允许Java应用程序与Microsoft Windows平台上的COM组件进行交互。这个强大的工具为Java开发者提供了一个桥梁,使得他们能够在Java...
在压缩包中的"jacob+api.rar"文件中,包含了Jacob库的API文档,可以帮助开发者查找和理解各个类和方法的具体用法。这个文档是开发者使用Jacob进行开发的重要参考资料,应当仔细阅读。 **五、示例应用** 例如,使用...
《Jacob API 深度解析与应用指南》 Jacob(Java COM Bridge)是一个Java库,它为Java应用程序提供了与Microsoft Windows平台上的COM组件交互的能力。这个API使得开发者能够在Java环境中调用COM对象,执行诸如自动化...
jacob API chm格式,方便查看
首先,让我们深入理解 Jacob API 的基本概念。Jacob 使用 JNI (Java Native Interface) 技术来实现 Java 和 COM 之间的交互。JNI 允许 Java 代码调用本地(操作系统特定)代码,这样 Java 程序就能利用 COM 组件提供...
jacob API英文版,很详细!
总结起来,Jacob插件是Java开发者在Windows环境下处理Office文档的强大工具,结合其API文档,可以帮助我们高效地实现文档自动化处理和数据管理任务。在实际应用中,需要根据具体的业务需求,结合提供的工具类和API...
在本文中,我们将深入探讨Jacob库以及如何利用它实现Java语音朗读。 首先,Jacob全称为"Java COM Bridge",它是一个开源项目,提供了一种方式让Java程序能够调用COM组件,这些组件通常包括Windows操作系统中的各种...
《Jacob文字转语音工具包详解及应用》 在信息技术领域,人机交互的方式日益多样化,其中,文字转语音(TTS,Text-to-Speech)技术是实现无障碍沟通、提升用户体验的重要手段之一。Jacob,全称为Java COM Bridge,是...
3. Jacob API使用:jacob的API在处理Office文件时,可能需要设定特定的参数来避免乱码。例如,当调用`ActiveXObject`创建Word实例时,可能需要设置某些属性来确保正确的文本编码。 4. Office文档内部元数据:Office...
`dll`文件是Jacob的核心,实现了Java与COM之间的交互,而`jacob.jar`则是Java库,提供了Java开发者所需的API接口。 二、Jacob的安装与配置 1. 将`jacob-1.14.3-x86.dll`文件拷贝到系统的`System32`目录下,确保...
4. **Jacob API** Jacob的API提供了丰富的接口用于操作COM对象,例如: - `ActiveXComponent`:主要的接口,用于创建和管理COM对象。 - `Dispatch`:用于处理VARIANT类型数据,这是COM中的通用数据类型,可以代表...
1. 调用Windows API:通过Jacob,Java程序可以直接调用Windows API,实现对系统级操作的控制。 2. 操作Office应用程序:例如,自动化Word、Excel、PowerPoint等,进行文档处理、数据分析等工作。 3. 控制ActiveX控件...
3. 使用Jacob API:导入必要的Jacob类,如`com.jacob.com.ComThread`、`com.jacob.activeX.ActiveXComponent`等,然后就可以在Java代码中创建和操作COM对象了。 例如,如果要通过Jacob与Excel交互,可以创建一个`...
然而,原始的Jacob API相对复杂,对于不熟悉COM编程的开发者来说,使用起来可能会感到困难。因此,对Jacob进行封装,创建一个友好的工具类,可以大大提高开发效率和代码可读性。 首先,让我们理解Jacob的基本概念。...
3. **Jacob API**:Jacob提供的API包括了一系列Java类,如`com.jacob.ComThread`、`com.jacob.ActiveXComponent`和`com.jacob.JacobObject`等,这些类提供了创建和管理COM对象的方法。 4. **JNI**:Java Native ...