`

poi操作word文档

    博客分类:
  • poi
 
阅读更多
package com.zte.xh.fund.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Fields;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;

/**
 * 用来操作word的方法类
 * 
 * @author Jay_Lee
 *
 */
public class WordUtil {
	private static String[] CHINESE_MONEY = new String[] { "零", "壹", "貮", "叁",
			"肆", "伍", "陆", "柒", "捌", "玖", "拾", "佰", "仟", "萬" };

	/**
	 * 导入poi-3.12.jar和poi-scratchpad.jar 实现对word读取和修改操作
	 * 
	 * @param filePath
	 *            word模板路径和名称
	 * @param map
	 *            待填充的数据,从数据库读取/自己填写
	 * @throws IOException
	 */
	public static void readwriteWord(String filePath, Map<String, String> map,
			String toFile, String fileName) throws IOException {
		// 首先看目录存在否,不存在先创建目录
		File temp = new File(filePath);
		if (!temp.exists()) {
			temp.mkdirs();
		}
		File temp1 = new File(toFile);
		if (!temp1.exists()) {
			temp1.mkdirs();
		}
		// 读取world文档
		FileInputStream fis = new FileInputStream(new File(filePath));
		// 读取world文档
		HWPFDocument hdt = new HWPFDocument(fis);
		// 读取word文本内容
		Range range = hdt.getRange();
		// 替换文本内容
		for (Map.Entry<String, String> entry : map.entrySet()) {
			range.replaceText(entry.getKey(), entry.getValue());
		}

		ByteArrayOutputStream ostream = new ByteArrayOutputStream();
		FileOutputStream out = null;
		out = new FileOutputStream(toFile + File.separator + fileName, true);
		hdt.write(ostream);
		out.write(ostream.toByteArray());
		out.close();
	}

	// 根据金额的小写来查询其中的大写
	public static String transformMoney(String money) {
		String resultMoney = "";
		int length = money.length();
		// 如果是一位,直接返回大写数字
		if (length == 1) {
			String index = String.valueOf(money.charAt(0));
			if (index.equals("0")) {
				return "";
			} else {
				resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
						+ CHINESE_MONEY[CHINESE_MONEY.length - 1];
				return resultMoney;
			}
		}
		// 如果是2位,先判断第一位,再迭代上一个方法
		if (length == 2) {
			String index = String.valueOf(money.charAt(0));
			if (index.equals("0")) {
				resultMoney = transformMoney(money.substring(
						money.length() - 1, money.length()));
				return resultMoney;
			} else {
				String last = money.substring(money.length() - 1,
						money.length());
				if (last.equals("0")) {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 4]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 1];
					return resultMoney;
				} else {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 4]
							+ transformMoney(money.substring(
									money.length() - 1, money.length()));
					return resultMoney;
				}
			}
		}
		// 三位,以此内推,记得三位可能中间有0
		if (length == 3) {
			String index = String.valueOf(money.charAt(0));
			if (index.equals("0")) {
				resultMoney = transformMoney(money.substring(
						money.length() - 2, money.length()));
				return resultMoney;
			} else {
				String indexMid = money.substring(1, 2);
				String indexEnd = money.substring(2, 3);
				if (indexMid.equals("0") && indexEnd.equals("0")) {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 3]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 1];
					return resultMoney;
				} else if (indexMid.equals("0")) {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 3]
							+ CHINESE_MONEY[0]
							+ transformMoney(money.substring(
									money.length() - 1, money.length()));
					return resultMoney;
				} else {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 3]
							+ transformMoney(money.substring(
									money.length() - 2, money.length()));
					return resultMoney;
				}
			}
		}
		// 四位数
		if (length == 4) {
			String index = String.valueOf(money.charAt(0));
			if (index.equals("0")) {
				resultMoney = transformMoney(money.substring(
						money.length() - 3, money.length()));
			} else {
				String indexTwo = money.substring(1, 2);
				String indexThree = money.substring(2, 3);
				String indexEnd = money.substring(3, 4);
				if (indexTwo.equals("0") && indexThree.equals("0")
						&& indexEnd.equals("0")) {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 2]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 1];
				} else if (indexTwo.equals("0")) {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 2]
							+ CHINESE_MONEY[0]
							+ transformMoney(money.substring(
									money.length() - 2, money.length()));
				} else {
					resultMoney = CHINESE_MONEY[Integer.valueOf(index)]
							+ CHINESE_MONEY[CHINESE_MONEY.length - 2]
							+ transformMoney(money.substring(
									money.length() - 3, money.length()));
				}
			}
			return resultMoney;
		}
		return null;
	}

	public static List<String> getWordText(String path) throws Exception {
		// 读取world文档
		FileInputStream fis = new FileInputStream(new File(path));
		// 读取world文档
		HWPFDocument hdt = new HWPFDocument(fis);
		List<String> listText = new ArrayList<String>();	
		// 读取word文本内容
		Range range = hdt.getRange();
		//文档段落数目  
        int paragraphCount=range.numParagraphs();  
        //遍历段落读取数据
        for(int i=0;i<paragraphCount;i++)  
        {  
            Paragraph pph=range.getParagraph(i);  
           /* String temp = pph.text();
            temp = replaceString(temp);*/
            // 这里替换掉word的格式符号以方便页面展示
            listText.add( pph.text());  
        }  
        return listText;
	}
	
	public static String replaceString(String str){
		str = str.replaceAll("", "&nbsp;");
	/*	str = str.replace("\r", "<br/>");*/
		return str;
	}
	
	public static void main(String[] args) throws Exception {
		// 设置数据
		/*
		 * Map<String, String> map = new HashMap<String, String>();
		 * map.put("name", "demo1"); map.put("time", new
		 * SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		 * readwriteWord("E:\\testDemo.doc", map, "E:\\");
		 */
		getWordText("F:" + File.separator + "model1.doc");
		// System.out.println(transformMoney("0001"));
	}
	
	
}
  • 大小: 5.8 KB
分享到:
评论

相关推荐

    java使用POI操作Word文档,写入文字与图片

    Java中的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,包括Word文档(.doc和.docx)。在这个场景下,我们将深入探讨如何使用POI库来操作Word文档,特别是写入文字和插入图片。 ...

    android中poi生成word文档和excel文档

    在Android开发中,Apache POI 是一个非常实用的库,它允许程序员创建、修改和显示Microsoft Office格式的文件,如Word文档(.doc)和Excel工作簿(.xlsx或.xls)。这个工具对于需要在Android应用中处理这些文档的...

    java Apache poi 对word doc文件进行读写操作

    在实际应用中,Apache POI 的功能不仅限于简单的读写操作,还支持复杂的格式转换、样式调整和模板填充等功能,是 Java 开发者处理 Word 文件的强大工具。然而,需要注意的是,由于 `.doc` 文件格式的复杂性,处理...

    POI读取 word 2003 和 word 2007 的例子

    word 2007 示例文件 值得注意的是 POI 在读取 word 文件的时候不会读取 word 文件中的图片信息 还有就是对于 2007 版的 word docx 如果 word 文件中有表格 所有表格中的数据都会在读取出来的字符串的最后 "&gt;这是一个...

    poi操作WORD文档所需jar包

    本篇文章将详细介绍如何使用Apache POI来操作Word文档,以及在项目中如何引入所需的jar包。 首先,Apache POI提供了一个名为`HWPF`(Horrible Word Processor Format)的API,专门用于处理旧版的Word文档(.doc),...

    java poi操作word模版文件生成表单和修改

    要操作Word文档,我们需要导入`org.apache.poi.xwpf.usermodel`包中的类,如`XWPFDocument`、`XWPFParagraph`、`XWPFTable`等。下面是一些基本步骤: 1. **打开Word文档**: 使用`XWPFDocument`的构造函数,传入...

    POI操作Word中插入文本和图片

    Apache POI提供了一套完整的API,使得在Java中操作Word文档变得简单。无论是插入文本还是图片,都可以灵活控制内容和样式。利用这些功能,你可以构建出复杂的动态报告模板,满足各种业务需求。在实际开发中,还可以...

    android使用POI操作word docx文档

    在Android平台上,使用Apache POI库来操作Microsoft Office的Word(docx)文档是一项常见的需求。Apache POI是一个开源项目,主要设计用于处理Microsoft的文件格式,如.docx、.xlsx和.pptx等。本篇文章将深入探讨...

    poi操作word模板

    在"poi操作word模板"的场景中,我们主要关注如何使用Apache POI库来自动化填充Word文档模板,这在批量生成报告、合同或其他需要标准化格式但需个性化数据的文档时非常有用。 首先,理解Apache POI的基本概念是必要...

    poi操作word实例

    本实例主要关注的是使用POI操作Word文档,具体分为HWPFDocument和XWPFDocument两种方式。 1. HWPFDocument:这是Apache POI处理旧版Word文档(.doc)的方式。HWPFDocument类是POI库中用于读写老式Microsoft Word 97...

    Apache中POI操作word所需的相关jar包

    9. **异常处理**:在进行文件操作时,务必捕获并处理可能出现的IOException,确保程序的健壮性。 总之,Apache POI中的XWPFDocument类提供了全面的功能,可以满足大部分对Word文档的操作需求。通过熟练掌握其API,...

    poi操作word书签,兼容2003和2007

    下载后,运行 可以 Test1中的main方法,注意里面的word模版地址要修改下。...test1.java主要是针对word的书签操作 MSWordTool.java主要是针对word的列表书签的操作,相对来说比较复杂,具体看个人需求。

    poi解析word文档 及 试卷数学公式导入wmf图片转成png图片

    标题中的“poi解析word文档”指的是使用Apache POI库来处理Microsoft Word(.doc或.docx)文件。Apache POI是Java中一个流行的库,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Word、Excel和...

    利用Java Apache POI 生成Word文档示例代码

    在生成Word文档时,Apache POI提供了XWPFDocument类,用于创建和操作Word文档。通过XWPFDocument对象,可以创建paragraphs、runs、tables、images等元素,并设置其样式、字体、颜色、边框等属性。 在示例代码中,...

    java 利用POI读取Word文件中的内容

    在提供的压缩包文件中,StreamDemo_17.java可能是实现上述操作的一个示例代码,而Java.jpg可能是一个示例图片,用于展示如何处理Word文档中的图片。通过学习和理解这个例子,你可以更好地掌握使用Apache POI读取Word...

    Java使用POI导出Word文档

    Java使用Apache POI库导出Word文档是一种常见的技术实践,特别是在企业级应用中,用于生成报告、合同或者自定义的数据输出。Apache POI是Apache软件基金会的一个开源项目,它提供了处理Microsoft Office格式(如Word...

    POI读取word文档的文字内容和图片内容

    总之,Apache POI为Java开发者提供了一个强大的工具,使他们能够在没有Microsoft Office的情况下,方便地读取和操作Word文档的内容。通过理解Word文档的内部结构和POI库的API,你可以构建出高效的文件处理程序。

    利用poi+word模版书签,向word中插入数据

    XWPF(XML Word Processing)是POI项目的一部分,专门用于处理Open XML Format(OOXML)的Word文档,即.docx文件。OOXML是一种基于XML的文件格式,可以方便地进行程序化操作。 接下来,我们要介绍Word模板和书签的...

Global site tag (gtag.js) - Google Analytics