1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > jacob 模板生成word文档 表格(合并单元格以及各种表格样式) 图片

jacob 模板生成word文档 表格(合并单元格以及各种表格样式) 图片

时间:2018-07-23 19:34:19

相关推荐

jacob 模板生成word文档 表格(合并单元格以及各种表格样式) 图片

一、将 jacob-1.18-M2-x64.dll 文件 放在jdk bin目录下

二、项目中导入jacob.jar 包

三、设置好模板内容

四、测试代码

/*** 主方法测试* @param args*/public static void main(String[] args) {//System.out.println(System.getProperty("java.library.path")); //查看使用jar包的位置ExportTest jacob = new ExportTest();//单字段HashMap<String, Object> dataMap = new HashMap<String, Object>();SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日");String format = simpleDateFormat.format(new Date());dataMap.put("${timeField}", format);//时间dataMap.put("${numField}", "23");dataMap.put("${stringField}", "姓名");dataMap.put("${doubleField}", "16.7");dataMap.put("${arrayField}", "字段2、字段3、字段4、字段5、字段6、字段7、字段8");//表格List<String[]> table1 = new ArrayList<String[]>();String[] row1 = new String[]{"姓名", "性别", "手机号","住址","邮箱"};table1.add(row1);String[] row2 = new String[]{"张三", "男", "15676787654","XX省","XX@"};table1.add(row2);String[] row3 = new String[]{"李四", "女", "15676787655","XX省","XX@"};table1.add(row3);String[] row8 = new String[]{"合并行", "", "","",""};table1.add(row8);dataMap.put("${table1}", table1);List<String[]> table2 = new ArrayList<String[]>();String[] row4 = new String[]{"姓名", "学科", "成绩"};table2.add(row4);String[] row5 = new String[]{"李1", "语文", "86"};table2.add(row5);String[] row6 = new String[]{"李1", "数学", "78"};table2.add(row6);String[] row7 = new String[]{"总成绩", "", "164"};//最后一行前两列要合并单元格,所以把第二列设置为空table2.add(row7);dataMap.put("${table2}", table2);/*图片*/dataMap.put("${image11}", "D://user.jpg");//填写自己本地图片的位置System.out.println("操作提示:文档生成开始...");jacob.saveDoc("D:/模板.docx", "D:/文件.doc", dataMap, false);//将模板和生成的文档替换成自己的System.out.println("操作提示:文档生成结束!");}

五:调用方法代码

/*** 打开文件* * @param documents* @param inputDocPath* @return*/private Dispatch open(Dispatch documents, String inputDocPath) {return Dispatch.call(documents, "Open", inputDocPath).toDispatch();}/*** 选定内容* * @param word* @return*/private Dispatch select(ActiveXComponent word) {return word.getProperty("Selection").toDispatch();}/*** 把插入点移动到文件首位置* * @param selection*/private void moveStart(Dispatch selection) {Dispatch.call(selection, "HomeKey", new Variant(6));}/*** 从选定内容或插入点开始查找文本* * @param selection* 选定内容* @param toFindText* 要查找的文本* @return true:查找到并选中该文本;false:未查找到文本。*/private boolean find(Dispatch selection, String toFindText) {// 从selection所在位置开始查询Dispatch find = Dispatch.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 selection* @param newText*/private void replace(Dispatch selection, String newText) {Dispatch.put(selection, "Text", newText);}/*** 全局替换* * @param selection* @param oldText* @param replaceObj*/private void replaceAll(ActiveXComponent word,Dispatch selection, String oldText,Object replaceObj) {moveStart(selection);if (oldText.indexOf("table")!=-1) {//System.out.println("创建表格");createTable(selection, oldText, (List<String[]>) replaceObj);} else if (oldText.indexOf("image")!=-1) {//System.out.println("替换图片");replaceImage(selection, oldText, replaceObj.toString());}else {String newText = (String) replaceObj;while (find(selection, oldText)) {replace(selection, newText);Dispatch.call(selection, "MoveRight");}}}/*** image* * @param selection* @param toFindText* @param imagePath*/public void replaceImage(Dispatch selection, String toFindText,String imagePath) {if (find(selection, toFindText)) {Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),"AddPicture", imagePath);Dispatch.call(selection, "MoveRight");}}/*** table*/public void createTable(Dispatch selection, String tableName,List<String[]> dataList) {if (find(selection, tableName)) {int row = dataList.size();Dispatch tables = Dispatch.get(selection, "Tables").toDispatch();Dispatch range = Dispatch.get(selection, "Range").toDispatch();Dispatch newTable = Dispatch.call(tables, "Add", range,new Variant(row), new Variant(dataList.get(0).length)).toDispatch();Dispatch font = Dispatch.get(selection, "Font").toDispatch();Dispatch cells = Dispatch.get(selection, "Cells").toDispatch();Dispatch alignment = Dispatch.get(selection, "ParagraphFormat" ).toDispatch();for (int i = 0; i < row; i++) {String[] str = dataList.get(i);for (int j = 0; j < str.length; j++) {String s = str[j];Dispatch cell = Dispatch.call(newTable, "Cell",new Variant(i + 1), new Variant(j + 1)).toDispatch();Dispatch.call(cell, "Select");Dispatch.put(selection, "Text", s);Dispatch.put(font, "Name" , new Variant("宋体"));//字体Dispatch.put(font, "Size", new Variant(9));//字体大小Dispatch.put(alignment, "LineSpacingRule" , new Variant(0));//行距 默认:1.0 0:1.0 1:1.5 2:2.0 3:最小值 4:固定值Dispatch.put(alignment, "Alignment" , 1);//对齐方式 居左 0:居左 1:居中 2:居右 3:两端对齐 4:分散对齐Dispatch.put(cells, "VerticalAlignment", new Variant(1));//if (i ==0){Dispatch.put(font, "Bold" , new Variant(1));//加粗 1:加粗 0:不加粗}}}for (int i = 0; i < row; i++) {//最后一行前两列合并单元格if (i == row - 1) {//设置合并的开始行和列Dispatch fstCell = Dispatch.call(newTable, "Cell", new Variant(i + 1), new Variant(1)).toDispatch();//设置合并的结束行和列Dispatch secCell = Dispatch.call(newTable, "Cell", new Variant(i + 1), new Variant(2)).toDispatch();Dispatch.call(fstCell, "Merge", secCell);}}}}/*** 打印* * @param document*/private void print(Dispatch document) {Dispatch.call(document, "PrintOut");}/*** 保存文件* * @param word* @param outputPath*/private void save(ActiveXComponent word, String outputPath) {Dispatch.call(Dispatch.call(word, "WordBasic").getDispatch(),"FileSaveAs", outputPath);}/*** 关闭文件* * @param doc*/private void close(Dispatch doc) {Dispatch.call(doc, "Close", new Variant(true));}/*** 保存打印doc文档* * @param inputDocPath* @param outPutDocPath* @param data* @param isPrint*/public void saveDoc(String inputDocPath, String outPutDocPath,Map<String, Object> data, boolean isPrint) {// 初始化com的线程ComThread.InitSTA();// word运行程序对象ActiveXComponent word = new ActiveXComponent("Word.Application");// 文档对象Dispatch wordObject = (Dispatch) word.getObject();// 设置属性 Variant(true)表示word应用程序可见Dispatch.put((Dispatch) wordObject, "Visible", new Variant(false));// word所有文档Dispatch documents = word.getProperty("Documents").toDispatch();// 打开文档Dispatch document = this.open(documents, inputDocPath);Dispatch selection = this.select(word);Iterator keys = data.keySet().iterator();String oldText;Object newValue;while (keys.hasNext()) {oldText = (String) keys.next();newValue = data.get(oldText);this.replaceAll(word,selection, oldText, newValue);}// 是否打印if (isPrint) {this.print(document);}this.save(word, outPutDocPath);this.close(document);word.invoke("Quit", new Variant[0]);// 关闭com的线程ComThread.Release();}

六:生成文件展示

说明:

此示例是在一位博主那里下载,加上自己改造完善的完整版

完整代码和 所需文件和jar 在个人资源处下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。