package zzz.eee.q;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
 * jacob.jar放到classPath下 jacob-1.15-M2-x86.dll位于Path路径下
 * http://java.chinaitlab.com/tools/779091_2.html
 *
 * @author down from internet
 *
 */

public class MSWordManager {
 // word文档
 private Dispatch doc;

// word运行程序对象
 private ActiveXComponent word;

// 所有word文档集合
 private Dispatch documents;

// 选定的范围或插入点
 private Dispatch selection;

private boolean saveOnExit = true;

/** */
 /**
  *
  * @param visible
  *            为true表示word应用程序可见
  */
 public MSWordManager(boolean visible) {
  if (word == null) {
   word = new ActiveXComponent("Word.Application");
   word.setProperty("Visible", new Variant(visible));
  }
  if (documents == null) {
   documents = word.getProperty("Documents").toDispatch();
  }
 }

/** */
 /**
  * 设置退出时参数
  *
  * @param saveOnExit
  *            boolean true-退出时保存文件,false-退出时不保存文件
  */
 public void setSaveOnExit(boolean saveOnExit) {
  this.saveOnExit = saveOnExit;
 }

/** */
 /**
  * 创建一个新的word文档
  *
  */
 public void createNewDocument() {
  doc = Dispatch.call(documents, "Add").toDispatch();
  selection = Dispatch.get(word, "Selection").toDispatch();
 }

/** */
 /**
  * 打开一个已存在的文档
  *
  * @param docPath
  */
 public void openDocument(String docPath) {
  closeDocument();
  doc = Dispatch.call(documents, "Open", docPath).toDispatch();
  selection = Dispatch.get(word, "Selection").toDispatch();
 }

/** */
 /**
  * 把选定的内容或插入点向上移动
  *
  * @param pos
  *            移动的距离
  */
 public void moveUp(int pos) {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  for (int i = 0; i < pos; i++)
   Dispatch.call(selection, "MoveUp");

}

/** */
 /**
  * 把选定的内容或者插入点向下移动
  *
  * @param pos
  *            移动的距离
  */
 public void moveDown(int pos) {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  for (int i = 0; i < pos; i++)
   Dispatch.call(selection, "MoveDown");
 }

/** */
 /**
  * 把选定的内容或者插入点向左移动
  *
  * @param pos
  *            移动的距离
  */
 public void moveLeft(int pos) {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  for (int i = 0; i < pos; i++) {
   Dispatch.call(selection, "MoveLeft");
  }
 }

/** */
 /**
  * 把选定的内容或者插入点向右移动
  *
  * @param pos
  *            移动的距离
  */
 public void moveRight(int pos) {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  for (int i = 0; i < pos; i++)
   Dispatch.call(selection, "MoveRight");
 }

/** */
 /**
  * 把插入点移动到文件首位置
  *
  */
 public void moveStart() {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  Dispatch.call(selection, "HomeKey", new Variant(6));
 }

public void moveEnd() {
  if (selection == null)
   selection = Dispatch.get(word, "Selection").toDispatch();
  Dispatch.call(selection, "EndKey", new Variant(6));
 }

/** */
 /**
  * 从选定内容或插入点开始查找文本
  *
  * @param toFindText
  *            要查找的文本
  * @return boolean true-查找到并选中该文本,false-未查找到文本
  */
 public boolean find(String toFindText) {
  if (toFindText == null || toFindText.equals(""))
   return false;
  // 从selection所在位置开始查询
  Dispatch find = word.call(selection, "Find").toDispatch();
  // 设置要查找的内容
  Dispatch.put(find, "Text", toFindText);
  // 向前查找
  Dispatch.put(find, "Forward", "True");
  // 设置格式
  Dispatch.put(find, "Format", "True");
  // 大小写匹配
  Dispatch.put(find, "MatchCase", "True");
  // 全字匹配
  Dispatch.put(find, "MatchWholeWord", "True");
  // 查找并选中
  return Dispatch.call(find, "Execute").getBoolean();
 }

/** */
 /**
  * 把选定选定内容设定为替换文本
  *
  * @param toFindText
  *            查找字符串
  * @param newText
  *            要替换的内容
  * @return
  */
 public boolean replaceText(String toFindText, String newText) {
  if (!find(toFindText))
   return false;
  Dispatch.put(selection, "Text", newText);
  return true;
 }

/** */
 /**
  * 全局替换文本
  *
  * @param toFindText
  *            查找字符串
  * @param newText
  *            要替换的内容
  */
 public void replaceAllText(String toFindText, String newText) {
  while (find(toFindText)) {
   Dispatch.put(selection, "Text", newText);
   Dispatch.call(selection, "MoveRight");
  }
 }

/** */
 /**
  * 在当前插入点插入字符串
  *
  * @param newText
  *            要插入的新字符串
  */
 public void insertText(String newText) {
  Dispatch.put(selection, "Text", newText);
 }

/** */
 /**
  *
  * @param toFindText
  *            要查找的字符串
  * @param imagePath
  *            图片路径
  * @return
  */
 public boolean replaceImage(String toFindText, String imagePath) {
  if (!find(toFindText))
   return false;
  Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
    "AddPicture", imagePath);
  return true;
 }

