*重点:本文章只支持DOC文档,不支持DOCX*
需求:由于验收需要提交试运行记录表(周报),有2套文档需要提交,从15年10月份开始至今,大概200多份文档,每份文档预计需要花1分钟,如果手工,那么大概需要4-5个小时,而且容易错误,还好我是程序员。
package com.hy.servicedetection.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.FieldsDocumentPart;
import org.apache.poi.hwpf.usermodel.Field;
import org.apache.poi.hwpf.usermodel.Fields;
import org.apache.poi.hwpf.usermodel.Range;
/**
*
*功能说明:word读取写入工具类
*
*创建时间:2017-12-26 下午4:56:54
*
*修改人 修改时间 修改描述
*
*
*
*/
public class WordUtil {
/**
* 文档对象
*/
private static HWPFDocument hdt = null;
public static void main(String[] args)
{
WordUtil.doTest();
}
public static void doTest(){
String writeUrl = "D:\\001\\测试文档(?).doc";
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat strFormat = new SimpleDateFormat("yyyy年MM月dd日");
SimpleDateFormat mlFormat = new SimpleDateFormat("yyyy.MM.dd");
Date currDate = dateFormat.parse("2015-09-28");
String startDate = null;
String endDate = null;
String writeDate = null;
String mlStartDate = null;
String mlEndDate = null;
while(true){
int week = DateUtil.getDayWeek(currDate);
if(week == 1){
startDate = strFormat.format(currDate);
mlStartDate = mlFormat.format(currDate);
}
if(week == 0){
endDate = strFormat.format(currDate);
writeDate = strFormat.format(DateUtil.nextDay(currDate));
mlEndDate = mlFormat.format(currDate);
Map<String, String> map = new HashMap<String, String>();
map.put("params1", startDate);
map.put("params2", endDate);
map.put("params3", writeDate);
Range range = readWord("D:\\001\\测试文档(2015.10).doc");
//修改文件名及文件内容s
writeWord(writeUrl.replace("?", mlStartDate+"~"+mlEndDate), range,map);
}
if(currDate.getTime() > new Date().getTime()){
break;
}
currDate = DateUtil.nextDay(currDate);
}
} catch (Exception e) {
}
}
/**
*
*功能说明:读取word文档内容
*输入参数:地址string
*输出参数:文本对象
*创建时间:2017-12-26 下午5:01:09
*
*/
public static Range readWord(String filePath){
FileInputStream in = null;
try
{
in = new FileInputStream(new File(filePath));
hdt = new HWPFDocument(in);
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
Fields fields = hdt.getFields();
Iterator it = fields.getFields(FieldsDocumentPart.MAIN)
.iterator();
while (it.hasNext())
{
System.out.println(it.next().getType());
}
return hdt.getRange();
}
/**
*
*功能说明:将修改后的内容写入word文档
*输入参数:文档地址fileName(可不存在),文本对象,替换对象(可为文本的具体内容)
*输出参数:无
*创建时间:2017-12-26 下午5:02:46
*
*/
public static void writeWord(String fileName, Range range, Map<String, String> map){
// 替换文本内容
for (Map.Entry<String, String> entry : map.entrySet())
{
range.replaceText(entry.getKey(), entry.getValue());
}
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
FileOutputStream out = null;
try
{
//创建或覆盖文件
out = new FileOutputStream(fileName, true);
//写入内容
hdt.write(ostream);
out.write(ostream.toByteArray());
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally{
try
{
out.close();
ostream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
使用到的时间工具类如下:
package com.hy.servicedetection.util;
import java.util.Date;
/**
*
*功能说明:时间工具类
*
*创建人:
*
*创建时间:2017-12-29 下午8:32:12
*
*修改人 修改时间 修改描述
*
*
*
*/
@SuppressWarnings("deprecation")
public final class DateUtil {
/**
*
*功能说明:时间加一天
*创建时间:2017-12-29 下午8:33:36
*
*/
public static java.util.Date nextDay(java.util.Date date) {
java.util.Calendar c1 = new java.util.GregorianCalendar();
c1.setTime(date);
c1.setTimeInMillis(c1.getTimeInMillis() + 24 * 60 * 60 * 1000);
return c1.getTime();
}
/**
*
*功能说明:查询今天是星期几 (0,1,2,3,4,5,6)对应(日、一、二、三、四、五、六)
*创建时间:2017-12-29 下午8:34:26
*
*/
public static int getDayWeek(Date date){
return date.getDay();
}
}
转载请标明出处: http://www.yueshuge.cn/?p=157