Java POI Word 写文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java POI Word 写文档相关的知识,希望对你有一定的参考价值。

 

package apache.poi;

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

 

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

 


public class ExportDocTest {

public static void main(String[] args) {
String destFile="D:\\\\11.doc";
//#####################根据自定义内容导出Word文档#################################################
StringBuffer fileCon=new StringBuffer();
fileCon.append(" 张大炮 男 317258963215223\\n" +
"2011 09 2013 07 3\\n" +
" 二炮研究 成人\\n" +
"2013000001 2013 07 08");
fileCon.append("\\n\\r\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n");

new ExportDocTest().exportDoc(destFile, fileCon.toString());

//##################根据Word模板导出单个Word文档###################################################
Map<String, String> map=new HashMap<String, String>();

map.put("name", "Zues");
map.put("sex", "男");
map.put("idCard", "200010");
map.put("year1", "2000");
map.put("month1", "07");
map.put("year2", "2008");
map.put("month2", "07");
map.put("gap", "2");
map.put("zhuanye", "计算机科学与技术");
map.put("type", "研究生");
map.put("bianhao", "2011020301");
map.put("nowy", "2011");
map.put("nowm", "01");
map.put("nowd", "20220301");
//注意biyezheng_moban.doc文档位置,此例中为应用根目录
HWPFDocument document=new ExportDocTest().replaceDoc("biyezheng_moban.doc", map);
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
try {
document.write(ostream);
//输出word文件
OutputStream outs=new FileOutputStream(destFile);
outs.write(ostream.toByteArray());
outs.close();
} catch (IOException e) {
e.printStackTrace();
}

}


/**
*
* @param destFile
* @param fileCon
*/
public void exportDoc(String destFile,String fileCon){
try {
//doc content
ByteArrayInputStream bais = new ByteArrayInputStream(fileCon.getBytes());
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
directory.createDocument("WordDocument", bais);
FileOutputStream ostream = new FileOutputStream(destFile);
fs.writeFilesystem(ostream);
bais.close();
ostream.close();

} catch (IOException e) {
e.printStackTrace();
}
}


/**
* 读取word模板并替换变量
* @param srcPath
* @param map
* @return
*/
public HWPFDocument replaceDoc(String srcPath, Map<String, String> map) {
try {
// 读取word模板
FileInputStream fis = new FileInputStream(new File(srcPath));
HWPFDocument doc = new HWPFDocument(fis);
// 读取word文本内容
Range bodyRange = doc.getRange();
// 替换文本内容
for (Map.Entry<String, String> entry : map.entrySet()) {
bodyRange.replaceText("${" + entry.getKey() + "}", entry
.getValue());
}
return doc;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

 

/**
* 操作表格
*/

public void OperateTable(){  

try {
 
            POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
                    "D:\\\\XBRL.doc"));
            HWPFDocument doc = new HWPFDocument(fs);
 
            Range range = doc.getOverallRange();
            TableIterator ti = new TableIterator(range);
//            Table table = null;
 
            while (ti.hasNext()) {
                System.out.println("Getting table!");
                Table table = (Table)ti.next();
                System.out.println("Number of rows: " + table.numRows());
 
                for (int a = 0; a < table.numRows(); a++) {
                    TableRow row = table.getRow(a);
                    System.out.println("\\tTable row number: " + a);
 
                    for (int b = 0; b < row.numCells(); b++) {
                        System.out.println("\\t\\tTable cell number: " + b);
                        TableCell tablecell = row.getCell(b);
 
                        for (int c = 0; c < tablecell.numParagraphs(); c++) {
                            Paragraph tablepara = tablecell.getParagraph(c);
 
                            for (int d = 0; d < tablepara.numCharacterRuns(); d++) {
                                CharacterRun run = tablepara.getCharacterRun(d);
                                System.out.println("\\t\\tText: \\"" + run.text()
                                        + "\\"");
                            }
                        }
                    }
                }
                System.out.println("\\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

}

 

}

 

以上是关于Java POI Word 写文档的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JAVA,POI读写word文档

Java POI 如何操作word 格式

POI 生成 word 文档 简单版(包括文字表格图片字体样式设置等)

JAVA使用POI读写word 乱码

java中poi如何将word文档转换成pdf

java用poi生成word文档,并且给word文档中的中文设置字体,我测试只能改英文字体?