package com.mysoft.ccms.common.test;
import com.mysoft.util.DateUtil;
import com.mysoft.util.office.SpireWordUtil;
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* 2019.12.23-2020.07.17维护期间的周报月报
* @author caiwei
* @date 2020-8-12 11:29
* @param
* @return
*/
public class ReadExcel {
public static void main(String[] args) throws Exception {
File xlsFile = new File("C:\\Users\\86185\\Desktop\\周报月报分析\\运维情况记录表.xls");
// 工作表
Workbook workbook = WorkbookFactory.create(xlsFile);
// 表个数。
int numberOfSheets = workbook.getNumberOfSheets();
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
// 遍历表。
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = workbook.getSheetAt(i);
// 行数。
int rowNumbers = sheet.getLastRowNum() + 1;
// Excel第一行。
Row temp = sheet.getRow(0);
if (temp == null) {
continue;
}
int cells = temp.getPhysicalNumberOfCells();//获取列数
// 读数据。
for (int row = 1; row < rowNumbers; row++) {
Row r = sheet.getRow(row);
Map<String,Object> map = new HashMap<String,Object>();
map.put("xh",(int)Double.parseDouble(r.getCell(0).toString()));
map.put("lx",r.getCell(1).toString());
map.put("fkdx",r.getCell(2).toString());
map.put("fksj",r.getCell(3).getDateCellValue());
map.put("nrms",r.getCell(4).toString());
map.put("wczt",r.getCell(5).toString());
list.add(map);
/*for (int col = 0; col < cells; col++) {
System.out.print(r.getCell(col).toString()+" ");
}*/
// 换行。
// System.out.println();
}
}
//生成周报模版
String weekWordTemplate = "C:\\Users\\86185\\Desktop\\周报月报分析\\周报模版.docx";
String weekDir= "C:\\Users\\86185\\Desktop\\周报月报分析\\周报";
List<Date> weekList = getMondayList();
bacthWeekWord(list,weekList,weekWordTemplate,weekDir);
//生成月报模版
String monthWordTemplate = "C:\\Users\\86185\\Desktop\\周报月报分析\\月报模版.docx";
String monthDir= "C:\\Users\\86185\\Desktop\\周报月报分析\\月报";
List<Date> monthList = getEveryMonthFirstList();
bacthWeekWord(list,monthList,monthWordTemplate,monthDir);
}
/**
*
* 批word处理
* @author caiwei
* @date 2020-8-12 11:31
* @param [list, dateList, wordTemplate, dirPath]
* @return void
*/
public static void bacthWeekWord(List<Map<String,Object>> list,List<Date> dateList,String wordTemplate,String dirPath){
int j=0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
for (int i = 0; i < dateList.size()-1; i++) {
Date weekStart = dateList.get(i);
Date weekEnd = dateList.get(i+1);
Date rq=dateList.get(dateList.size()-1);
//有四个类型(咨询、维护、优化、修复)
int zx_num=0;int wh_num=0;int yh_num=0;int xf_num=0;
for ( ; j < list.size(); j++) {
Map<String, Object> map = list.get(j);
Date fksj = (Date)map.get("fksj");
String lx = (String)map.get("lx");
if(fksj.compareTo(weekStart)>=0&&fksj.compareTo(weekEnd)<0){
if("咨询".equals(lx)){
zx_num++;
}else if("维护".equals(lx)){
wh_num++;
}else if("优化".equals(lx)){
yh_num++;
}else if("修复".equals(lx)){
xf_num++;
}
if(j==list.size()-1){
if(createWord(rq,zx_num,wh_num,yh_num,xf_num,wordTemplate,dirPath)){
System.out.println(sdf.format(rq)+" word生成成功!");
}else{
System.out.println(sdf.format(rq)+" word生成失败!");
}
}
}else{
if(j!=list.size()-1){
rq=fksj;
}
if(createWord(rq,zx_num,wh_num,yh_num,xf_num,wordTemplate,dirPath)){
System.out.println(sdf.format(rq)+" word生成成功!");
}else{
System.out.println(sdf.format(rq)+" word生成失败!");
}
break;
}
}
}
}
/**
*
* word生成
* @author caiwei
* @date 2020-8-12 11:31
* @param [rq, zx_num, wh_num, yh_num, xf_num, wordTemplate, dirPath]
* @return boolean
*/
public static boolean createWord(Date rq,int zx_num,int wh_num,int yh_num,int xf_num,String wordTemplate,String dirPath){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyy-MM-dd");
List<String> matchList = new ArrayList<>();
matchList.add("«【日期】»");
matchList.add("«【维护工作内容】»");
List<String> newList = new ArrayList<>();
newList.add(sdf.format(rq));
String nr="";
int cnt=0;
if(zx_num!=0){
cnt++;
nr+=cnt+"、咨询:共"+zx_num+"个,已处理"+zx_num+"个,处理中0个。"+(char)11;//(char)11 word中表格内换行 /r换行,不在表格内
}
if(wh_num!=0){
cnt++;
nr+=cnt+"、维护:共"+wh_num+"个,已处理"+wh_num+"个,处理中0个。"+(char)11;
}
if(yh_num!=0){
cnt++;
nr+= cnt+"、优化:共"+yh_num+"个,已处理"+yh_num+"个,处理中0个。"+(char)11;
}
if(xf_num!=0){
cnt++;
nr+= cnt+"、修复:共"+xf_num+"个,已处理"+xf_num+"个,处理中0个。";
}
newList.add(nr);
int i = dirPath.lastIndexOf("\\");
String fileName = sdf2.format(rq)+" "+dirPath.substring(i+1)+".docx";
String outPath = dirPath+"\\"+fileName;
List<String> matchImgList = new ArrayList<>();
List<String> imgPathList = new ArrayList<>();
return SpireWordUtil.wordToReplace(wordTemplate, matchList, newList,"" , matchImgList, imgPathList,outPath);
}
/**
*
* 获取 2019.12.22-2020.07.21之间星期一日期集合
* @author caiwei
* @date 2020-8-11 17:04
* @param []
* @return java.util.List<java.util.Date>
*/
public static List<Date> getMondayList(){
List<Date> list = new ArrayList<Date>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(2019, 11, 22);
int s=0;
for(int i=0;i<365;i++){
cal.add(Calendar.DATE, 1);//DATE=日
if ((cal.get(Calendar.DAY_OF_WEEK)) == 2) {
try {
String format = sdf.format(cal.getTime());
System.out.println(format);
list.add(sdf.parse(format));
s++;
} catch (ParseException e) {
e.printStackTrace();
}
}
if(sdf.format(cal.getTime()).equals("2020-07-21"))break;
}
System.out.println("总共出现过:"+s+"次星期一");
return list;
}
/**
*
* 获取 2019.11.22-2020.08.21之间1号日期集合
* @author caiwei
* @date 2020-8-11 17:32
* @param []
* @return java.util.List<java.util.Date>
*/
public static List<Date> getEveryMonthFirstList(){//每月一号
List<Date> list = new ArrayList<Date>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(2019, 10, 22);
int s=0;
for(int i=0;i<365;i++){
cal.add(Calendar.DATE, 1);//DATE=日
if ((cal.get(Calendar.DAY_OF_MONTH)) == 1) {
try {
String format = sdf.format(cal.getTime());
System.out.println(format);
list.add(sdf.parse(format));
s++;
} catch (Exception e) {
e.printStackTrace();
}
}
if(sdf.format(cal.getTime()).equals("2020-08-21"))break;
}
System.out.println("总共有:"+s+"个月");
return list;
}
}
package com.mysoft.util.office;
import java.awt.*;
import java.util.List;
import com.spire.doc.TextWatermark;
import com.spire.doc.documents.WatermarkLayout;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.documents.TextSelection;
import com.spire.doc.documents.TextWrappingStyle;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;
/**
* 使用Free Spire.Doc for Java 处理word文档
*/
public class SpireWordUtil {
private static Logger logger = Logger.getLogger(SpireWordUtil.class);
/**
* word模版替换生成word
* @param tempLocation word模版路径(全路径)
* matchList集合要与newList集合一致
* @param matchList 文本替换标签
* @param newList 文本内容
* matchImgList数组要与imgPathList数组一致
* @param matchImgList 图片替换标签
* @param imgPathList 图片路径(全路径)
* @param watermark 水印文字
* @param outPath 生成word路径(全路径)
* @return
*/
public static boolean wordToReplace(String tempLocation, List<String> matchList, List<String> newList,
String watermark,List<String> matchImgList, List<String> imgPathList, String outPath){
try {
//1、加载文档
Document doc = new Document(tempLocation);
//2、替换文本
for (int i = 0; i < matchList.size(); i++) {
String replaceStr = newList.get(i);
if(StringUtils.isBlank(newList.get(i))){
replaceStr="";
}
doc.replace(matchList.get(i), replaceStr, false, true);
}
//添加水印
if(StringUtils.isNotBlank(watermark)){
//创建TextWatermark实例
TextWatermark textWatermark = new TextWatermark();
//设置水印文本
textWatermark.setText(watermark);
//自定义文本水印的属性设置(字体、字号、字体颜色和排版格式)
textWatermark.setFontName("Arial");
textWatermark.setFontSize(45f);
textWatermark.setColor(Color.decode("#C4C4C4"));
textWatermark.setLayout(WatermarkLayout.Diagonal);
//将文本水印添加到文档
doc.setWatermark(textWatermark);
}
//3、替换图片
for (int i = 0; i < matchImgList.size(); i++) {
//查找需要替换的字符串
TextSelection[] textSelection = doc.findAllString(matchImgList.get(i),true,false);
int index =0;
//加载图片替换文本字符串
for (Object obj : textSelection) {
TextSelection Selection = (TextSelection)obj;
DocPicture pic = new DocPicture(doc);
pic.loadImage(imgPathList.get(i));
// pic.setHeight(60);
// pic.setWidth(150);
TextRange range = Selection.getAsOneRange();
index = range.getOwnerParagraph().getChildObjects().indexOf(range);
range.getOwnerParagraph().getChildObjects().insert(index,pic);
range.getOwnerParagraph().getChildObjects().remove(range);
}
}
//4、保存文档
doc.saveToFile(outPath,FileFormat.Docx_2013);
doc.dispose();
} catch (Exception e) {
e.printStackTrace();
return Boolean.FALSE;
}
return Boolean.TRUE;
}
/**
* word模版替换生成word
* @param tempLocation word模版路径(全路径)
* matchList集合要与newList集合一致
* @param matchList 文本替换标签
* @param newList 文本内容
* matchImgList数组要与imgPathList数组一致
* @param matchImgList 图片替换标签
* @param imgPathList 图片路径(全路径)
* @param outPath 生成word路径(全路径)
* @return
*/
public static boolean wordToReplace2(String tempLocation, List<String> matchList, List<String> newList,
List<String> matchImgList, List<String> imgPathList, String outPath,TextWrappingStyle wrapStyle){
try {
//1、加载文档
Document doc = new Document(tempLocation);
//2、替换文本
for (int i = 0; i < matchList.size(); i++) {
String replaceStr = newList.get(i);
if(StringUtils.isBlank(newList.get(i))){
replaceStr="";
}
doc.replace(matchList.get(i), replaceStr, false, true);
}
//3、替换图片
for (int i = 0; i < matchImgList.size(); i++) {
//查找需要替换的字符串
TextSelection[] textSelection = doc.findAllString(matchImgList.get(i),true,false);
int index =0;
//加载图片替换文本字符串
for (Object obj : textSelection) {
TextSelection Selection = (TextSelection)obj;
DocPicture pic = new DocPicture(doc);
pic.setTextWrappingStyle(wrapStyle);
pic.loadImage(imgPathList.get(i));
//pic.setHeight(60);
//pic.setWidth(150);
TextRange range = Selection.getAsOneRange();
index = range.getOwnerParagraph().getChildObjects().indexOf(range);
range.getOwnerParagraph().getChildObjects().insert(index,pic);
range.getOwnerParagraph().getChildObjects().remove(range);
}
}
//4、保存文档
doc.saveToFile(outPath,FileFormat.Docx_2013);
doc.dispose();
} catch (Exception e) {
e.printStackTrace();
return Boolean.FALSE;
}
return Boolean.TRUE;
}
public static void main(String[] args) {
//加载文档
/* Document doc = new Document();
doc.loadFromFile("C:\\Users\\86185\\Desktop\\spire\\sdhz.doc");
//获取第三段
Paragraph para = doc.getSections().get(0).getParagraphs().get(2);
//添加图片,并设置图片高、宽
DocPicture picture = para.appendPicture("C:\\Users\\86185\\Desktop\\spire\\ss.png");
picture.setHeight(20);
picture.setWidth(30);
//保存文档
doc.saveToFile("C:\\Users\\86185\\Desktop\\spire\\AddPicture.doc",FileFormat.Docx_2013);
doc.dispose();*/
//加载文档
Document doc = new Document("C:\\Users\\86185\\Desktop\\spire\\sdhz.doc");
//替换文本
doc.replace("«【受送达人】»", "受送达人", false, true);
//查找需要替换的字符串
TextSelection[] textSelection = doc.findAllString("«【受送达人签名】»",true,false);
int index =0;
//加载图片替换文本字符串
for (Object obj : textSelection) {
TextSelection Selection = (TextSelection)obj;
DocPicture pic = new DocPicture(doc);
pic.loadImage("C:\\Users\\86185\\Desktop\\spire\\ss.png");
pic.setHeight(20);
pic.setWidth(30);
TextRange range = Selection.getAsOneRange();
index = range.getOwnerParagraph().getChildObjects().indexOf(range);
range.getOwnerParagraph().getChildObjects().insert(index,pic);
range.getOwnerParagraph().getChildObjects().remove(range);
}
//保存文档
doc.saveToFile("C:\\Users\\86185\\Desktop\\spire\\AddPicture.doc",FileFormat.Docx_2013);
doc.dispose();
//String str = "mrBbAcIR0p6xt/k2R20b15191a115dfe58be2fd2bc5b54113xkhjanJsmTK/CFdQrRORpMGPapeGMTjE5bA18Tdf1MfhvgtyggiHL0nrwQoRhS96aWmHuxeLTBb4vLNQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ1588SEDBNgnXnzxIQME2CdefPEhAwTYJ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";
// String dzqm = new DESUtilMiniApp().getBase64(str, "caiwei123");
/*String dzqm = "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";
System.out.println("电子签名:"+dzqm);
try {
byte[] buffer = new BASE64Decoder().decodeBuffer(dzqm);
FileOutputStream out = new FileOutputStream("C:\\Users\\86185\\Desktop\\spire\\ss.png");
out.write(buffer);
out.close();
} catch (IOException e) {
e.printStackTrace();
}*/
}
}
链接:https://pan.baidu.com/s/1TbiCrD6aJ4Ijy6ZUP7nHeA
提取码:3009