一、前期准备
1、编写Word模板
2、下载poi相关jar包
将jar包导入到项目lib中
网上编写的生成word 文档 和 预览基本是一样的,难点在于正确的这两个库的寻找。word文档的生成基本不会有问题。下载地址:用于Android生成Word的Poi 包https://download.csdn.net/download/Hearbeat/87380805
二、代码实现
private static final String newPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc/test.doc";
private static final String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/doc";
public void Save() {
try {
//从assets读取Word模板
InputStream is = getAssets().open("调查报告模板.doc");/当前模板放到项目工程中assets目录
//创建生成的文件
File old = new File(newPath);
File newFile=null;
if(old.exists()){
old.delete();
newFile=new File(newPath);
}else{
newFile=new File(newPath);
}
Map<String, String> map = new HashMap<String, String>();
map.put("$Name$", "李四");
writeDoc(is, newFile, map);
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Save: "+e.toString() );
}
}
/**
* newFile 生成文件
* map 要填充的数据
*/
public void writeDoc(InputStream in, File newFile, Map<String, String> map) {
try {
File file = new File(filePath);
if (!file.exists()) {
file.mkdirs();
}
HWPFDocument hdt = new HWPFDocument(in);
Range range = hdt.getRange();
// 替换文本内容
Log.e(TAG, "writeDoc: "+file.getAbsolutePath() );
for (Map.Entry<String, String> entry : map.entrySet()) {
range.replaceText(entry.getKey(), entry.getValue());
}
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
FileOutputStream out = new FileOutputStream(newFile, true);
hdt.write(ostream);
// 输出字节流
out.write(ostream.toByteArray());
out.close();
ostream.close();
Log.e(TAG, "writeDoc: successs " );
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "writeDoc: 1"+e.toString());
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "writeDoc: 2"+e.toString());
}
}
自此Word可以生成并能够导出。
三、效果展示