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