zoukankan      html  css  js  c++  java
  • 基本word文档操作 和 表格操作

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

     

        

     
  • 相关阅读:
    大型网站的可伸缩性架构如何设计?
    前端路由跳转基本原理
    强大的CSS:用纯css模拟下雪的效果
    package.json 和 package-lock.json 文件说明
    CSS 继承深度解析
    EJS-初识
    百度前端学院-基础学院-第20到21天之setTimeOut与setInterval
    百度前端学院-基础学院-第20到21天
    es6字符串方法
    字符串方法之padStart和padEnd
  • 原文地址:https://www.cnblogs.com/jiahaoJAVA/p/7727682.html
Copyright © 2011-2022 走看看