package com.why.project.poidemo;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.why.project.poilib.PoiUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
//利用doc模板生成doc文件
findViewById(R.id.btn_poi_doc).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try { InputStream templetDocStream = getAssets().open("请假单模板2.doc"); String targetDocPath = mContext.getExternalFilesDir("poi").getPath() + File.separator + "请假单2.doc";//这个目录,不需要申请存储权限
Map<String, String> dataMap = new HashMap<String, String>(); dataMap.put("$writeDate$", "2018年10月14日"); dataMap.put("$name$", "HaiyuKing"); dataMap.put("$dept$", "移动开发组"); dataMap.put("$leaveType$", "?倒休 √年假 ?事假 ?病假 ?婚假 ?产假 ?其他"); dataMap.put("$leaveReason$", "倒休一天。"); dataMap.put("$leaveStartDate$", "2018年10月14日上午"); dataMap.put("$leaveEndDate$", "2018年10月14日下午"); dataMap.put("$leaveDay$", "1"); dataMap.put("$leaveLeader$", "同意"); dataMap.put("$leaveDeptLeaderImg$", "同意!"); PoiUtils.writeToDoc(templetDocStream,targetDocPath,dataMap); } catch (IOException e) { e.printStackTrace(); }
}
});
}
}
package com.why.project.poidemo.poi;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
/**
* Created by HaiyuKing
* Used poi工具类封装
* 在使用POI写word doc文件的时候我们必须要先有一个doc文件才行,因为我们在写doc文件的时候是通过HWPFDocument来写的,
* 而HWPFDocument是要依附于一个doc文件的。所以通常的做法是我们先在硬盘上准备好一个内容空白的doc文件,然后建立一个基于该空白文件的HWPFDocument。
* 之后我们就可以往HWPFDocument里面新增内容了,然后再把它写入到另外一个doc文件中,这样就相当于我们使用POI生成了word doc文件。
*/
public class PoiUtils {
/**
* 生成一个doc文件
* @param templetDocPath 模板文件的完整路径
* @param targetDocPath 生成的目标文件的完整路径
* @param dataMap 替换的数据*/
public static void writeToDoc(String templetDocPath, String targetDocPath, Map<String,String> dataMap){
try
{
//得到模板doc文件的HWPFDocument对象
InputStream in = new FileInputStream(templetDocPath);
writeToDoc(in,targetDocPath,dataMap);
}
catch(IOException e)
{
e.printStackTrace();
}
}
/**
* 生成一个doc文件,主要用于直接读取