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) { }%> |
|