package io.visi;/** * @Author: keliang * @Date: 2021/10/1 08:59 */import cn.hutool.core.util.StrUtil;import com.alibaba.druid.sql.visitor.functions.Char;import com.alibaba.excel.EasyExcel;import io.visi.sister.WordDTO;import org.apache.poi.hwpf.extractor.WordExtractor;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.poifs.filesystem.FileMagic;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import org.apache.poi.xwpf.usermodel.XWPFDocument;import java.io.*;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 统计 */public class Statistic { private static String filePath1 = "/Users/keliang/test/sister/红太村调查/红太村村庄调查问卷1.docx"; // '√' 8730 private static String duigou = String.valueOf((char) 8730); // '\n' 10 private static String br = String.valueOf((char) 10); // '①' 9312 private static String circle1 = String.valueOf((char) 9312); private static String circle2 = String.valueOf((char) 9313); private static String circle3 = String.valueOf((char) 9314); private static String circle4 = String.valueOf((char) 9315); private static String circle5 = String.valueOf((char) 9316); private static String circle6 = String.valueOf((char) 9317); private static String circle7 = String.valueOf((char) 9318); private static String circle8 = String.valueOf((char) 9319); private static String circle9 = String.valueOf((char) 9320); private static String circle10 = String.valueOf((char) 9321); // '\t' 9 private static String t = String.valueOf((char) 9); // ' ' 32 private static String blank = String.valueOf((char) 32); // '_' 95 private static String xhx = String.valueOf((char) 95); // ':'65306 private static String mh = String.valueOf((char) 65306); // ':' 58 private static String mh2 = String.valueOf((char) 58); // '□' 9633 private static String rect = String.valueOf((char) 9633); // ',' 65292 private static String douhao = String.valueOf((char) 65292); // ';' 65307 private static String fenhao = String.valueOf((char) 65307); // '。' 12290 private static String juhao = String.valueOf((char) 12290); //小括号'⑴' private static String xkh1 = String.valueOf((char) 9332); private static String xkh2 = String.valueOf((char) 9333); private static String xkh3 = String.valueOf((char) 9334); private static String xkh4 = String.valueOf((char) 9335); private static String xkh5 = String.valueOf((char) 9336); private static String xkh6 = String.valueOf((char) 9337); private static String xkh7 = String.valueOf((char) 9338); private static String xkh8 = String.valueOf((char) 9339); private static String xkh9 = String.valueOf((char) 9340); private static String xkh10 = String.valueOf((char) 9341); private static String xkh11 = String.valueOf((char) 9342); private static String xkh12 = String.valueOf((char) 9343); private static String xkh13 = String.valueOf((char) 9344); private static String xkh14 = String.valueOf((char) 9345); private static String xkh15 = String.valueOf((char) 9346); private static String xkh16 = String.valueOf((char) 9347); private static final String breakFH = br + circle1 + circle2 + circle3 + circle4 + circle5 + circle6 + circle7 + circle8 + circle9 + circle10 + mh + mh2 + rect + xkh1 + xkh2 + xkh3 + xkh4 + xkh5 + xkh6 + xkh7 + xkh8 + xkh9 + xkh10; private static String fileDir = "/Users/keliang/test/sister/红太村调查/"; public static void main(String[] args) throws Exception { String fileDir = "/Users/keliang/test/sdata/红太村调查/"; List<WordDTO> list = new ArrayList<>(); File file = new File(fileDir); File[] fileList = file.listFiles(); for (int i = 0; i < fileList.length; i++) { if (fileList[i].isFile()) { System.out.println(fileList[i].toString()); String filePath = fileList[i].toString(); //really a OOXML Word file InputStream is = new BufferedInputStream(new FileInputStream(filePath)); String wordContent = read(is); //截取"填写人基本情况" 到 "二、目前居住生活状况" 之间的内容 String txrjbqk = "填写人基本情况"; String mqjzshzk = "目前居住生活状况"; String xncjsyx = "新农村建设意向"; String qtfm = "其他方面"; Integer txrjbqkIndex = wordContent.indexOf(txrjbqk); Integer mqjzshzkIndex = wordContent.indexOf(mqjzshzk); Integer xncjsyxIndex = wordContent.indexOf(xncjsyx); Integer qtfmIndex = wordContent.indexOf(qtfm); WordDTO dto = new WordDTO(); dto.setDocName(filePath); //word中 一、填写人基本情况的内容 String wordContentPart1 = wordContent.substring(txrjbqkIndex, mqjzshzkIndex); writePart1(wordContentPart1, dto); //word中 二、目前居住生活状况 String wordContentPart2 = wordContent.substring(mqjzshzkIndex, xncjsyxIndex); writePart2(wordContentPart2, dto); //word中 三、新农村建设意向 String wordContentPart3 = wordContent.substring(xncjsyxIndex, qtfmIndex); writePart3(wordContentPart3, dto); //word中 四、其他方面 String wordContentPart4 = wordContent.substring(qtfmIndex); writePart4(wordContentPart4, dto); is.close(); list.add(dto); } } String fileName = "/Users/keliang/test/sdata/ok/红太村调查.xlsx"; EasyExcel.write(fileName, WordDTO.class).sheet("数据").doWrite(list); } static String read(InputStream is) throws Exception { System.out.println(FileMagic.valueOf(is)); String text = ""; if (FileMagic.valueOf(is) == FileMagic.OLE2) { WordExtractor ex = new WordExtractor(is); text = ex.getText(); ex.close(); } else if (FileMagic.valueOf(is) == FileMagic.OOXML) { XWPFDocument doc = new XWPFDocument(is); XWPFWordExtractor extractor = new XWPFWordExtractor(doc); text = extractor.getText(); extractor.close(); } return text; } private static void writePart4(String wordContentPart4, WordDTO dto) { System.out.println("部分4"); for (int no = 32; no <= 35; no++) { if (no == 35) { String startStr = "其他的意见和建议"; wordContentPart4.indexOf(startStr); Integer startIndex = wordContentPart4.indexOf(startStr) + 8; Integer endIndex = wordContentPart4.length(); String value = wordContentPart4.substring(startIndex); System.out.println("no" + no + ": " + value); dto.setQtdyjhjy(value); } else { Integer duigouIndex = wordContentPart4.indexOf(duigou); String value = getDuigouAfterContent(wordContentPart4, duigouIndex); wordContentPart4 = wordContentPart4.substring(duigouIndex + 1); System.out.println("no" + no + ": " + value); switch (no) { case 32: dto.setRgjlczjxjzzzzbcywdqtdftyjxznsfyyfqmqdzzbhdxydxjbc(value); break; case 33: dto.setNsfzzctggfdxsyjttyjybctdhqtggzc(value); break; case 34: dto.setNdbcmqzycjlsdgsgjzlssjdqkljcd(value); break; } } } } private static void writePart3(String wordContentPart3, WordDTO dto) { System.out.println("部分3"); for (int no = 24; no <= 31; no++) { if (no == 24) { //多选 String endStr = "新宅是否需要阳台或屋顶平台"; Integer endIndex = wordContentPart3.indexOf(endStr); Map<String, String> value25Map = getDuigouAfterDuoxuanContent(wordContentPart3, endIndex); String value = value25Map.get("value"); wordContentPart3 = value25Map.get("content") != null ? value25Map.get("content") : wordContentPart3; System.out.println("no" + no + ": " + value); dto.setNxwxzdjzxs(value); } else if (no == 28) { String value = ""; System.out.println("no" + no + ": " + value); String value1 = getXkhDurationContent(wordContentPart3, xkh1, xkh2); String value2 = getXkhDurationContent(wordContentPart3, xkh2, xkh3); String value3 = getXkhDurationContent(wordContentPart3, xkh3, xkh4); String value4 = getXkhDurationContent(wordContentPart3, xkh4, xkh5); String value5 = getXkhDurationContent(wordContentPart3, xkh5, xkh6); String value6 = getXkhDurationContent(wordContentPart3, xkh6, xkh7); String value7 = getXkhDurationContent(wordContentPart3, xkh7, xkh8); String value8 = getXkhDurationContent(wordContentPart3, xkh8, xkh9); String value9 = getXkhDurationContent(wordContentPart3, xkh9, xkh10); String value10 = getXkhDurationContent(wordContentPart3, xkh10, xkh11); String value11 = getXkhDurationContent(wordContentPart3, xkh11, xkh12); String value12 = getXkhDurationContent(wordContentPart3, xkh12, xkh13); String value13 = getXkhDurationContent(wordContentPart3, xkh13, xkh14); String value14 = getXkhDurationContent(wordContentPart3, xkh14, xkh15); String value15 = getXkhDurationContent(wordContentPart3, xkh15, xkh16); String endStr = "上表中您最希望尽快改善"; String value16 = getXkhDurationContent(wordContentPart3, xkh16, endStr); dto.setDlzk(value1); dto.setTcss(value2); dto.setYlz(value3); dto.setWhhdz(value4); dto.setXxyey(value5); dto.setSd(value6); dto.setTyss(value7); dto.setGdzk(value8); dto.setZfrl(value9); dto.setCn(value10); dto.setGsys(value11); dto.setYspfgq(value12); dto.setWscl(value13); dto.setLjsj(value14); dto.setCzzm(value15); dto.setHjwstj(value16); Integer endIndex = wordContentPart3.indexOf(endStr); wordContentPart3 = wordContentPart3.substring(endIndex); } else if (no == 29) { //填空 String startStr = "上表中您最希望尽快改善的项目按顺序排队"; String endtStr = "您希望村内设置何种室内活动场所"; Integer startIndex = wordContentPart3.indexOf(startStr) + 25; Integer endIndex = wordContentPart3.indexOf(endtStr); String value = getTianKongContent(wordContentPart3, startIndex, endIndex); wordContentPart3 = wordContentPart3.substring(endIndex); System.out.println("no" + no + ": " + value);// if (value.contains(xkh1) && !value.equals("道路状况")){// value = value.replaceAll(xkh1, "道路状况");// }else {// value = value.replaceAll(xkh1, "");// }// value = value.replaceAll("、", ";"); value = (value.contains(xkh1) && !value.contains("道路状况")) ? value.replaceAll(xkh1, "道路状况") : value.replaceAll(xkh1, ""); value = (value.contains(xkh2) && !value.contains("停车设施")) ? value.replaceAll(xkh2, "停车设施") : value.replaceAll(xkh2, ""); value = (value.contains(xkh3) && !value.contains("医疗站")) ? value.replaceAll(xkh3, "医疗站") : value.replaceAll(xkh3, ""); value = (value.contains(xkh4) && !value.contains("文化活动站")) ? value.replaceAll(xkh4, "文化活动站") : value.replaceAll(xkh4, ""); value = (value.contains(xkh5) && !value.contains("小学幼儿园")) ? value.replaceAll(xkh5, "小学幼儿园") : value.replaceAll(xkh5, ""); value = (value.contains(xkh6) && !value.contains("商店")) ? value.replaceAll(xkh6, "商店") : value.replaceAll(xkh6, ""); value = (value.contains(xkh7) && !value.contains("体育设施")) ? value.replaceAll(xkh7, "体育设施") : value.replaceAll(xkh7, ""); value = (value.contains(xkh8) && !value.contains("供电状况")) ? value.replaceAll(xkh8, "供电状况") : value.replaceAll(xkh8, ""); value = (value.contains(xkh9) && !value.contains("做饭燃料")) ? value.replaceAll(xkh9, "做饭燃料") : value.replaceAll(xkh9, ""); value = (value.contains(xkh10) && !value.contains("采暖")) ? value.replaceAll(xkh10, "采暖") : value.replaceAll(xkh10, ""); value = (value.contains(xkh11) && !value.contains("供水饮水")) ? value.replaceAll(xkh11, "供水饮水") : value.replaceAll(xkh11, ""); value = (value.contains(xkh12) && !value.contains("雨水排放沟渠")) ? value.replaceAll(xkh12, "雨水排放沟渠") : value.replaceAll(xkh12, ""); value = (value.contains(xkh13) && !value.contains("污水处理")) ? value.replaceAll(xkh13, "污水处理") : value.replaceAll(xkh13, ""); value = (value.contains(xkh14) && !value.contains("垃圾收集")) ? value.replaceAll(xkh14, "垃圾收集") : value.replaceAll(xkh14, ""); value = (value.contains(xkh15) && !value.contains("村庄照明")) ? value.replaceAll(xkh15, "村庄照明") : value.replaceAll(xkh15, ""); value = (value.contains(xkh16) && !value.contains("环境卫生条件")) ? value.replaceAll(xkh16, "环境卫生条件") : value.replaceAll(xkh16, ""); dto.setNzxwjkgsdxmasxpd(value); } else if (no == 30) { String startStr = "请根据重要程度排序"; //中间值,中间值之前的是填空,之后的是单选 String middleStr = "乓球等健身场所"; String endStr = "您希望村内设置何种室内活动场所"; String value = getTiankongOrDuiGou(wordContentPart3, startStr, endStr, middleStr); value = value.replaceAll("、", ""); if (value.contains(circle1) && !value.contains("乓球等健身场所")) { value = value.replaceAll(circle1, "乓球等健身场所;"); } else { value = value.replaceAll(circle1, ""); } if (value.contains(circle2) && !value.contains("棋牌室")) { value = value.replaceAll(circle2, "棋牌室;"); } else { value = value.replaceAll(circle2, ""); } if (value.contains(circle3) && !value.contains("图书阅览室")) { value = value.replaceAll(circle3, "图书阅览室;"); } else { value = value.replaceAll(circle3, ""); } if (value.contains(circle4) && !value.contains("多功能活动室")) { value = value.replaceAll(circle4, "多功能活动室;"); } else { value = value.replaceAll(circle4, ""); }// value = value.replaceAll("[\\n]", ""); //todo 没看懂,让多选,为什么填对钩 Integer splitStartStrIndex = wordContentPart3.lastIndexOf(endStr); wordContentPart3 = wordContentPart3.substring(splitStartStrIndex); System.out.println("no" + no + ": " + value); dto.setNxwcnszhzsnhdcs1(value); } else if (no == 31) { String startStr = "请根据重要程度排序"; //中间值,中间值之前的是填空,之后的是单选 String middleStr = "球类活动健身场所"; String endStr = "其他方面"; String value = getTiankongOrDuiGou(wordContentPart3, startStr, endStr, middleStr); value = value.replaceAll("、", ""); if (value.contains(circle1) && !value.contains("球类活动健身场所")) { value = value.replaceAll(circle1, "球类活动健身场所;"); } else { value = value.replaceAll(circle1, ""); } if (value.contains(circle2) && !value.contains("健身器材设施")) { value = value.replaceAll(circle2, "健身器材设施;"); } else { value = value.replaceAll(circle2, ""); } if (value.contains(circle3) && !value.contains("小广场")) { value = value.replaceAll(circle3, "小广场;"); } else { value = value.replaceAll(circle3, ""); } if (value.contains(circle4) && !value.contains("儿童活动场")) { value = value.replaceAll(circle4, "儿童活动场;"); } else { value = value.replaceAll(circle4, ""); }// value = value.replaceAll("[\\n]", ""); //todo 没看懂,让多选,为什么填对钩 dto.setNxwcnszhzsnhdcs2(value); System.out.println("no" + no + ": " + value); } else { Integer duigouIndex = wordContentPart3.indexOf(duigou); String value = getDuigouAfterContent(wordContentPart3, duigouIndex); wordContentPart3 = wordContentPart3.substring(duigouIndex + 1); System.out.println("no" + no + ": " + value); switch (no) { case 25: dto.setXzsfxyythwdpt(value); break; case 26: dto.setXzsfyyaztynrsq(value); break; case 27: dto.setXzsfyyjhfcclshfs(value); break; } } } } private static String getTiankongOrDuiGou(String contentPart3, String startStr, String endStr, String middleStr) { String value = ""; int startIndex = contentPart3.indexOf(startStr) + startStr.length() + 1; int endIndex = contentPart3.lastIndexOf(endStr) == -1 ? contentPart3.length() : contentPart3.lastIndexOf(endStr); int middleIndex = contentPart3.indexOf(middleStr); //填空的数据// String tiankongContent = contentPart3.substring(startIndex,middleIndex); value += getTianKongContent(contentPart3, startIndex, middleIndex); //多选的数据 Map<String, String> duoxuanMap = getDuigouAfterDuoxuanContent(contentPart3, endIndex); value += duoxuanMap.get("value"); return value; } private static String getXkhDurationContent(String wordContentPart3, String startFH, String endFH) { Map<String, String> map = new HashMap<>(5); int start = wordContentPart3.indexOf(startFH); int end = wordContentPart3.indexOf(endFH); String content = wordContentPart3.substring(start, end); int rectIndex = content.indexOf(rect); int duigouIndex = content.indexOf(duigou); String title = content.substring(1, rectIndex - 1); int count = 0; for (int i = 0; i < duigouIndex; i++) { String manyi = charToString(content.charAt(i)); if (rect.equals(manyi)) { count++; } } String isManyi = "没选"; if (count == 1) { isManyi = "满意"; } else if (count == 2) { isManyi = "不满意"; } else { isManyi = "没选"; } String reason = ""; int reasonStartIndex = content.lastIndexOf(t); reason = content.substring(reasonStartIndex + 1); reason = reason.replaceAll("[\\n]", ""); if (StrUtil.isNotBlank(reason)) { isManyi += "(" + reason + ")"; } System.out.println(title + " " + isManyi); return isManyi; } private static void writePart2(String wordContentPart2, WordDTO dto) { System.out.println("部分2"); for (int no = 10; no <= 23; no++) { //填空 if (no == 18) {// 19.您家的确权耕地有 1 亩 Map<String, String> value19Map = get19Value(wordContentPart2); String value19 = value19Map.get("value"); wordContentPart2 = value19Map.get("content") != null ? value19Map.get("content") : wordContentPart2; System.out.println("no" + no + ": " + value19); dto.setNjdqgdy(value19); } else if (no == 19) {// 20.您家转让给其他农户耕种的土地有 1 亩;是否收钱,每亩 300 元。 Map<String, String> value20_1Map = get20_1Value(wordContentPart2); String value20_1 = value20_1Map.get("value"); wordContentPart2 = value20_1Map.get("content") != null ? value20_1Map.get("content") : wordContentPart2; dto.setNjzrgqtnhgzdtdy(value20_1); Map<String, String> value20_2Map = get20_2Value(wordContentPart2); String value20_2 = value20_2Map.get("value"); wordContentPart2 = value20_2Map.get("content") != null ? value20_2Map.get("content") : wordContentPart2; System.out.println("no" + no + ": " + value20_1 + " " + value20_2); dto.setNjzrgqtnhgzdtdsfsq(value20_2); } else if (no == 20) {// 21.您家耕种其他农户转交的土地有 亩;是否收钱,每亩 元。 Map<String, String> value21_1Map = get21_1Value(wordContentPart2); String value21_1 = value21_1Map.get("value"); wordContentPart2 = value21_1Map.get("content") != null ? value21_1Map.get("content") : wordContentPart2; dto.setNjgzqtnhzjdtdy(value21_1); Map<String, String> value21_2Map = get21_2Value(wordContentPart2); String value21_2 = value21_2Map.get("value"); wordContentPart2 = value21_2Map.get("content") != null ? value21_2Map.get("content") : wordContentPart2; dto.setNjgzqtnhzjdtdsfsq(value21_2); System.out.println("no" + no + ": " + value21_1 + " " + value21_2); } else if (no == 23) { //多选 String endStr = "三"; Integer endIndex = wordContentPart2.indexOf(endStr); Map<String, String> value24Map = getDuigouAfterDuoxuanContent(wordContentPart2, endIndex); String value = value24Map.get("value"); wordContentPart2 = value24Map.get("content") != null ? value24Map.get("content") : wordContentPart2; dto.setJcjxdxxhdnr(value); System.out.println("no" + no + ": " + value); } else { Integer duigouIndex = wordContentPart2.indexOf(duigou); String value = getDuigouAfterContent(wordContentPart2, duigouIndex); wordContentPart2 = wordContentPart2.substring(duigouIndex + 1); System.out.println("no" + no + ": " + value); switch (no) { case 10: dto.setXyzzjsnd(value); break; case 11: dto.setXyzztzjly(value); break; case 12: dto.setXyzzdzj(value); break; case 13: dto.setXyzzylmj(value); break; case 14: dto.setXyzzzmj(value); break; case 15: dto.setXyzzfjsl(value); break; case 16: dto.setWsjqk(value); break; case 17: dto.setZzdjzyqnfs(value); break; case 21: dto.setPsczjzzdnhddybxydcsj(value); break; case 22: dto.setNxsmtpjxxsj(value); break; } } } } private static Map<String, String> get21_1Value(String wordContentPart2) { String startStr = "您家耕种其他农户转交的土地有"; String endStr = "亩"; return getTianKongContentByStr(wordContentPart2, startStr, endStr); } private static Map<String, String> get21_2Value(String wordContentPart2) { String startStr = "每亩"; String endStr = "元"; return getTianKongContentByStr(wordContentPart2, startStr, endStr); } private static Map<String, String> get19Value(String wordContentPart2) { String startStr = "您家的确权耕地有"; String endStr = "亩"; return getTianKongContentByStr(wordContentPart2, startStr, endStr); } private static Map<String, String> get20_1Value(String wordContentPart2) { String startStr = "转让给其他农户耕种的土地有"; String endStr = "亩"; return getTianKongContentByStr(wordContentPart2, startStr, endStr); } private static Map<String, String> get20_2Value(String wordContentPart2) { String startStr = "每亩"; String endStr = "元"; return getTianKongContentByStr(wordContentPart2, startStr, endStr); } private static void writePart1(String wordContentPart1, WordDTO dto) { System.out.println("部分1"); for (int no = 1; no <= 9; no++) { Integer duigouIndex = wordContentPart1.indexOf(duigou); //第10项是填空 if (no == 9) { String wcwgljyc = "外出务工累计月次"; String gy = "个月"; String zywgqx = "主要务工去向"; String zycsgz = "主要从事工作"; Integer wcwgljycIndex = wordContentPart1.indexOf(wcwgljyc); Integer gyIndex = wordContentPart1.indexOf(gy); Integer gyStart = wcwgljycIndex + 9; Integer gyEnd = gyIndex; String gyValue = getTianKongContent(wordContentPart1, gyStart, gyEnd); dto.setNjtwcwgljyc(gyValue); System.out.println(wcwgljyc + " " + gyValue);// for (int j = gyStart; j < gyEnd; j++) {// String fh = charToString(wordContentPart1.charAt(j));// if (blank.equals(fh) || xhx.equals(fh) || br.equals(fh)) {// continue;// }// gyValue += fh;// } wordContentPart1 = wordContentPart1.substring(gyEnd + 3); Integer zywgqxIndex = wordContentPart1.indexOf(zywgqx); Integer douhaoIndex = wordContentPart1.indexOf(douhao); Integer zywgqxIndexStart = zywgqxIndex + 7; String zywgqxValue = getTianKongContent(wordContentPart1, zywgqxIndexStart, douhaoIndex); System.out.println(zywgqx + " " + zywgqxValue); dto.setZywgqx(zywgqxValue); wordContentPart1 = wordContentPart1.substring(douhaoIndex + 1); Integer zycsgzIndex = wordContentPart1.indexOf(zycsgz); Integer juhaohaoIndex = wordContentPart1.indexOf(juhao); Integer zycsgzIndexStart = zycsgzIndex + 7; String zycsgzValue = getTianKongContent(wordContentPart1, zycsgzIndexStart, juhaohaoIndex); System.out.println(zycsgz + " " + zycsgzValue); dto.setZycsgz(zycsgzValue);// 外出务工累计月次: 个月// 主要务工去向: ,// 主要从事工作: 。 } else { //其余是打√ String value = getDuigouAfterContent(wordContentPart1, duigouIndex); wordContentPart1 = wordContentPart1.substring(duigouIndex + 1); System.out.println("no" + no + ": " + value); switch (no) { case 1: dto.setAge(value); break; case 2: dto.setSex(value); break; case 3: dto.setEdu(value); break; case 4: dto.setMqzy(value); break; case 5: dto.setNdsrqk(value); break; case 6: dto.setNxydzftj(value); break; case 7: dto.setNrwzajtjjzzdyy(value); break; case 8: dto.setPsnhqk(value); break; } } } } private static String charToString(char c) { String specialFH = String.valueOf(c); return specialFH; } private static String getTianKongContent(String content, Integer start, Integer end) { String value = ""; for (int j = start; j < end; j++) { String fh = charToString(content.charAt(j)); if (blank.equals(fh) || xhx.equals(fh) || br.equals(fh)) { continue; } value += fh; } return value; } /** * 取startStr +1 到 endStr之间的字符串, * * @param content * @param startStr * @param endStr * @return map * key value * vaule 截取到底值 * content 截取后的字符串 */ private static Map<String, String> getTianKongContentByStr(String content, String startStr, String endStr) { Map<String, String> map = new HashMap<>(5); Integer startIndex = content.indexOf(startStr); Integer end = content.indexOf(endStr); Integer start = startIndex + startStr.length() + 1; String value = ""; for (int j = start; j < end; j++) { String fh = charToString(content.charAt(j)); if (blank.equals(fh) || xhx.equals(fh) || br.equals(fh)) { continue; } value += fh; } if (end != null) { content = content.substring(end + 1); map.put("content", content); } map.put("value", value); return map; } /** * 获取对号 到 对号之前的第一个特殊符号 之间的内容 * * @param content * @param duigouIndex * @return */ private static String getDuigouAfterContent(String content, Integer duigouIndex) { String value = ""; Integer end = duigouIndex; while (end != null && end > 0) { String specialFH = charToString(content.charAt(end)); if (breakFH.contains(specialFH)) { //对号的前一位,如果前一位是符号,则截取掉,不是符号则不动 char afterOneIndex = content.charAt(duigouIndex - 1); String afterOneStr = String.valueOf(afterOneIndex); Integer endIndex = duigouIndex; if (fenhao.equals(afterOneStr)) { endIndex = endIndex - 1; } value = content.substring(end + 1, endIndex); break; } end--; } return value; } /** * @param content 内容 * @param endIndex 结束位 * @return */ private static Map<String, String> getDuigouAfterDuoxuanContent(String content, Integer endIndex) { Map<String, String> map = new HashMap<>(5); String value = ""; Integer duigouIndex = content.indexOf(duigou); while (duigouIndex > 0) { value += getDuigouAfterContent(content, duigouIndex) + ";"; content = content.substring(duigouIndex + 1); //结束的减去上一行截取掉的字符数量 endIndex = endIndex - duigouIndex + 1; duigouIndex = content.indexOf(duigou); if (duigouIndex > endIndex && endIndex != -1) { break; } } map.put("content", content); map.put("value", value); return map; }}////填写人年龄//填写人性别//受教育程度//目前职业//您的收入情况//您现有的住房条件如何,近期内是否有修缮房屋或搬离现居住地//您认为阻碍家庭经济增长的原因//平时农活情况//您家庭外出务工累计月次//主要务工去向//主要从事工作////现有住宅建设年代//现有住宅投资金来源//现有住宅的造价//现有住宅院落面积//现有住宅总面积//现有住宅房间数量//卫生间情况//住宅冬季主要取暖方式//您家的确权耕地有(亩)//您家转让给其他农户耕种的土地有(亩)//您家转让给其他农户耕种的土地是否收钱,每亩(元)//您家耕种其他农户转交的土地有(亩)//您家耕种其他农户转交的土地有是否收钱,每亩(元)//平时从自家住宅到农活地点一般需要多长时间//农闲时每天平均休闲时间//经常进行的休闲活动内容////您希望新宅的建筑形式//新宅是否需要阳台或屋顶平台//新宅是否愿意安装太阳能热水器//新宅是否愿意建化粪池处理生活污水//道路状况//停车设施//医疗站//文化活动站//小学幼儿园//商店//体育设施//供电状况//做饭燃料//采暖//供水饮水//雨水排放沟渠//污水处理//垃圾收集//村庄照明//环境卫生条件//您最希望尽快改善的项目按顺序排队//您希望村内设置何种室内活动场所//您希望村内设置何种室内活动场所////如果将来村庄进行集中整治,在本村以外的其他地方统一建新宅,您是否愿意放弃目前的住宅并获得相应的现金补偿//您是否赞成通过股份等形式,由集体统一经营本村土地或其他公公资产//您对本村目前具有长久历史的古树、古建筑、历史事件等情况,了解程度?//其他的意见和建议/*<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.directory.studio</groupId><artifactId>org.apache.commons.codec</artifactId><version>1.8</version></dependency><dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>*/
package io.visi.sister;import com.alibaba.excel.EasyExcel;import com.alibaba.excel.annotation.ExcelProperty;import com.alibaba.excel.annotation.write.style.ColumnWidth;import com.alibaba.excel.annotation.write.style.HeadRowHeight;import lombok.Data;import java.io.File;import java.util.ArrayList;import java.util.List;/** * @Author: keliang * @Date: 2021/10/1 09:12 */@HeadRowHeight(100)@ColumnWidth(15)@Datapublic class WordDTO { @ExcelProperty(value = "文件名字", index = 0) private String docName; @ExcelProperty(value = "填写人年龄", index = 1) private String age; @ExcelProperty(value = "填写人性别", index = 2) private String sex; @ExcelProperty(value = "受教育程度", index = 3) private String edu; @ExcelProperty(value = "目前职业", index = 4) private String mqzy; @ExcelProperty(value = "您的收入情况", index = 5) private String ndsrqk; @ExcelProperty(value = "您现有的住房条件如何,近期内是否有修缮房屋或搬离现居住地", index = 6) private String nxydzftj; @ExcelProperty(value = "您认为阻碍家庭经济增长的原因", index = 7) private String nrwzajtjjzzdyy; @ExcelProperty(value = "平时农活情况", index = 8) private String psnhqk; @ExcelProperty(value = "您家庭外出务工累计月次", index = 9) private String njtwcwgljyc; @ExcelProperty(value = "主要务工去向", index = 10) private String zywgqx; @ExcelProperty(value = "主要从事工作", index = 11) private String zycsgz; @ExcelProperty(value = "现有住宅建设年代", index = 12) private String xyzzjsnd; @ExcelProperty(value = "现有住宅投资金来源", index = 13) private String xyzztzjly; @ExcelProperty(value = "现有住宅的造价", index = 14) private String xyzzdzj; @ExcelProperty(value = "现有住宅院落面积", index = 15) private String xyzzylmj; @ExcelProperty(value = "现有住宅总面积", index = 16) private String xyzzzmj; @ExcelProperty(value = "现有住宅房间数量", index = 17) private String xyzzfjsl; @ExcelProperty(value = "卫生间情况", index = 18) private String wsjqk; @ExcelProperty(value = "住宅冬季主要取暖方式", index = 19) private String zzdjzyqnfs; @ExcelProperty(value = "您家的确权耕地有(亩)", index = 20) private String njdqgdy; @ExcelProperty(value = "您家转让给其他农户耕种的土地有", index = 21) private String njzrgqtnhgzdtdy; @ExcelProperty(value = "您家转让给其他农户耕种的土地是否收钱", index = 22) private String njzrgqtnhgzdtdsfsq; @ExcelProperty(value = "您家耕种其他农户转交的土地有", index = 23) private String njgzqtnhzjdtdy; @ExcelProperty(value = "您家耕种其他农户转交的土地有是否收钱", index = 24) private String njgzqtnhzjdtdsfsq; @ExcelProperty(value = "平时从自家住宅到农活地点一般需要多长时间", index = 25) private String psczjzzdnhddybxydcsj; @ExcelProperty(value = "农闲时每天平均休闲时间", index = 26) private String nxsmtpjxxsj; @ExcelProperty(value = "经常进行的休闲活动内容", index = 27) private String jcjxdxxhdnr; @ExcelProperty(value = "您希望新宅的建筑形式", index = 28) private String nxwxzdjzxs; @ExcelProperty(value = "新宅是否需要阳台或屋顶平台", index = 29) private String xzsfxyythwdpt; @ExcelProperty(value = "新宅是否愿意安装太阳能热水器", index = 30) private String xzsfyyaztynrsq; @ExcelProperty(value = "新宅是否愿意建化粪池处理生活污水", index = 31) private String xzsfyyjhfcclshfs; @ExcelProperty(value = "道路状况", index = 32) private String dlzk; @ExcelProperty(value = "停车设施", index = 33) private String tcss; @ExcelProperty(value = "医疗站", index = 34) private String ylz; @ExcelProperty(value = "文化活动站", index = 35) private String whhdz; @ExcelProperty(value = "小学幼儿园", index = 36) private String xxyey; @ExcelProperty(value = "商店", index = 37) private String sd; @ExcelProperty(value = "体育设施", index = 38) private String tyss; @ExcelProperty(value = "供电状况", index = 39) private String gdzk; @ExcelProperty(value = "做饭燃料", index = 40) private String zfrl; @ExcelProperty(value = "采暖", index = 41) private String cn; @ExcelProperty(value = "供水饮水", index = 42) private String gsys; @ExcelProperty(value = "雨水排放沟渠", index = 43) private String yspfgq; @ExcelProperty(value = "污水处理", index = 44) private String wscl; @ExcelProperty(value = "垃圾收集", index = 45) private String ljsj; @ExcelProperty(value = "村庄照明", index = 46) private String czzm; @ExcelProperty(value = "环境卫生条件", index = 47) private String hjwstj; @ExcelProperty(value = "您最希望尽快改善的项目按顺序排队", index = 48) private String nzxwjkgsdxmasxpd; @ExcelProperty(value = "您希望村内设置何种室内活动场所", index = 49) private String nxwcnszhzsnhdcs1; @ExcelProperty(value = "您希望村内设置何种室内活动场所", index = 50) private String nxwcnszhzsnhdcs2; @ExcelProperty(value = "如果将来村庄进行集中整治,在本村以外的其他地方统一建新宅,您是否愿意放弃目前的住宅并获得相应的现金补偿", index = 51) private String rgjlczjxjzzzzbcywdqtdftyjxznsfyyfqmqdzzbhdxydxjbc; @ExcelProperty(value = "您是否赞成通过股份等形式,由集体统一经营本村土地或其他公公资产", index = 52) private String nsfzzctggfdxsyjttyjybctdhqtggzc; @ExcelProperty(value = "您对本村目前具有长久历史的古树、古建筑、历史事件等情况,了解程度?", index = 53) private String ndbcmqzycjlsdgsgjzlssjdqkljcd; @ExcelProperty(value = "其他的意见和建议", index = 54) private String qtdyjhjy;// @ExcelProperty(value = "", index = 55)// private String edu;// @ExcelProperty(value = "", index = 56)// private String edu;// @ExcelProperty(value = "", index = 57)// private String edu;// @ExcelProperty(value = "", index = 58)// private String edu;// @ExcelProperty(value = "", index = 59)// private String edu; public static void main(String[] args) {// String fileName = "/Users/keliang/test/sister/ok/ok.xlsx";// EasyExcel.write(fileName,WordDTO.class).sheet("数据").doWrite(getData()); String s = "a s"; String[] sp = s.split(" "); int r = sp.length; System.out.println(r);// String fileDir = "/Users/keliang/test/sister/红太村调查/";//// File file = new File(fileDir);// File[] fileList = file.listFiles();// for (int i = 0; i <fileList.length ; i++) {// if (fileList[i].isFile()){// System.out.println(fileList[i].toString());// }// } } private static List<WordDTO> getData() { List<WordDTO> list = new ArrayList<>(); WordDTO wordDTO = new WordDTO(); wordDTO.setAge("11"); wordDTO.setDocName("1.doc"); wordDTO.setEdu("小学"); list.add(wordDTO); WordDTO wordDTO2 = new WordDTO(); wordDTO2.setAge("2"); wordDTO2.setDocName("2.doc"); wordDTO2.setEdu("小学"); list.add(wordDTO2); return list; }} // <dependency> // <groupId>com.alibaba</groupId> // <artifactId>easyexcel</artifactId> // <version>3.0.0-beta3</version> // </dependency>