/** */
 /**
  * 全局替换图片
  *
  * @param toFindText
  *            查找字符串
  * @param imagePath
  *            图片路径
  */
 public void replaceAllImage(String toFindText, String imagePath) {
  while (find(toFindText)) {
   Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
     "AddPicture", imagePath);
   Dispatch.call(selection, "MoveRight");
  }
 }

/** */
 /**
  * 在当前插入点插入图片
  *
  * @param imagePath
  *            图片路径
  */
 public void insertImage(String imagePath) {
  Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
    "AddPicture", imagePath);
 }

/** */
 /**
  * 合并单元格
  *
  * @param tableIndex
  * @param fstCellRowIdx
  * @param fstCellColIdx
  * @param secCellRowIdx
  * @param secCellColIdx
  */
 public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,
   int secCellRowIdx, int secCellColIdx) {
  if (fstCellRowIdx == secCellRowIdx && fstCellColIdx == secCellColIdx) {
   return;
  }
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  Dispatch fstCell = Dispatch.call(table, "Cell",
    new Variant(fstCellRowIdx), new Variant(fstCellColIdx))
    .toDispatch();
  Dispatch secCell = Dispatch.call(table, "Cell",
    new Variant(secCellRowIdx), new Variant(secCellColIdx))
    .toDispatch();
  Dispatch.call(fstCell, "Merge", secCell);
 }

/** */
 /**
  * 在指定的单元格里填写数据
  *
  * @param tableIndex
  * @param cellRowIdx
  * @param cellColIdx
  * @param txt
  */
 public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
   String txt) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
    new Variant(cellColIdx)).toDispatch();
  Dispatch.call(cell, "Select");
  Dispatch.put(selection, "Text", txt);
 }

/**
  * 在表格填充字段时,设置为粗体
  */
 public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
   String txt, boolean bold) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
    new Variant(cellColIdx)).toDispatch();
  Dispatch.call(cell, "Select");
  setFont(true);
  Dispatch.put(selection, "Text", txt);
 }

/** */
 /**
  * 在当前文档拷贝数据
  *
  * @param pos
  */
 public void copy(String toCopyText) {
  moveStart();
  if (this.find(toCopyText)) {
   Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
   Dispatch.call(textRange, "Copy");
  }
 }

/** */
 /**
  * 在当前文档粘帖剪贴板数据
  *
  * @param pos
  */
 public void paste(String pos) {
  moveStart();
  if (this.find(pos)) {
   Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
   Dispatch.call(textRange, "Paste");
  }
 }

/** */
 /**
  * 在当前文档指定的位置拷贝表格
  *
  * @param pos
  *            当前文档指定的位置
  * @param tableIndex
  *            被拷贝的表格在word文档中所处的位置
  */
 public void copyTable(String pos, int tableIndex) {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  Dispatch range = Dispatch.get(table, "Range").toDispatch();
  Dispatch.call(range, "Copy");
  if (this.find(pos)) {
   Dispatch textRange = Dispatch.get(selection, "Range").toDispatch();
   Dispatch.call(textRange, "Paste");
  }
 }

