设为首页 加入收藏

TOP

PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】(二)
2019-08-30 23:49:35 】 浏览:59
Tags:PoiDemo Android 表单 数据 生成 Word 文档 方案 之二 基于 Poi4.0.0
ementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //poi implementation project(':poilib') }

3、在poilib这个module中添加PoiUtils.java文件

4、将模板文件复制到项目的assets目录下

三、使用方法

1、根据doc模板生成doc文件的关键代码

MainActivity.java

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(); }

            }
        });
    }
}

 

 PoiUtils.java

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文件,主要用于直接读取
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇android多渠道打包 下一篇Android6.0 源码修改之 Contacts..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目