精华内容
下载资源
问答
  • 2022-02-15 14:52:10

    word文档任意位置拼接,支持段落、表格、图片。

        /**
         * 合并Word内容
         *
         * @param src
         * @param append
         * @throws Exception
         */
        public static void appendBody(CTBody src, CTBody append) {
            XmlOptions optionsOuter = new XmlOptions();
            optionsOuter.setSaveOuter();
            String appendString = append.xmlText(optionsOuter);
            String srcString = src.xmlText();
            String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
            String mainPart = srcString.substring(srcString.indexOf(">") + 1, srcString.lastIndexOf("<"));
            String sufix = srcString.substring(srcString.lastIndexOf("<"));
            String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
            CTBody makeBody = null;
            try {
                makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix);
            } catch (XmlException e) {
                e.printStackTrace();
            }
            src.set(makeBody);
        }
    
    
        /**
         * 段落拼接word,把文件中的图片拿出来
         *
         * @param src
         * @param append
         * @throws Exception
         */
        public static void appendBody(XWPFParagraph xwpfParagraph, XWPFDocument append) throws Exception {
            CTP ctp = xwpfParagraph.getCTP();
            CTBody src2Body = append.getDocument().getBody();
    
            List<XWPFPictureData> allPictures = append.getAllPictures();
            // 记录图片合并前及合并后的ID
            Map<String, String> map = new HashMap<>();
            for (XWPFPictureData picture : allPictures) {
                String before = append.getRelationId(picture);
                //将原文档中的图片加入到目标文档中
                String after = xwpfParagraph.getDocument().addPictureData(picture.getData(), Document.PICTURE_TYPE_PNG);
                map.put(before, after);
            }
            appendBody(ctp, src2Body, map);
        }
    
        /**
         * 把图片ID替换一下 避免冲突
         *
         * @param src
         * @param append
         * @param map
         * @throws Exception
         */
        private static void appendBody(CTP src, CTBody append, Map<String, String> map) throws Exception {
            XmlOptions optionsOuter = new XmlOptions();
            optionsOuter.setSaveOuter();
            String appendString = append.xmlText(optionsOuter);
    
            String srcString = src.xmlText();
            String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
            String mainPart = srcString.substring(srcString.indexOf(">") + 1, srcString.lastIndexOf("<"));
            String sufix = srcString.substring(srcString.lastIndexOf("<"));
            String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
    
            if (map != null && !map.isEmpty()) {
                //对xml字符串中图片ID进行替换 z
                // 下面注释掉的方式会发生图片id冲突
                // for (Map.Entry<String, String> set : map.entrySet()) {
                //     addPart = addPart.replace(set.getKey(), "RE:"+set.getValue());
                // }
                // addPart = addPart.replaceAll("RE:",");
    
                // 采用正则追加替换方式完美解决
                String patter = StringUtils.join(map.keySet(), "|");
                Pattern compile = Pattern.compile(patter);
                Matcher matcher = compile.matcher(addPart);
                StringBuffer sb = new StringBuffer();
                while (matcher.find()) {
                    String value = map.get(matcher.group());
                    if (value != null) {
                        matcher.appendReplacement(sb, value);
                    }
                }
                matcher.appendTail(sb);
                addPart = sb.toString();
            }
            //将两个文档的xml内容进行拼接
            CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix);
            src.set(makeBody);
        }
    
    更多相关内容
  • java使用poi操作.doc word模板替换,循环插入表格
  • poi实现操作生成word表格和操作word中的图表数据 最近因为有根据数据操作文档的需求,所以使用poi来实现了功能

    最近因为有根据数据操作文档的需求,所以使用poi来实现了功能
    其实有好几种方式来实现这一系列对office操作的需求,可供选择的有easypoi,poi-tl (poi-tl
    对于poi,有一个博主已经开发的很完善并将代码提到了开源平台上poi操作

    写入word表格

    1.1首先要将写入的数据整理好,将其封装在一个类中:

    import java.math.BigInteger;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    
    
    public class GetElsxInfoAction{
        private Date exportStartTime;
    
        private Date exportEndTime;
    
        private String dredgeTime = "2021-07-19 00:00:00";
    
        private ExportInfoToWord exportInfoToWord;
        
        private String myDeptId = "";
    
        public void execute() throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String endTime = sdf.format(exportEndTime);
            String startTime = sdf.format(exportStartTime);
    
            String[] staticsticName = {"总人数", "今日人数", "总登录人数", "今日登录人数",
                    "其他登录人数"};
            String[] deptUserNumsName = null;
            String[] postsNumsName = null;
    
            List<String> list = new ArrayList<>();
            List<String> deptUserNumsList = new ArrayList<>();
            List<String> postsNumsList = new ArrayList<>();
    
            List<GatewayBucketsModel> gatewayBuckets = new ArrayList<>();
    
            //总开通人数
            BigInteger allRegistCount = (BigInteger) getAllRegistCount().get(0);
    
            //今日开通人数
            BigInteger todayRegistCount = (BigInteger) getTodayRegistCount(startTime, endTime).get(0);
    
            list.add(String.valueOf(allRegistCount));
            list.add(String.valueOf(todayRegistCount));
    
            //总登录人数
            BigInteger currentDayVisitedCount = (BigInteger) getUsersTotal(dredgeTime).get(0);
            list.add(String.valueOf(currentDayVisitedCount));
    
            //今日总登录人数
            BigInteger allDayVisitedCount = (BigInteger) getUsersByFuncId(startTime, endTime).get(0);
            list.add(String.valueOf(allDayVisitedCount));
    
            //获取今日其他人数
            List todayOtherDeptNums = getTodayOtherDeptNums(startTime, endTime, myDeptId);
            if (ListUtil.isLstEmpty(todayOtherDeptNums)) {
                list.add("0");
            } else {
                list.add(todayOtherDeptNums.size() + "");
            }
    
            //今日登录分布情况
            List deptList = getDeptUserNumsList(startTime, endTime);
    
            if (!ListUtil.isLstEmpty(deptList)) {
                deptUserNumsName = new String[deptList.size()];
                for (int i = 0; i < deptList.size(); i++) {
                    Object[] result = (Object[]) deptList.get(i);
                    String deptName = (String) result[1];
                    String userNum = String.valueOf(result[2]);
                    deptUserNumsName[i] = deptName;
                    deptUserNumsList.add(userNum);
                }
            }
    
            ExportWordMode exportWordMode = new ExportWordMode();
            exportWordMode.setStaticsticName(staticsticName);
            exportWordMode.setList(list);
            exportWordMode.setSmsgcenterFailNum(null);
            exportWordMode.setGatewayBuckets(gatewayBuckets);
            exportWordMode.setDeptUserNumsName(deptUserNumsName);
            exportWordMode.setDeptUserNumsList(deptUserNumsList);
            exportWordMode.setPostsNumsName(postsNumsName);
            exportWordMode.setPostsNumsList(postsNumsList);
    
            exportInfoToWord = new ExportInfoToWord();
            exportInfoToWord.exportWord(exportWordMode, exportStartTime, exportEndTime);
        }
    
        /**
         * 计算减去x天的时间
         *
         * @param date 时间
         * @param days 相减的天数
         * @return
         */
        public static Date subDayTime(Date date, Integer days) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.add(Calendar.SECOND, -days * 24 * 3600);
            return calendar.getTime();
        }
    
        private void addPeakInfoToList(List<String> list, List peak, int i) {
            StringBuffer sb = new StringBuffer();
            Object[] o = (Object[]) peak.get(i);
            String time = ((String) o[0]).replace("\"", "");
            sb.append(String.format("%02d", Integer.parseInt(time))).append("时").append("--").append(String.format("%02d", Integer.parseInt(time) + 1)).append("时").append(": ").append(String.valueOf((BigInteger) o[1]).replaceAll("\"", "")).append("人");
            list.add(sb.toString());
        }
    }
    
    

    1.2 其次将数据写入word,写成表格

    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.Comparator;
    import java.util.Date;
    import java.util.List;
    
    public class ExportInfoToWord {
    
        /**
         * 这里定义的变量是对应的表格中的键和值
         */
        private String[] staticsticName;
        private String[] staticsName2;
        private String[] postNames;
        private List<String> list;
        private List<String> list2;
        private List<String> postsNums;
    
        public void exportWord(ExportWordMode exportWordMode, Date exportStartTime, Date exportEndTime) {
    
            staticsticName = exportWordMode.getStaticsticName();
            list = exportWordMode.getList();
    
            staticsName2 = exportWordMode.getDeptUserNumsName();
            list2 = exportWordMode.getDeptUserNumsList();
    
            postNames = exportWordMode.getPostsNumsName();
            postsNums = exportWordMode.getPostsNumsList();
            // 文档生成方法
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分");
            String fileName;
            fileName = sdf.format(exportStartTime) + "--" + sdf.format(exportEndTime);
            XWPFDocument doc = new XWPFDocument();
    
    
            XWPFHelper.addCustomHeadingStyle(doc, "heading 1", 0);
            XWPFHelper.addCustomHeadingStyle(doc, "heading 2", 1);
            XWPFHelper.addCustomHeadingStyle(doc, "heading 3", 2);
    
    
            XWPFParagraph p1 = doc.createParagraph(); // 创建段落
            p1.setAlignment(ParagraphAlignment.CENTER);//样式居中
            XWPFRun r1 = p1.createRun(); // 创建段落文本
            r1.setText("文件名"); // 设置文本
            r1.setBold(true);
            r1.setFontSize(20);
            r1.addBreak();
            XWPFParagraph second = doc.createParagraph(); // 创建段落
            second.setAlignment(ParagraphAlignment.CENTER);//样式居中
            XWPFRun secondr2 = second.createRun(); // 创建段落文本
    
            secondr2.setText(sdf.format(exportStartTime) + "--" + sdf.format(exportEndTime)); // 设置文本
    
            FileOutputStream out = null; // 创建输出流
            try {
                // 向word文档中添加内容
                XWPFHelper.createParagraph(doc, "1、总体情况", "heading 1", true);
                XWPFTable generalConditionTable = XWPFHelperTable.createTable(doc, list.size()+1, 3, "generalConditionTable");
                XWPFHelperTable.setTableCellStyle(generalConditionTable);
                XWPFHelperTable.setTableWidthAndHAlign(generalConditionTable, "9070", STJc.CENTER);
                // 获取到刚刚插入的行
                XWPFTableRow row1 = generalConditionTable.getRow(0);
                XWPFHelperTable.setFirstTableRowColor(row1, 3, "E7E6E6");
                // 设置第一行单元格内容
                XWPFParagraph serial = row1.getCell(0).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(serial, "序号", ParagraphAlignment.CENTER);
                XWPFParagraph statisContent = row1.getCell(1).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(statisContent, "统计内容", ParagraphAlignment.CENTER);
                XWPFParagraph data = row1.getCell(2).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(data, "数据", ParagraphAlignment.CENTER);
    
                // 插入内容
                XWPFHelperTable.setTableContent(generalConditionTable, staticsticName, list);
    
                doc.setTable(0, generalConditionTable);
    
                //插入第二个表格
                XWPFHelper.createParagraph(doc, "2、人员分布情况", "heading 1", true);
                XWPFTable secondTable = XWPFHelperTable.createTable(doc, list2.size() + 1, 3, "secondTable");
                XWPFHelperTable.setTableCellStyle(secondTable);
                XWPFHelperTable.setTableWidthAndHAlign(secondTable, "9070", STJc.CENTER);
                //获取到刚刚插入的行
                XWPFTableRow row2 = secondTable.getRow(0);
                XWPFHelperTable.setFirstTableRowColor(row2, 3, "E7E6E6");
                //设置第一行单元格内容
                XWPFParagraph serial2 = row2.getCell(0).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(serial2, "序号", ParagraphAlignment.CENTER);
                XWPFParagraph staticsContent2 = row2.getCell(1).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(staticsContent2, "部门名称", ParagraphAlignment.CENTER);
                XWPFParagraph data2 = row2.getCell(2).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(data2, "登录人数", ParagraphAlignment.CENTER);
                //插入内容
                XWPFHelperTable.setTableContent(secondTable,staticsName2,list2);
                doc.setTable(1, secondTable);
    
                //插入第三个表格
                XWPFHelper.createParagraph(doc, "3、其他情况", "heading 1", true);
                XWPFTable thirdTable = XWPFHelperTable.createTable(doc, postsNums.size() + 1, 3, "thirdTable");
                XWPFHelperTable.setTableCellStyle(thirdTable);
                XWPFHelperTable.setTableWidthAndHAlign(thirdTable, "9070", STJc.CENTER);
                //获取到刚刚插入的行
                XWPFTableRow row3 = thirdTable.getRow(0);
                XWPFHelperTable.setFirstTableRowColor(row3, 3, "E7E6E6");
                //设置第一行单元格内容
                XWPFParagraph serial3 = row3.getCell(0).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(serial3, "序号", ParagraphAlignment.CENTER);
                XWPFParagraph staticsContent3 = row3.getCell(1).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(staticsContent3, "统计内容", ParagraphAlignment.CENTER);
                XWPFParagraph data3 = row3.getCell(2).getParagraphs().get(0);
                XWPFHelperTable.setTableCellParagraphContent(data3, "数据", ParagraphAlignment.CENTER);
                //插入内容
                XWPFHelperTable.setTableContent(thirdTable,postNames,postsNums);
                doc.setTable(2, thirdTable);
    
    
                setStreamFile(fileName, doc);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
    
                        e.printStackTrace();
                    }
                }
            }
        }
    
        private static void setStreamFile(String fileName, XWPFDocument doc) {
            fileName = "文件名("+fileName+").docx";
            FileOutputStream fout = null;
            String path = getClassLoader().getResource("").getPath();
            try {
                fout = new FileOutputStream(new File(path, fileName));
                doc.write(fout);
                fout.flush();
                InputStream in = new FileInputStream(new File(path, fileName));
                File newFile = new File(fileName);
                FileUtils.copyInputStreamToFile(in, newFile);
                SlwContext.setStreamData(new StreamData(newFile, StreamData.MOD_DOWNLOAD, fileName));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    

    2 在word表格中动态修改图表(柱状图)数据

    2.1 同样先整理数据

    	public static Map<String, String> getWeekDate() {
            Map<String, String> map = new HashMap();
            Calendar cal = Calendar.getInstance();
            // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
            cal.setFirstDayOfWeek(Calendar.MONDAY);
            // 获得当前日期是一个星期的第几天
            int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
            if (dayWeek == 1) {
                dayWeek = 8;
            }
    
            cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
            Date mondayDate = cal.getTime();
            String weekBegin = sdf.format(mondayDate);
    
            cal.add(Calendar.DATE, 4 + cal.getFirstDayOfWeek());
            Date sundayDate = cal.getTime();
            String weekEnd = sdf.format(sundayDate);
    
            map.put("mondayDate", weekBegin + " 00:00:00");//2021-08-05
            map.put("sundayDate", weekEnd + " 23:59:59");
    
            map.put("mondayTime", sdf2.format(mondayDate));//2021年08月05日
            map.put("sundayTime", sdf2.format(sundayDate));
            return map;
        }
        
    	private static void export() {
            /*
             * 创建一个Map对象,将Word文档需要的数据都保存到该Map对象中
             */
            Map<String, Object> dataMap = new HashMap<>();
    
    
            Map<String, String> weekDate = getWeekDate();
            String mondayDate = weekDate.get("mondayDate");//周一
            name += mondayDate.substring(0, 10).replace("-", "");//文档名称+日期
            String sundayDate = weekDate.get("sundayDate");//周日
            String mondayTime = weekDate.get("mondayTime");//年月日格式
            String sundayTime = weekDate.get("sundayTime");//年月日格式
            String time = mondayTime + "—" + sundayTime;
            dataMap.put("exportTime", time);
    		//中间数据省略,根据自己最后要读取的excel来设置
            System.out.println("导出成功!");
            return;
        }
    

    2.2 将数据写入excel

    public class PoiToExcel {
        public static void toExcel(List<List<String>> statistics, String path) {
            XSSFWorkbook wb = null;//创建XSSFWorkbook对象,针对xlsx使用XSSFWorkbook
            try {
                wb = new XSSFWorkbook(new FileInputStream(path));
            } catch (IOException e) {
                e.printStackTrace();
            }
            XSSFSheet sheet1 = null;
            if (wb != null) {
                sheet1 = wb.getSheet("Sheet1");
            }else {
                System.out.println("未找到sheet");
                System.exit(0);
            }
    
            //写一个循环根据数据的数量来创建表格
            for (int i = 0; i < statistics.size(); i++) {
                if (i == 0) {
                    continue;
                }
                //为了使excel保留之前格式,这里选择了替换数据的方式
                XSSFRow row = null;
                //sheet.getLastRowNum()
                if (i < sheet1.getPhysicalNumberOfRows()) {
                    row = sheet1.getRow(i);
    
                    for (int j = 0; j < statistics.get(i).size(); j++) {
                        if (j != 0) {
                            row.getCell(j).setCellValue(Integer.parseInt(statistics.get(i).get(j)));
                        } else {
                            row.getCell(j).setCellValue(String.valueOf(statistics.get(i).get(j)));
                        }
                    }
                }else {
                    row = sheet1.createRow(i);
                    for (int j = 0; j < statistics.get(i).size(); j++) {
                        if(i != 0 && j!= 0){
                            row.createCell(j).setCellValue(Integer.parseInt(statistics.get(i).get(j)));
                        } else {
                            row.createCell(j).setCellValue(String.valueOf(statistics.get(i).get(j)));
                        }
                    }
                }
    
    
            }
    
            //输出Excel文件
    
            OutputStream output = null;
            try {
                output = new FileOutputStream(path);
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            try {
                wb.write(output);
                output.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        public static void main(String[] args) {
            List<List<String>> statistics = new ArrayList<>();
            statistics.add(Arrays.asList("XXX", "8"));
            statistics.add(Arrays.asList("XXXXX", "100"));
    
    
            toExcel(statistics, "C:\\poi-demo\\src\\main\\output\\result.xlxs");
        }
    }
    
    
    展开全文
  • import java.io.*; import java.util.ArrayList; import java.util.HashMap; ...import org.apache.poi.openxml4j.opc.OPCPackage;...import org.apache.poi.xwpf.usermodel.XWPFDocument;...import org.apache
    package com.gsy.tool.utils;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import com.deepoove.poi.XWPFTemplate;
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.xmlbeans.XmlOptions;
    import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
    
    public class WordS {
        /*public static void main(String[] args) throws Exception {
            InputStream in1 = null;
            InputStream in2 = null;
            OPCPackage src1Package = null;
            OPCPackage src2Package = null;
    
            OutputStream dest = new FileOutputStream("D:\\aaaaa\\w2w.docx");
    
            in1 = new FileInputStream("D:\\aaaaa\\wwww.docx");
            in2 = new FileInputStream("D:\\aaaaa\\wwww2.docx");
            //src1Package = OPCPackage.open(in1);
            src2Package = OPCPackage.open(in2);
    
            XWPFDocument src1Document;// = new XWPFDocument(src1Package);
    
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("birthday", "SDFASDFADSF");
    
            XWPFTemplate render = XWPFTemplate.compile(in1).render(hashMap);
            src1Document = render.getXWPFDocument();
    
            CTBody src1Body = src1Document.getDocument().getBody();
            XWPFParagraph p = src1Document.createParagraph();
            //设置分页符
            p.setPageBreak(true);
            XWPFDocument src2Document = new XWPFDocument(src2Package);
            CTBody src2Body = src2Document.getDocument().getBody();
            appendBody(src1Body, src2Body);
            src1Document.write(dest);
    
        }*/
    
    /*    public static void main(String[] args) throws Exception {
    
            OutputStream dest = new FileOutputStream("D:\\aaaaa\\w2w.docx");
    
            ArrayList<XWPFDocument> xwpfDocuments = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                HashMap<String, Object> hashMap = new HashMap<>();
                hashMap.put("birthday", "SDFASDFADSF");
                InputStream in1 = new FileInputStream("D:\\aaaaa\\wwww.docx");
                XWPFTemplate render = XWPFTemplate.compile(in1).render(hashMap);
                XWPFDocument src1Document = render.getXWPFDocument();
                xwpfDocuments.add(src1Document);
            }
            XWPFDocument appendbodys = appendbodys(xwpfDocuments);
            appendbodys.write(dest);
    
        }*/
    
        public static void main(String[] args) throws Exception {
            ArrayList<HashMap<String, Object>> arrayList = new ArrayList<>();
            OutputStream dest = new FileOutputStream("D:\\aaaaa\\w2w.docx");
            for (int i = 0; i < 10; i++) {
                HashMap<String, Object> hashMap = new HashMap<>();
                hashMap.put("birthday", "SDFASDFADSF   " + i);
                arrayList.add(hashMap);
            }
            getWords(arrayList, dest);
        }
    
        public static void getWords(ArrayList<HashMap<String, Object>> arrayList, OutputStream dest) throws Exception {
    
            ArrayList<XWPFDocument> xwpfDocuments = new ArrayList<>();
            for (HashMap<String, Object> hashMap : arrayList) {
                InputStream in1 = new FileInputStream("D:\\aaaaa\\wwww.docx");
                XWPFTemplate render = XWPFTemplate.compile(in1).render(hashMap);
                XWPFDocument src1Document = render.getXWPFDocument();
                xwpfDocuments.add(src1Document);
            }
            XWPFDocument appendbodys = appendXWPFDocuments(xwpfDocuments);
            appendbodys.write(dest);
        }
    
        public static XWPFDocument appendXWPFDocuments(ArrayList<XWPFDocument> arrayList) throws Exception {
            XWPFDocument xwpfDocument = arrayList.get(0);
            if (arrayList.size() == 0) {
                return xwpfDocument;
            }
            for (int i = 1; i < arrayList.size(); i++) {
                XWPFDocument xwpfDocument1 = arrayList.get(i);
                XWPFParagraph p = xwpfDocument.createParagraph();
                //设置分页符
                p.setPageBreak(true);
                xwpfDocument = appendXWPFDocument(xwpfDocument, xwpfDocument1);
            }
            return xwpfDocument;
        }
    
        private static XWPFDocument appendXWPFDocument(XWPFDocument src, XWPFDocument append) throws Exception {
            CTBody body = src.getDocument().getBody();
            CTBody body1 = append.getDocument().getBody();
            appendBody(body, body1);
            return src;
        }
    
        private static void appendBody(CTBody src, CTBody append) throws Exception {
            XmlOptions optionsOuter = new XmlOptions();
            optionsOuter.setSaveOuter();
            String appendString = append.xmlText(optionsOuter);
            String srcString = src.xmlText();
            String prefix = srcString.substring(0, srcString.indexOf(">") + 1);
            String mainPart = srcString.substring(srcString.indexOf(">") + 1, srcString.lastIndexOf("<"));
            String sufix = srcString.substring(srcString.lastIndexOf("<"));
            String addPart = appendString.substring(appendString.indexOf(">") + 1, appendString.lastIndexOf("<"));
            CTBody makeBody = CTBody.Factory.parse(prefix + mainPart + addPart + sufix);
            src.set(makeBody);
        }
    
    }
    

    效果
    在这里插入图片描述
    未 分页 后
    在这里插入图片描述
    分页
    在这里插入图片描述

    展开全文
  • html表格 转 word表格

    2021-09-06 17:28:57
    } 没做优化,能跑,主要是jsoup解析html 然后按word表格的方式做colspan和rowspan 结果为 <w:tbl> <w:tblPr> <w:tblW w:w="9795" w:type="dxa"/> <w:tblInd w:w="-34" w:type="dxa"/> <w:tblBorders> ...
    
    <w:tbl>
    	<w:tblPr>
    		<w:tblW w:w="9795" w:type="dxa" />
    		<w:tblInd w:w="-34" w:type="dxa" />
    		<w:tblBorders>
    			<w:top w:val="single" w:sz="4" w:space="0" w:color="auto" />
    			<w:left w:val="single" w:sz="4" w:space="0" w:color="auto" />
    			<w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto" />
    			<w:right w:val="single" w:sz="4" w:space="0" w:color="auto" />
    			<w:insideH w:val="single" w:sz="6" w:space="0"
    				w:color="auto" />
    			<w:insideV w:val="single" w:sz="6" w:space="0"
    				w:color="auto" />
    		</w:tblBorders>
    		<w:tblLayout w:type="fixed" />
    		<w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0"
    			w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1" />
    	</w:tblPr>
    	<w:tblGrid>
    		<w:gridCol w:w="1" />
    		<w:gridCol w:w="2" />
    		<w:gridCol w:w="2062" />
    		<w:gridCol w:w="2062" />
    	</w:tblGrid>
    	<w:tr>
    		<w:tc>
    			<w:p>
    				<w:pPr>
    					<w:jc w:val="center" />
    					<w:rPr>
    						<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial" />
    						<w:b />
    						<w:color w:val="FF0000" />
    						<w:sz w:val="20" />
    						<w:lang w:eastAsia="zh-CN" />
    					</w:rPr>
    				</w:pPr>
    				<w:r>
    					<w:t>gsdgsY</w:t>
    				</w:r>
    			</w:p>
    		</w:tc>
    		<w:tc>
    			<w:p>
    				<w:pPr>
    					<w:jc w:val="center" />
    					<w:rPr>
    						<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial" />
    						<w:b />
    						<w:color w:val="FF0000" />
    						<w:sz w:val="20" />
    						<w:lang w:eastAsia="zh-CN" />
    					</w:rPr>
    				</w:pPr>
    				<w:r>
    					<w:t>Y</w:t>
    				</w:r>
    			</w:p>
    		</w:tc>
    	</w:tr>
    	<w:tr>
    		<w:tc>
    			<w:p>
    				<!-- <w:r> 之前加这个可以居中.和行,列的合并 -->
    				<w:pPr>
    					<w:jc w:val="center" />
    					<w:rPr>
    						<!--<w:gridSpan w:val="2"/> colspan -->
    						<!-- <w:vMerge /> 这个是列的合并 -->
    
    
    						<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial" />
    						<w:b />
    						<w:color w:val="FF0000" />
    						<w:sz w:val="20" />
    						<w:lang w:eastAsia="zh-CN" />
    					</w:rPr>
    				</w:pPr>
    				<!-- -->
    				<w:r>
    					<w:t>Ydgfdgdsfgshfjtjt</w:t>
    				</w:r>
    			</w:p>
    		</w:tc>
    		<w:tc>
    			<w:p>
    				<w:pPr>
    					<w:jc w:val="center" />
    					<w:rPr>
    						<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial" />
    						<w:b />
    						<w:color w:val="FF0000" />
    						<w:sz w:val="20" />
    						<w:lang w:eastAsia="zh-CN" />
    					</w:rPr>
    				</w:pPr>
    				<w:r>
    					<w:t>Y</w:t>
    				</w:r>
    			</w:p>
    		</w:tc>
    	</w:tr>
    </w:tbl>
    

    这是个典型的表格.其中
    在这里插入图片描述
    可以控制 自己看图.
    可以实现html的表格到word的表格的转换. 之后贴java代码

    首先制作出来html

    <table border=\ ">
    	<tr>
    		<td align=\ " center \>姓名</td>
    		<td align=\ " center \>既往症</td>
    		<td align=\ " center \>09/01/2021-08/31/2022</td>
    		<td align=\ " center \>09/01/2022-08/31/2023</td>
    		<td align=\ " center \>09/01/2023-08/31/2024</td>
    	</tr>
    	<tr>
    		<td rowspan=6 align=\ " center \>张三</td>
    		<td align=\ " center \ colspan=4>高血压不认定为既往症Hypertension is not
    			recognized as a pre-existing disease</td>
    	</tr>
    	<tr>
    		<td align=\ " center \>红眼病null</td>
    		<td align=\ " center \ colspan=3>不涵盖Not Covered</td>
    	</tr>
    	<tr>
    		<td align=\ " center \>心肌炎null</td>
    		<td align=\ " center \ colspan=3>保险除外责任Policy Exclusion</td>
    	</tr>
    	<tr>
    		<td align=\ " center \>过敏性鼻炎null</td>
    		<td align=\ " center \ colspan=3>全额理赔至相关福利限额Fully covered up to
    			related policy limitations</td>
    	</tr>
    	<tr>
    		<td align=\ " center \>关节炎arthritis</td>
    		<td align=\ " center \>4000</td>
    		<td align=\ " center \>5000</td>
    		<td align=\ " center \>重新评估</td>
    	</tr>
    	<tr>
    		<td align=\ " center \>贫血null</td>
    		<td align=\ " center \ colspan=3>3000</td>
    	</tr>
    </table>
    

    java代码

    
    	//html 到 word 
    	public static void main(String[] ssd) {
    		
    		String htmlStr = "<table border=\"1\"> <tr><td align=\"center\">姓名</td> <td align=\"center\">既往症</td> <td align=\"center\">09/01/2021-08/31/2022</td><td align=\"center\">09/01/2022-08/31/2023</td><td align=\"center\">09/01/2023-08/31/2024</td></tr><tr><td rowspan = 6 align=\"center\">张三</td><td align=\"center\" colspan = 4>高血压不认定为既往症Hypertension is not recognized as a pre-existing disease</td></tr><tr><td align=\"center\">红眼病null</td><td align=\"center\" colspan = 3>不涵盖Not Covered</td></tr><tr><td align=\"center\">心肌炎null</td><td align=\"center\" colspan = 3>保险除外责任Policy Exclusion</td></tr><tr><td align=\"center\">过敏性鼻炎null</td><td align=\"center\" colspan = 3>全额理赔至相关福利限额Fully covered up to related policy limitations</td></tr><tr><td align=\"center\">关节炎arthritis</td><td align=\"center\">4000</td><td align=\"center\">5000</td><td align=\"center\">重新评估</td></tr><tr><td align=\"center\">贫血null</td><td align=\"center\" colspan = 3>3000</td></tr></table>";
    
    		System.out.println(htmlStr);
    		
    		org.jsoup.nodes.Document doc = Jsoup.parse(htmlStr);
    		Elements rows  = doc.select("table").get(0).select("tr");
    		System.out.println(rows.size());
    				
    		String wordTableStr  = "";
    
    		wordTableStr +=  "<w:tbl>\r\n" + 
    				"<w:tblPr>\r\n" + 
    				"  <w:tblW w:w=\"9795\" w:type=\"dxa\"/>\r\n" + 
    				"  <w:tblInd w:w=\"-34\" w:type=\"dxa\"/>\r\n" + 
    				"  <w:tblBorders>\r\n" + 
    				"	<w:top w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"	<w:left w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"	<w:bottom w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"	<w:right w:val=\"single\" w:sz=\"4\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"	<w:insideH w:val=\"single\" w:sz=\"6\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"	<w:insideV w:val=\"single\" w:sz=\"6\" w:space=\"0\" w:color=\"auto\"/>\r\n" + 
    				"  </w:tblBorders>\r\n" + 
    				"  <w:tblLayout w:type=\"fixed\"/>\r\n" + 
    				"  <w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:firstColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/>\r\n" + 
    				"</w:tblPr>";
    		
    /*		wordTableStr +=  "<w:tblGrid>\r\n" + 
    				"  <w:gridCol w:w=\"1\"/>\r\n" + 
    				"  <w:gridCol w:w=\"2\"/>\r\n" + 
    				"  <w:gridCol w:w=\"2062\"/>\r\n" + 
    				"  <w:gridCol w:w=\"2062\"/>\r\n" + 
    				"</w:tblGrid>";  设定列的长度.先不用看看*/
    				
    
    		Element firstTr = rows.get(0);//html 表头
    		Elements firstTr_Tds = firstTr.select("td");
    
    		//拼接word的表头行. (假设前提:表头不会有colspan rowspan)
    		wordTableStr +=    "<w:tr >";
    		for (int i= 0 ; i<firstTr_Tds.size(); i++) {
    			wordTableStr +=    "<w:tc><w:p>";
    			wordTableStr +="<w:pPr>\r\n" + 
    							"<w:jc w:val=\"center\"/>\r\n" + 
    							"<w:rPr>\r\n" + 
    							"  <w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\"/>\r\n" + 
    							"  <w:b/>\r\n" + 
    							"  <w:color w:val=\"FF0000\"/>\r\n" + 
    							"  <w:sz w:val=\"20\"/>\r\n" + 
    							"  <w:lang w:eastAsia=\"zh-CN\"/>\r\n" + 
    							"</w:rPr>\r\n" + 
    							"</w:pPr>";
    			
    			wordTableStr += "<w:r>";
    			wordTableStr += "<w:t>";
    			
    			wordTableStr += firstTr_Tds.get(i).text();
    			
    			wordTableStr += "</w:t>";
    			wordTableStr += "</w:r>";
    			
    			wordTableStr +=    "</w:p></w:tc>";
    		}
    		wordTableStr +=    "</w:tr >";
    		
    		
    		//数据行
    		HashMap rowspanMap = new HashMap(); // key 列  value 剩余多少rowspan //
    		for(int a= 1; a < rows.size(); a++) {
    			
    			Elements tds = rows.get(a).select("td");
    			
    //			int realColNum = 0;
    			int tdColNum = 0;
    			wordTableStr +=    "<w:tr >";
    			for (int realColNum= 0 ; realColNum<firstTr_Tds.size();) {
    				
    				String spanStr = "";
    				
    				if(rowspanMap.containsKey(realColNum)) {
    					spanStr += " <w:vMerge /> ";
    					rowspanMap.put(realColNum, (int)(rowspanMap.get(realColNum))-1);
    					wordTableStr +=    "<w:tc><w:p>";
    					wordTableStr +="<w:pPr>\r\n" + 
    									"<w:jc w:val=\"center\"/>\r\n" + 
    									"<w:rPr>\r\n" + 
    									spanStr +
    									"  <w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\"/>\r\n" + 
    									"  <w:b/>\r\n" + 
    									"  <w:color w:val=\"FF0000\"/>\r\n" + 
    									"  <w:sz w:val=\"20\"/>\r\n" + 
    									"  <w:lang w:eastAsia=\"zh-CN\"/>\r\n" + 
    									"</w:rPr>\r\n" + 
    									"</w:pPr>";
    					
    					wordTableStr += "<w:r>";
    					wordTableStr += "<w:t>";
    					
    					wordTableStr += "";
    					
    					wordTableStr += "</w:t>";
    					wordTableStr += "</w:r>";
    					
    					wordTableStr +=    "</w:p></w:tc>";
    					
    					realColNum++;
    					continue;
    				}
    				
    				Element currentCell = tds.get(tdColNum);
    				tdColNum ++ ;
    				
    				
    				if(currentCell.hasAttr("rowspan")) {
    					rowspanMap.put(realColNum, currentCell.attr("rowspan"));
    					spanStr += "                  <w:vMerge w:val=\"restart\"/>"  ;
    					System.out.println(rowspanMap.get(realColNum));
    					rowspanMap.put(realColNum, Integer.parseInt( (String)rowspanMap.get(realColNum))-1);
    				} 
    				
    				if(currentCell.hasAttr("colspan")) {
    					spanStr += "<w:gridSpan w:val=\""+currentCell.attr("colspan")+"\"/>";
    					realColNum += Integer.parseInt(currentCell.attr("colspan"));
    				}else {
    					realColNum += 1;
    				}
    				
    				
    				wordTableStr +=    "<w:tc><w:p>";
    				wordTableStr +="<w:pPr>\r\n" + 
    								"<w:jc w:val=\"center\"/>\r\n" + 
    								"<w:rPr>\r\n" + 
    								spanStr +
    								"  <w:rFonts w:ascii=\"Arial\" w:hAnsi=\"Arial\" w:cs=\"Arial\"/>\r\n" + 
    								"  <w:b/>\r\n" + 
    								"  <w:color w:val=\"FF0000\"/>\r\n" + 
    								"  <w:sz w:val=\"20\"/>\r\n" + 
    								"  <w:lang w:eastAsia=\"zh-CN\"/>\r\n" + 
    								"</w:rPr>\r\n" + 
    								"</w:pPr>";
    				
    				wordTableStr += "<w:r>";
    				wordTableStr += "<w:t>";
    				
    				wordTableStr += currentCell.text();
    				
    				wordTableStr += "</w:t>";
    				wordTableStr += "</w:r>";
    				
    				wordTableStr +=    "</w:p></w:tc>";
    			}
    			wordTableStr +=    "</w:tr >";
    		}
    		
    		
    		//
    		
    		
    		
    		
    		wordTableStr += "</w:tbl>";
    		
    		
    		System.out.println(wordTableStr);
    		
    	}
    

    没做优化,能跑,主要是jsoup解析html 然后按word表格的方式做colspan和rowspan

    结果为

    <w:tbl>
    <w:tblPr>
      <w:tblW w:w="9795" w:type="dxa"/>
      <w:tblInd w:w="-34" w:type="dxa"/>
      <w:tblBorders>
    	<w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
    	<w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/>
    	<w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
    	<w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
    	<w:insideH w:val="single" w:sz="6" w:space="0" w:color="auto"/>
    	<w:insideV w:val="single" w:sz="6" w:space="0" w:color="auto"/>
      </w:tblBorders>
      <w:tblLayout w:type="fixed"/>
      <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
    </w:tblPr><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>姓名</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>既往症</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>09/01/2021-08/31/2022</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>09/01/2022-08/31/2023</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>09/01/2023-08/31/2024</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
                      <w:vMerge w:val="restart"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>张三</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
    <w:gridSpan w:val="4"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>高血压不认定为既往症Hypertension is not recognized as a pre-existing disease</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
     <w:vMerge />   <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t></w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>红眼病null</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
    <w:gridSpan w:val="3"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>不涵盖Not Covered</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
     <w:vMerge />   <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t></w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>心肌炎null</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
    <w:gridSpan w:val="3"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>保险除外责任Policy Exclusion</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
     <w:vMerge />   <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t></w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>过敏性鼻炎null</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
    <w:gridSpan w:val="3"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>全额理赔至相关福利限额Fully covered up to related policy limitations</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
     <w:vMerge />   <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t></w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>关节炎arthritis</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>4000</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>5000</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>重新评估</w:t></w:r></w:p></w:tc></w:tr ><w:tr ><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
     <w:vMerge />   <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t></w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>贫血null</w:t></w:r></w:p></w:tc><w:tc><w:p><w:pPr>
    <w:jc w:val="center"/>
    <w:rPr>
    <w:gridSpan w:val="3"/>  <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
      <w:b/>
      <w:color w:val="FF0000"/>
      <w:sz w:val="20"/>
      <w:lang w:eastAsia="zh-CN"/>
    </w:rPr>
    </w:pPr><w:r><w:t>3000</w:t></w:r></w:p></w:tc></w:tr ></w:tbl>
    

    word中的样子如图在这里插入图片描述

    展开全文
  • 一个使用Apache的poi使用word模板循环输出表格行并导出的例子
  • 电脑Word文档中两个表格如何合并

    千次阅读 2021-07-28 05:07:22
    接下来小编就教大家怎么在Word文档中将两个表格拼接。具体如下:1. 首先打开电脑进入桌面,新建一个空白的Word文档。然后点击打开。2. 进入到文档界面之后,我们使用表格工具绘制两个表格,行列数可以不一样,但是...
  • 同事最近被安排整理资料,主要工作室将文档中的表格数据提取出来并整理层Excel表格供我们FII刀具...一个Word文档中主要包含了有这么几种类型的内容:paragraph(段落)、table(表格)、character(字符)、image(图片)等...
  • 工作常用的excel,word导出,需要引入下面的6个主要包,和主要包依赖的其他包 ,可以看下面的表格进行依赖下载引入 这下面的两张图是主要包对应涉及到功能,可以按需要进行引入,有些真的用不到的主要包可以不引入 ...
  • 1 Maven依赖 com.alibaba easyexcel 2.2.7 cn.hutool hutool-all 5.6.2 2 合并单元格 /** * 合并单元格 * * @param table 表格对象 * @param beginRowIndex 开始行索引 * @param endRowIndex 结束行索引 * ...
  • Aspose合并单元格 DocumentBuilder(表格)语法介绍 StartTable 创建表格 InsertCell 插入单元格 单元格背景色 单元格对齐方式 EndRow 结束当前行 EndTable 结束表格 演示过程 效果图
  • 因为本人长期从事Oa相关项目的开发,所以处理word文档,Pdf,Excel等是在所难免的。1.需求 处理Excel 能够用...这个插件能够将用户从word文档拷贝的表格标签保存。可是图片信息须要另行上传。如今问题出来了,我们要...
  • word中将上下2个表格连成1个表格

    千次阅读 2022-03-02 15:00:30
    1、选中整个表格,右键 -> 表格属性 -> 环绕文字 选择无,对两个表格进行同样操作 2、确保两个表格的总体表格宽度一样(里面单元格不一样长没关系,总体左右宽度一定要一样),并且两个表格在纸张中的...
  • 如下所示,有两个表格,长宽都一致,如何进行合并? 解决的办法很简单:只要在中间的空行输入del键,删除当前回车即可变成以下所需求的目标。 但是有时候会出现以下情况: 表面看起来好象是一起了,但是仔细看...
  • } } } /** * word单元格列合并 * @param table 表格 * @param row 合并列所在行 * @param startCell 开始列 * @param endCell 结束列 * @date 2020年4月8日 下午4:43:54 */ public static void ...
  • 1:java中使用poi实现合并word文档,兼容图片的合并并分页 package com.wzpm.meeting.core.component.util; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.Document; ...
  • ## 安装 模块 pip install python-docx ## 使用 ...## 读取 Word 文件里的表格信息 try: doc = Document('A:\\ABC.docx') except Exception as e: print("读取 Word 文件失败", e) else: print("...
  • 问题描述python中用docx库读取word文件,若word文件中包含合并的表格表格则通过docx读取显示:file = docx.Document(path)for table in file.tables:for row in table.rows:for cell in row.cells:print(cell.text)...
  • 电脑word文档中怎么给表格自动添加序号?...今天小编告诉大家的就是word表格怎么自动添加序号并添加表目录。具体如下:1. 我们以下图为例。可以到到图中是三个表格,我们给这三个表格标序号,形...
  • 选择第一个左上角的十字形,右键单击,选择表格内容 原先的“文绕图”为“无”,这里将其设置为“文绕图”,然后点击确定 将光标放在这里: 按下delete键,表格合并到一起了,而且不会自动调整。
  • Java如何制作带表格word文档

    千次阅读 2020-08-05 17:44:10
    设置和添加表格有关操作 写在最前 首先您需要导入WordGo的jar包或者写上maven仓库的坐标,最新版直接去git下载就好:https://github.com/qrpcode/wordgo/blob/master/README_CN.md 表格计算行列时,全部和我们平时...
  • 106 }107 /** 108 * poi 查找word表格中占位符并替换109 *@authorunknown110 * @Date 2020年3月2日111 * @Time 下午2:01:47112 *@paramitTable113 *@parammap114 *@paramempty115 *@paramignorecase116 */ 117 ...
  • 最近项目上经常操作word,之前一直用的freemarker这个框架,在网上搜寻了大量的资料,都推荐使用poi-tl这个工具来实现, 这里我就自己写了一个demo,亲自测试了一下,这个word合并果然简单靠谱,需要注意的是: ...
  • 使用docxtemplater生成word,包含表格和echarts图表 首先要加载一下依赖 import PizZip from 'pizzip' import docxtemplater from 'docxtemplater' import JszipUtil from 'jszip-utils' import FileSave from 'file...
  • poi操作word模板表格遇到的一些问题

    千次阅读 2020-06-19 16:30:10
    poi操作word模板是遇到一些表格展示问题,生成word表格动态添加行时新增行样式和模板设置样式不一致 添加新的一行官网实现方式有以下几种 table.addNewRowBetween 官方没实现 table.insertNewTableRow(pos) 在pos...
  • 因项目需要,生成的word表格需要用到“黑体”字(可能就是不支持中文字体), 但怎么改代码都无效,查看源码发现是通过xml来拼接word最后转成word的, 最后在这个目录下 修改docxtable.js文件 增加这两行...
  • 本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格),这里...
  • poi-java导出word表格中换行

    千次阅读 2019-02-25 18:26:44
    //替换表格的内容 /** * 替换表格中的指定文字 */ List&lt;XWPFTable&gt; tables = document.getTables(); for (XWPFTable table : tables) { List&lt;XWPFTableRow&gt; rows = table.getRows...
  • java之poi读取word文档表格的图片并保存
  • poi导出word 合并自定义表格,自定义标题,更新目录

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,593
精华内容 1,437
关键字:

word表格拼接