/** */
 /**
  * 在当前文档末尾拷贝来自另一个文档中的段落
  *
  * @param anotherDocPath
  *            另一个文档的磁盘路径
  * @param tableIndex
  *            被拷贝的段落在另一格文档中的序号(从1开始)
  */
 public void copyParagraphFromAnotherDoc(String anotherDocPath,
   int paragraphIndex) {
  Dispatch wordContent = Dispatch.get(doc, "Content").toDispatch(); // 取得当前文档的内容
  Dispatch.call(wordContent, "InsertAfter", "$selection$");// 插入特殊符定位插入点
  copyParagraphFromAnotherDoc(anotherDocPath, paragraphIndex,
    "$selection$");
 }

/** */
 /**
  * 在当前文档指定的位置拷贝来自另一个文档中的段落
  *
  * @param anotherDocPath
  *            另一个文档的磁盘路径
  * @param tableIndex
  *            被拷贝的段落在另一格文档中的序号(从1开始)
  * @param pos
  *            当前文档指定的位置
  */
 public void copyParagraphFromAnotherDoc(String anotherDocPath,
   int paragraphIndex, String pos) {
  Dispatch doc2 = null;
  try {
   doc2 = Dispatch.call(documents, "Open", anotherDocPath)
     .toDispatch();
   Dispatch paragraphs = Dispatch.get(doc2, "Paragraphs").toDispatch();

Dispatch paragraph = Dispatch.call(paragraphs, "Item",
     new Variant(paragraphIndex)).toDispatch();
   Dispatch range = Dispatch.get(paragraph, "Range").toDispatch();
   Dispatch.call(range, "Copy");
   if (this.find(pos)) {
    Dispatch textRange = Dispatch.get(selection, "Range")
      .toDispatch();
    Dispatch.call(textRange, "Paste");
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (doc2 != null) {
    Dispatch.call(doc2, "Close", new Variant(saveOnExit));
    doc2 = null;
   }
  }
 }

/** */
 /**
  * 在当前文档指定的位置拷贝来自另一个文档中的表格
  *
  * @param anotherDocPath
  *            另一个文档的磁盘路径
  * @param tableIndex
  *            被拷贝的表格在另一格文档中的序号(从1开始)
  * @param pos
  *            当前文档指定的位置
  */
 public void copyTableFromAnotherDoc(String anotherDocPath, int tableIndex,
   String pos) {
  Dispatch doc2 = null;
  try {
   doc2 = Dispatch.call(documents, "Open", anotherDocPath)
     .toDispatch();
   Dispatch tables = Dispatch.get(doc2, "Tables").toDispatch();
   Dispatch table = Dispatch.call(tables, "Item",
     new Variant(tableIndex)).toDispatch();
   Dispatch range = Dispatch.get(table, "Range").toDispatch();
   Dispatch.call(range, "Copy");
   if (this.find(pos)) {
    Dispatch textRange = Dispatch.get(selection, "Range")
      .toDispatch();
    Dispatch.call(textRange, "Paste");
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (doc2 != null) {
    Dispatch.call(doc2, "Close", new Variant(saveOnExit));
    doc2 = null;
   }
  }
 }

/** */
 /**
  * 在当前文档指定的位置拷贝来自另一个文档中的图片
  *
  * @param anotherDocPath
  *            另一个文档的磁盘路径
  * @param shapeIndex
  *            被拷贝的图片在另一格文档中的位置
  * @param pos
  *            当前文档指定的位置
  */
 public void copyImageFromAnotherDoc(String anotherDocPath, int shapeIndex,
   String pos) {
  Dispatch doc2 = null;
  try {
   doc2 = Dispatch.call(documents, "Open", anotherDocPath)
     .toDispatch();
   Dispatch shapes = Dispatch.get(doc2, "InLineShapes").toDispatch();
   Dispatch shape = Dispatch.call(shapes, "Item",
     new Variant(shapeIndex)).toDispatch();
   Dispatch imageRange = Dispatch.get(shape, "Range").toDispatch();
   Dispatch.call(imageRange, "Copy");
   if (this.find(pos)) {
    Dispatch textRange = Dispatch.get(selection, "Range")
      .toDispatch();
    Dispatch.call(textRange, "Paste");
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   if (doc2 != null) {
    Dispatch.call(doc2, "Close", new Variant(saveOnExit));
    doc2 = null;
   }
  }
 }

/** */
 /**
  * 创建表格
  *
  * @param pos
  *            位置
  * @param cols
  *            列数
  * @param rows
  *            行数
  */
 public Dispatch createTable(int numCols, int numRows) {
  // (String pos, int numCols, int numRows) {
  // if (!find(pos)) {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  Dispatch range = Dispatch.get(selection, "Range").toDispatch();
  Dispatch newTable = Dispatch.call(tables, "Add", range,
    new Variant(numRows), new Variant(numCols)).toDispatch();
  Dispatch.call(selection, "MoveRight");
  moveEnd();
  return newTable;
  // }
 }

public void netline() {
  Dispatch.call(selection, "TypeParagraph");
 }

/** */
 /**
  * 在指定行前面增加行
  *
  * @param tableIndex
  *            word文件中的第N张表(从1开始)
  * @param rowIndex
  *            指定行的序号(从1开始)
  */
 public void addTableRow(int tableIndex, int rowIndex) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
  Dispatch row = Dispatch.call(rows, "Item", new Variant(rowIndex))
    .toDispatch();
  Dispatch.call(rows, "Add", new Variant(row));
 }

/** */
 /**
  * 在第1行前增加一行
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addFirstTableRow(int tableIndex) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
  Dispatch row = Dispatch.get(rows, "First").toDispatch();
  Dispatch.call(rows, "Add", new Variant(row));
 }

/** */
 /**
  * 在最后1行前增加一行
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addLastTableRow(int tableIndex) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
  Dispatch row = Dispatch.get(rows, "Last").toDispatch();
  Dispatch.call(rows, "Add", new Variant(row));
 }

/** */
 /**
  * 增加一行
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addRow(int tableIndex) {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
  Dispatch.call(rows, "Add");
 }

/** */
 /**
  * 增加一列
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addCol(int tableIndex) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
  Dispatch.call(cols, "Add").toDispatch();
  Dispatch.call(cols, "AutoFit");
 }

/** */
 /**
  * 在指定列前面增加表格的列
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  * @param colIndex
  *            指定列的序号 (从1开始)
  */
 public void addTableCol(int tableIndex, int colIndex) {
  // 所有表格
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
  System.out.println(Dispatch.get(cols, "Count"));
  Dispatch col = Dispatch.call(cols, "Item", new Variant(colIndex))
    .toDispatch();
  // Dispatch col = Dispatch.get(cols, "First").toDispatch();
  Dispatch.call(cols, "Add", col).toDispatch();
  Dispatch.call(cols, "AutoFit");
 }

/** */
 /**
  * 在第1列前增加一列
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addFirstTableCol(int tableIndex) {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
  Dispatch col = Dispatch.get(cols, "First").toDispatch();
  Dispatch.call(cols, "Add", col).toDispatch();
  Dispatch.call(cols, "AutoFit");
 }

/**
  * 在最后一列前增加一列
  *
  * @param tableIndex
  *            word文档中的第N张表(从1开始)
  */
 public void addLastTableCol(int tableIndex) {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  // 要填充的表格
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  // 表格的所有行
  Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
  Dispatch col = Dispatch.get(cols, "Last").toDispatch();
  Dispatch.call(cols, "Add", col).toDispatch();
  Dispatch.call(cols, "AutoFit");
 }

/** */
 /**
  * 自动调整表格
  *
  */
 public void autoFitTable() {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  int count = Dispatch.get(tables, "Count").toInt();
  for (int i = 0; i < count; i++) {
   Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
     .toDispatch();
   Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
   Dispatch.call(cols, "AutoFit");
  }
 }

/** */
 /**
  * 调用word里的宏以调整表格的宽度,其中宏保存在document下
  *
  */
 public void callWordMacro() {
  Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  int count = Dispatch.get(tables, "Count").toInt();
  Variant vMacroName = new Variant("Normal.NewMacros.tableFit");
  Variant vParam = new Variant("param1");
  Variant para[] = new Variant[] { vMacroName };
  for (int i = 0; i < para.length; i++) {
   Dispatch table = Dispatch.call(tables, "Item", new Variant(i + 1))
     .toDispatch();
   Dispatch.call(table, "Select");
   Dispatch.call(word, "Run", "tableFitContent");
  }
 }

/** */
 /**
  * 设置当前选定内容的字体
  *
  * @param boldSize
  * @param italicSize
  * @param underLineSize
  *            下划线
  * @param colorSize
  *            字体颜色
  * @param size
  *            字体大小
  * @param name
  *            字体名称
  */
 public void setFont(boolean bold, boolean italic, boolean underLine,
   String colorSize, String size, String name) {
  Dispatch font = Dispatch.get(selection, "Font").toDispatch();
  Dispatch.put(font, "Name", new Variant(name));
  Dispatch.put(font, "Bold", new Variant(bold));
  Dispatch.put(font, "Italic", new Variant(italic));
  Dispatch.put(font, "Underline", new Variant(underLine));
  Dispatch.put(font, "Color", colorSize);
  Dispatch.put(font, "Size", size);
 }

public void setFont(boolean bold) {
  Dispatch font = Dispatch.get(selection, "Font").toDispatch();
  Dispatch.put(font, "Bold", new Variant(bold));
 }

public void setFont(boolean bold, String size) {
  Dispatch font = Dispatch.get(selection, "Font").toDispatch();
  Dispatch.put(font, "Bold", new Variant(bold));
  Dispatch.put(font, "Size", size);
 }

// public void setTableBorderWidth(int w,int tableIndex) { w范围2~13
 public void setTableBorderWidth(int tableIndex) {
  Dispatch tables = Dispatch.call(doc, "Tables").toDispatch();
  Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
    .toDispatch();
  Dispatch borders = Dispatch.get(table, "Borders").toDispatch();
  Dispatch borderLeft = Dispatch.get(table, "Borders").toDispatch();
  // Dispatch.put(borders, "LineWidth",new Variant(w));
  Dispatch border = null;
  /**
   * * 设置表格线的粗细 * 1:代表最上边一条线 2:代表最左边一条线 3:最下边一条线 4:最右边一条线 *
   * 5:除最上边最下边之外的所有横线 6:除最左边最右边之外的所有竖线 * 7:从左上角到右下角的斜线 8:从左下角到右上角的斜线
   */
  for (int i = 1; i < 7; i++) {
   border = Dispatch.call(borders, "Item", new Variant(i))
     .toDispatch();
   Dispatch.put(border, "LineWidth", new Variant(0.4));
   // Dispatch.put(border, "LineWidth", new Variant(w));
   Dispatch.put(border, "Visible", new Variant(true));
  }
 }

// public void setTableBorderWidth(float w, int tableIndex) {
 // try {
 // float width ;
 // Dispatch tables=Dispatch.call(doc,"Tables").toDispatch();
 // Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
 // .toDispatch();
 // Dispatch borders = Dispatch.get(table, "Borders").toDispatch();
 // Dispatch border = null;
 //
 // //
 // // 设置表格线的粗细 1:代表最上边一条线 2:代表最左边一条线 3:最下边一条线 4:最右边一条线 5:除最上边最下边之外的所有横线
 // // 6:除最左边最右边之外的所有竖线 7:从左上角到右下角的斜线 8:从左下角到右上角的斜线
 // //
 // for (int i = 1; i < 7; i++) {
 // if(i != 5 && i != 6 ) {
 // width = w * 3;
 // } else {
 // width = w;
 // }
 // border = Dispatch.call(borders, "Item", new Variant(i)).toDispatch();
 // if (w != 0) {
 // Dispatch.put(border, "LineWidth", new Variant(width));
 // Dispatch.put(border, "Visible", new Variant(true));
 // } else if (w == 0) {
 // Dispatch.put(border, "Visible", new Variant(false));
 // }
 // }
 // } catch (Exception e) {
 // e.printStackTrace();
 // }
 // }

/** */
 /**
  * 文件保存或另存为
  *
  * @param savePath
  *            保存或另存为路径
  */
 public void save(String savePath) {
  Object oWordBasic = Dispatch.call(word, "WordBasic").getDispatch();
  Dispatch.call((Dispatch) oWordBasic, "FileSaveAs", savePath);
  // Dispatch.call(
  // (Dispatch) Dispatch.call(word, "WordBasic").getDispatch(),
  // "FileSaveAs", savePath);
 }

/** */
 /**
  * 关闭当前word文档
  *
  */
 public void closeDocument() {
  if (doc != null) {
   Dispatch.call(doc, "Save");
   Dispatch.call(doc, "Close", new Variant(saveOnExit));
   doc = null;
  }
 }

/** */
 /**
  * 关闭全部应用
  *
  */
 public void close() {
  closeDocument();
  if (word != null) {
   Dispatch.call(word, "Quit");
   word = null;
  }
  selection = null;
  documents = null;
 }

/** */
 /**
  * 打印当前word文档
  *
  */
 public void printFile() {
  if (doc != null) {
   Dispatch.call(doc, "PrintOut");
  }
 }

public static void main(String args[]) throws Exception {
  // TODO Auto-generated method stub
  // 生成一个MSwordManager对象,并且设置显示Word程序
  MSWordManager ms = new MSWordManager(true);
  // 创建一个新的.doc文件
  ms.createNewDocument();
  // 插入文本
  ms.createTable(4, 2);
  ms.createTable(2, 2);
  ms.netline();
  ms.setTableBorderWidth(1);
  // ms.setFont(true, false, false, "0", "10", "Times New Roman");
  ms.putTxtToCell(1, 1, 1, "aaaa");
  ms.putTxtToCell(1, 1, 2, "bbbb");
  ms.putTxtToCell(1, 1, 3, "cccc");
  ms.putTxtToCell(1, 1, 4, "dddd");
  ms.putTxtToCell(1, 1, 5, "eeee");
  ms.putTxtToCell(1, 1, 6, "ffff");

ms.putTxtToCell(1, 3, 1, "wwww");
  ms.putTxtToCell(1, 3, 2, "qqqq");
  // ms.mergeCell(1, 3, 1, 3, 2) ;
  ms.moveEnd();

Dispatch test = ms.createTable(6, 5);
  ms.setTableBorderWidth(2);
  // ms.setFont(true, false, false, "0", "10", "Times New Roman");
  ms.putTxtToCell(2, 1, 1, "ID");
  ms.putTxtToCell(2, 1, 2, "ffff");
  ms.putTxtToCell(2, 1, 3, "eeee");
  ms.putTxtToCell(2, 1, 4, "vvvv");
  ms.putTxtToCell(2, 1, 5, "zzzz");
  ms.putTxtToCell(2, 1, 6, "bbbb");
  // 保存.doc文件
  ms.save("1.doc");
  ms.close();
  ms.closeDocument();
  //
  // MSWordManager msWordManager = new MSWordManager(true);
  // msWordManager.createNewDocument();
  //  
  //                  
  //                  
  // msWordManager.insertText("aaaaaaaaaaaaaaaaaaaaa");
  // msWordManager.moveEnd();
  //
  //              
  //                  
  //              
  // msWordManager.close();

}

}

java使用创建Word文件示例相关推荐

  1. python读xml文件生成.h头文件_Python创建xml文件示例

    Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...

  2. Java poi导出word文件

    Java在导出word文件时主要对表格中内容垂直居中处理做以记录方便后续碰到类似问题解决. maven pom.xml中添加poi依赖 <!-- word.excel工具 --> < ...

  3. java关于对于word或者pdf文件的批量下载实现,其中包括(Java实现创建word文档模板,根据模板导出word文档)

    本次需求是,pdf是表格类型的文件,我这里使用了word模板进行处理.但由于是多个文件一起导出,因此全部放到一个目录底下进行打包下载. ## 整体思路 /*** 下载思路:* 1.查询出数据后:* 2 ...

  4. java读word_java读word文件(示例代码)

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 1.读取word 2003及word 2007需要 ...

  5. java 在线给 word 文件插入书签

    一.在开发OA办公或与文档相关的Web系统中,难免会遇到这样的需求,需要在word文件中指定一个位置,然后在指定的位置赋值或者插入文件,这样就需要在线动态创建书签的功能. 今天主要介绍用 pageof ...

  6. idea中java文件怎么运行_Java入门基础篇-如何在Java中创建只读文件

    本文选自千锋教育<Java语言程序设计>,如需转载请注明出处,谢谢! 1.如何创建只读文件 要使文件只读,我们只要将文件属性更改为只读就行:可以使用File类的setReadOnly()方 ...

  7. java 在线给word 文件插入图片,并设置图片大小

    一.前言: 有时我们想在一篇word文档中的指定位置添加一张服务器上的图片,并且并且设置图片大小.这个对文档的操作一定是需要第三方api的.市面上对文档处理的插件有POI以及openoffice等等, ...

  8. java flexpaper_java web word文件 pdf文件在线预览源码(flexpaper)

    [实例简介]java web word文件 pdf文件在线预览源码 经过测试 [实例截图] [核心代码] BrowsenOnline html, body{ height:100%; } body { ...

  9. java dom创建xml文件_Java 如何使用dom方式读取和创建xml文件

    Java 如何使用dom方式读取和创建xml文件 发布时间:2020-11-11 17:08:31 来源:亿速云 阅读:101 作者:Leah 本篇文章给大家分享的是有关Java 如何使用dom方式读 ...

最新文章

  1. 电子科大计算机组成原理ppt,电子科技大学,计算机组成原理3计算机组成原理-3-5-组合逻辑控制方式.ppt...
  2. 做一个p2p打洞的C#程序
  3. 远程断开远程桌面会话之方法
  4. oracle节点1关闭节点2的集群,[Oracle] Oracle两个节点分裂,识别不到对方节点的状态...
  5. 51CTO博客移动化意味着什么?IT博主可以搞事情了!
  6. 轻松查看Internet Explorer缓存文件
  7. keepalived vip ping不通_【干货分享】OpenStack LVS负载均衡为什么不通?
  8. l380废墨收集垫已到使用寿命_湖北雨水收集系统定制
  9. 《梦断代码》读后感 - 驱动,责任,交流,远虑
  10. 删除共享内存_进程通信专题之 共享内存
  11. HTML 标题h1-h6
  12. 学习微服务网关zuul,看这篇就够了
  13. fiddler打开之后google浏览器无法上网的解决办法
  14. Hive实现同比环比计算
  15. k-means均值聚类
  16. 八年级上学期计算机教学计划,第一学期七八年级信息技术教学计划
  17. 编曲的和弦功能进行,及4736251谱子。
  18. 虚拟机配置固定网关及用Xshell连接虚拟机IP
  19. PHP+MYSQL 用户注册登录代码
  20. matlab 遍历每个像素点,Mat中两种像素遍历方法比较

热门文章

  1. 论文阅读笔记《Patch2CAD: Patchwise Embedding Learning for In-the-Wild Shape Retrieval from a Single Image》
  2. 全球十大外汇黄金平台正规排行榜2021版
  3. The Coronation(2019 ICPC Southern and Volga Russian Regional E题+ 2-Sat)
  4. 做SEO和SEM有什么区别?哪个推广效果会更好?
  5. 扔物线 298 元协程集训课程,限时免费送!
  6. 使用iTextPdf为Pdf模板填充表单项
  7. python爱因斯坦阶梯_Python---基础---爱因斯坦阶梯问题
  8. SQL UCASE() 函数、SQL LCASE() 函数、SQL MID() 函数
  9. matlab 理想带通,matlab理想带通滤波
  10. cnpm显示:无法加载文件 C:\Users\hp\AppData\Roaming\npm\cnpm.ps1