package com.test.utils;
import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
import com.alibaba.fastjson.JSONObject; /******************************************************************************* * @程序名称 * @处理 * @功能 * @版本 V1.0 * * @修改履历 wps打开可能存在不兼容 * * ********************************************************************************/ public class exportWord { public static void main(String[] args) { try { getWord(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void getWord() throws Exception { XWPFDocument xdoc = new XWPFDocument(); //标题 XWPFParagraph titleMes = xdoc.createParagraph(); titleMes.setAlignment(ParagraphAlignment.CENTER); XWPFRun r1 = titleMes.createRun(); r1.setFontFamily("微软雅黑"); r1.setText("材质报告");//活动名称 r1.setFontSize(16); r1.setColor("333333"); r1.setBold(false); //表格 XWPFTable xTable = xdoc.createTable(12, 5); mergeCellsVertically(xTable,4,2,9); createSimpleTable(xTable, xdoc); //setEmptyRow(xdoc, r1); // 在服务器端生成 FileOutputStream fos = new FileOutputStream( "d:\种类报告.docx"); xdoc.write(fos); fos.close(); } //设置表格高度 private static XWPFTableCell getCellHight(XWPFTable xTable,int rowNomber,int cellNumber,Boolean b){ XWPFTableRow row = null; row = xTable.getRow(rowNomber); if(b){ row.setHeight(100); }else{ row.setHeight(200); } XWPFTableCell cell = null; cell = row.getCell(cellNumber); return cell; } /** * * @param xDocument * @param cell * @param text * @param bgcolor * @param width */ private static void setCellText(XWPFDocument xDocument, XWPFTableCell cell,String text,Boolean b,int fontSize) { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph p = new XWPFParagraph(ctp, cell); if(!b){ p.setAlignment(ParagraphAlignment.CENTER); }else{ p.setAlignment(ParagraphAlignment.LEFT); } XWPFRun run = p.createRun(); run.setColor("000000"); run.setFontSize(fontSize); run.setText(text); run.setBold(false); CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); cell.setParagraph(p); } public static void fillTable(XWPFTable table) { for (int rowIndex = 0; rowIndex < table.getNumberOfRows(); rowIndex++) { XWPFTableRow row = table.getRow(rowIndex); /* row.setHeight(380); */ for (int colIndex = 0; colIndex < row.getTableCells().size(); colIndex++) { XWPFTableCell cell = row.getCell(colIndex); if(rowIndex == 0 || rowIndex == 10){ setCellText(cell, "", "777777", 1000); //设置颜色 } } } } public static void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); //cell.setColor(bgcolor); CTTcPr ctPr = cttc.addNewTcPr(); CTShd ctshd = ctPr.addNewShd(); ctshd.setFill(bgcolor); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } //设置表格间的空行 public static void setEmptyRow(XWPFDocument xdoc,XWPFRun r1){ XWPFParagraph p1 = xdoc.createParagraph(); p1.setAlignment(ParagraphAlignment.CENTER); p1.setVerticalAlignment(TextAlignment.CENTER); r1 = p1.createRun(); } /** * 创建计划明细表 * @param task * @param xTable * @param xdoc * @throws IOException */ public static void createSimpleTable(XWPFTable xTable, XWPFDocument xdoc) throws IOException { String bgColor="FFFFFF"; CTTbl ttbl = xTable.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); tblWidth.setW(new BigInteger("8000")); tblWidth.setType(STTblWidth.DXA); setCellText(xdoc, getCellHight(xTable, 1, 4,true), "-- 图片 --",false,8); String[] arrayString = new String[]{"材料编号","材料代号","材料名称","规格","表面处理","厂家品牌","厂家联系方式","使用位置","数量"} ; for (int i = 1; i <= 9; i++) { setCellText(xdoc, getCellHight(xTable, i, 0,true), arrayString[i-1],true,8); mergeCellsHorizontal(xTable, i, 1, 3); setCellText(xdoc, getCellHight(xTable, i, 1,true), "参数值内容",false,8); } fillTable(xTable); mergeCellsHorizontal(xTable, 0, 0, 4); mergeCellsHorizontal(xTable, 10, 0, 4); mergeCellsHorizontal(xTable, 11, 0, 4); setCellText(xdoc, getCellHight(xTable, 0, 0,true), "地砖",true,13); setCellText(xdoc, getCellHight(xTable, 10, 0,true), "说明",true,8); setCellText(xdoc, getCellHight(xTable, 11, 0,false), "无",true,8); } // word跨列合并单元格 public static void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.getRow(row).getCell(cellIndex); if ( cellIndex == fromCell ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); } } } // word跨行并单元格 public static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell cell = table.getRow(rowIndex).getCell(col); if ( rowIndex == fromRow ) { // The first merged cell is set with RESTART merge value cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } } }
=============================================================================================word 2
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.io.File" %> <%@ page import="java.io.FileInputStream" %> <%@ page import="java.io.FileOutputStream" %> <%@ page import="java.io.IOException" %> <%@ page import="java.math.BigInteger" %> <%@ page import="org.apache.poi.xwpf.usermodel.ParagraphAlignment" %> <%@ page import="org.apache.poi.xwpf.usermodel.XWPFParagraph" %> <%@ page import="org.apache.poi.xwpf.usermodel.XWPFRun" %> <%@ page import="org.apache.poi.xwpf.usermodel.XWPFTable" %> <%@ page import="org.apache.poi.xwpf.usermodel.XWPFTableCell" %> <%@ page import="org.apache.poi.xwpf.usermodel.XWPFTableRow" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge" %> <%@ page import="org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth" %> <%@ page import="com.test.utils.*" %> <%@ page import=" java.io.FileInputStream"%> <%@ page import=" java.io.InputStream"%>
<% getWord(); %>
<%! public static void getWord() throws Exception { CustomXWPFDocument xdoc = new CustomXWPFDocument(); //表格 XWPFTable xTable = xdoc.createTable(12, 3); createSimpleTable(xTable, xdoc);
// 在服务器端生成 FileOutputStream fos = new FileOutputStream("d:\种类报告4.docx"); xdoc.write(fos); fos.close(); }
/** * 设置表格高度 * xTable:表格对象 * rowNomber:行下标值 * cellNumber:列下标值 * height:高度 */ private static XWPFTableCell getCellHight(XWPFTable xTable, int rowNomber, int cellNumber, int height){ XWPFTableRow row = null; row = xTable.getRow(rowNomber); row.setHeight(height); XWPFTableCell cell = null; cell = row.getCell(cellNumber); //设置单元格垂直居中 cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER); return cell; }
/** * 设置单元格 * cell:单元格 * text:内容 * bgColor:背景色 * align:水平位置 * fontSize:字体大小 * isBold:是否加粗 */ private static void setCellText(XWPFTableCell cell, String text, String bgColor, ParagraphAlignment align, int fontSize, Boolean isBold) { //设置单元格背景色 if(bgColor != "" || !"".equals(bgColor)){ CTTc cttc = cell.getCTTc(); CTTcPr ctPr = cttc.addNewTcPr(); CTShd ctshd = ctPr.addNewShd(); ctshd.setFill(bgColor); } CTP ctp = CTP.Factory.newInstance(); XWPFParagraph p = new XWPFParagraph(ctp, cell); //设置单元格水平位置 p.setAlignment(align); XWPFRun run = p.createRun(); run.setColor("000000"); run.setFontSize(fontSize); run.setText(text); run.setBold(isBold); CTRPr rpr = run.getCTR().isSetRPr() ? run.getCTR().getRPr() : run.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); cell.setParagraph(p); }
/** * 设置单元格图片信息 * doc:文件对象 * cell:单元格对象 * picUrl:图片访问地址 * width:图片宽度 * height:图片高度 */ private static void setCellImage(CustomXWPFDocument doc, XWPFTableCell cell, String picUrl, int width, int height) { try { //根据图片路径,生成数据流 File pic = new File(picUrl); FileInputStream is = new FileInputStream(pic); //给段落重新赋值 cell.removeParagraph(0); //调整图片为水平居中位置 XWPFParagraph pargraph = cell.addParagraph(); pargraph.setAlignment(ParagraphAlignment.CENTER); //将图片数据流写进word文档 doc.addPictureData(is, getPictureType(picUrl)); doc.createPicture(doc.getAllPictures().size()-1, width, height, pargraph); if(is != null){ is.close(); } } catch (Exception e) { e.printStackTrace(); } }
/** * 创建计划明细表 */ public static void createSimpleTable(XWPFTable xTable, CustomXWPFDocument xdoc) throws IOException { //设置表格边距 xTable.setCellMargins(100, 100, 100, 100);
CTTbl ttbl = xTable.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); tblWidth.setW(new BigInteger("8000")); tblWidth.setType(STTblWidth.DXA);
mergeCellHorizontally(xTable, 0, 0, 2); setCellText(getCellHight(xTable, 0, 0, 300), "地砖", "A9A9A9", ParagraphAlignment.LEFT, 12, true); setCellText(getCellHight(xTable, 1, 2, 500), "图片", "", ParagraphAlignment.CENTER, 12, true);
String[] arrayString = {"材料编号","材料代号","材料名称","规格","表面处理","厂家品牌","厂家联系方式","使用位置","数量"}; for (int i = 1; i < arrayString.length + 1; i++) { setCellText(getCellHight(xTable, i, 0, 500), arrayString[i-1], "", ParagraphAlignment.LEFT, 12, true); setCellText(getCellHight(xTable, i, 1, 500), "参数值内容", "", ParagraphAlignment.CENTER, 12, false); }
setCellImage(xdoc, getCellHight(xTable, 2, 2, 500), "D:\879x707.png", 200, 200); mergeCellVertically(xTable, 2, 2, arrayString.length);
mergeCellHorizontally(xTable, 10, 0, 2); mergeCellHorizontally(xTable, 11, 0, 2); setCellText(getCellHight(xTable, 10, 0, 300), "说明", "A9A9A9", ParagraphAlignment.LEFT, 12, true); setCellText(getCellHight(xTable, 11, 0, 500), "无", "", ParagraphAlignment.LEFT, 12, false); }
//列合并 static void mergeCellVertically(XWPFTable table, int col, int fromRow, int toRow) { for(int rowIndex = fromRow; rowIndex <= toRow; rowIndex++){ CTVMerge vmerge = CTVMerge.Factory.newInstance(); if(rowIndex == fromRow){ // The first merged cell is set with RESTART merge value vmerge.setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE vmerge.setVal(STMerge.CONTINUE); } XWPFTableCell cell = table.getRow(rowIndex).getCell(col); // Try getting the TcPr. Not simply setting an new one every time. CTTcPr tcPr = cell.getCTTc().getTcPr(); if (tcPr != null) { tcPr.setVMerge(vmerge); } else { // only set an new TcPr if there is not one already tcPr = CTTcPr.Factory.newInstance(); tcPr.setVMerge(vmerge); cell.getCTTc().setTcPr(tcPr); } } } //行合并 static void mergeCellHorizontally(XWPFTable table, int row, int fromCol, int toCol) { for(int colIndex = fromCol; colIndex <= toCol; colIndex++){ CTHMerge hmerge = CTHMerge.Factory.newInstance(); if(colIndex == fromCol){ // The first merged cell is set with RESTART merge value hmerge.setVal(STMerge.RESTART); } else { // Cells which join (merge) the first one, are set with CONTINUE hmerge.setVal(STMerge.CONTINUE); } XWPFTableCell cell = table.getRow(row).getCell(colIndex); // Try getting the TcPr. Not simply setting an new one every time. CTTcPr tcPr = cell.getCTTc().getTcPr(); if (tcPr != null) { tcPr.setHMerge(hmerge); } else { // only set an new TcPr if there is not one already tcPr = CTTcPr.Factory.newInstance(); tcPr.setHMerge(hmerge); cell.getCTTc().setTcPr(tcPr); } } }
//判断并返回图片类型对应的数字 public static int getPictureType(String picUrl){ int res = CustomXWPFDocument.PICTURE_TYPE_PICT; if(picUrl!=null){ if(picUrl.contains(".png") || picUrl.contains(".PNG")){ res=CustomXWPFDocument.PICTURE_TYPE_PNG; }else if(picUrl.contains(".dib") || picUrl.contains(".DIB")){ res = CustomXWPFDocument.PICTURE_TYPE_DIB; }else if(picUrl.contains(".emf") || picUrl.contains(".EMF")){ res = CustomXWPFDocument.PICTURE_TYPE_EMF; }else if(picUrl.contains(".jpg") || picUrl.contains(".JPG") || picUrl.contains(".jpeg") || picUrl.contains(".JPEG")){ res = CustomXWPFDocument.PICTURE_TYPE_JPEG; }else if(picUrl.contains(".wmf") || picUrl.contains(".WMF")){ res = CustomXWPFDocument.PICTURE_TYPE_WMF; } } return res; } %>
==============================================================================================
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="java.io.File" %> <%@ page import="jxl.*" %> <%@ page import="jxl.write.Label" %> <%@ page import="jxl.write.WritableSheet" %> <%@ page import="jxl.write.WritableWorkbook" %>
<% //标题行 String title[] = {"通用名称","商品名称","英文名称","拼音全码","主要成份","成份","性状","适应症/功能主治","规格型号","用法用量","不良反应","禁忌","注意事项","儿童用药","老年患者用药","孕妇及哺乳期妇女用药","药物相互作用","药物过量","药理毒理","药代动力学","贮藏","包装","有效期","执行标准","批准文号","生产企业"}; //操作执行 try { //t.xls为要新建的文件名 WritableWorkbook book= Workbook.createWorkbook(new File("/home/data/web/templates/merchant/template_13/doTest/testV2.xls")); //生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet("第一页",0);
//写入内容 for(int i=0; i<title.length; i++) { sheet.addCell(new Label(i,0,title[i])); }
for(int i=0; i<title.length; i++) { for(int j=1; j<4; j++) { sheet.addCell(new Label(i, j, "test" + j + "-" + i)); } } //写入数据 book.write(); //关闭文件 book.close(); } catch(Exception e) { } %>
int i=0; i<title.length; i++) { sheet.addCell(new Label(i,0,title[i])); } for(int i=0; i<title.length; i++) { for(int j=1; j<4; j++) { sheet.addCell(new Label(i, j, "test" + j + "-" + i)); } } //写入数据 book.write(); //关闭文件 book.close(); } catch(Exception e) { }%>
int i=0; i<title.length; i++) { sheet.addCell(new Label(i,0,title[i])); } for(int i=0; i<title.length; i++) { for(int j=1; j<4; j++) { sheet.addCell(new Label(i, j, "test" + j + "-" + i)); } } //写入数据 book.write(); //关闭文件 book.close(); } catch(Exception e) { }%>
|
|