`
零点5度
  • 浏览: 19109 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

apache.poi包简单操作word文档

    博客分类:
  • java
 
阅读更多
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.FieldsDocumentPart;
import org.apache.poi.hwpf.usermodel.Field;
import org.apache.poi.hwpf.usermodel.Fields;
import org.apache.poi.hwpf.usermodel.Range;

/**
 * word文档操作工具
* Created by lichunlong on 2015/5/6 0006.
 */
public class WordUtil {
    /**
     * 修改word并另保存在本地
* @param map 需要修改的键值对
*/
public static void writeAndSave(Map<String, String> map) {
        try {
            //读取word模板
String fileDir = new File("C:\\Users\\Administrator\\Desktop\\file").getCanonicalPath();
            FileInputStream inputStream = new FileInputStream(new File(fileDir+"\\template.doc"));
            HWPFDocument doc = new HWPFDocument(inputStream);
//            Fields fields = doc.getFields();
//            Iterator<Field> ite = fields.getFields(FieldsDocumentPart.MAIN).iterator();
//            while(ite.hasNext()){
//                System.out.println(ite.next().getType());
//            }
            //读取word文本内容
Range range = doc.getRange();
//       System.out.println(range.text());
            //替换文本内容
for (Map.Entry<String,String> entry : map.entrySet()) {
                range.replaceText(entry.getKey(), entry.getValue());
            }

            //输出字节流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            String fileName = ""+System.currentTimeMillis();
            fileName += ".doc";
            FileOutputStream out = new FileOutputStream(fileDir+"\\"+fileName,true);
            doc.write(outputStream);
            out.write(outputStream.toByteArray());
            out.close();
            outputStream.close();

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

    /**
     * 修改word并提供下载
* @param request
* @param response
* @param map 需要修改的键值对
* @throws ServletException
     * @throws IOException
     */
public static void writeAndPost(HttpServletRequest request, HttpServletResponse response, Map<String, String> map) throws ServletException, IOException{
        try {

            //读取word模板文件
String fileDir = new File("C:\\Users\\Administrator\\Desktop\\file").getCanonicalPath();
            FileInputStream inputStream = new FileInputStream(new File(fileDir+"\\template.doc"));
            HWPFDocument doc = new HWPFDocument(inputStream);

            //替换读取到的word模板内容的指定字段
Range range = doc.getRange();
            for (Map.Entry<String,String> entry : map.entrySet()) {
                range.replaceText(entry.getKey(), entry.getValue());
            }

            //输出word内容文件流,提供下载
response.reset();
            response.setContentType("application/x-msdownload");
            response.addHeader("Content-Disposition", "attachment; filename=\"test.doc\"");
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            ServletOutputStream servletOutputStream = response.getOutputStream();
            doc.write(outputStream);
            servletOutputStream.write(outputStream.toByteArray());
            servletOutputStream.flush();
            servletOutputStream.close();

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

        }
    }
}

动态设置文件名,解决中文乱码问题:
response.setCharacterEncoding("utf-8");
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename="+ new String(fileName.getBytes("utf-8"), "ISO8859-1"));
分享到:
评论

相关推荐

    三菱PLC例程源码SFC编写伺服刀程序

    三菱PLC例程源码SFC编写伺服刀程序本资源系百度网盘分享地址

    tensorflow_serving_api-1.13.0-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    三菱PLC例程源码层绕机

    三菱PLC例程源码层绕机本资源系百度网盘分享地址

    高级网络人才培训专家-X00070004 第31章 配置帧中继

    高级网络人才培训专家_X00070004 第31章 配置帧中继

    毕业论文知识图谱构建平台的python后端。模型相关在这个模块完成,深度学习基于pytorch.zip

    人工智能毕业设计&课程设计

    tensorflow_serving_api-2.5.4-py2.py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    (完整word版)单片机_温度控制系统_外文翻译_外文文献_英文文献_中英翻译.doc

    (完整word版)单片机_温度控制系统_外文翻译_外文文献_英文文献_中英翻译.doc

    基于Html的电商数据库数据可视化大屏设计源码

    这是一个基于Html的电商数据库数据可视化大屏设计,使用JavaScript、CSS和HTML语言开发,包含20个文件。主要文件类型包括12个PNG图片文件、3个JavaScript文件、2个CSS文件、1个LICENSE文件和1个Markdown文档。该项目为电商行业提供了一个数据可视化的大屏展示平台,能够实时展示电商数据库中的关键数据,帮助用户更好地理解和分析数据,为决策提供支持。

    2024手游品牌蛋友线下碰碰会执行手册ss.pptx

    2024手游品牌蛋友线下碰碰会执行手册ss.pptx

    基于深度学习的恶意代码检测.zip

    人工智能毕业设计&课程设计

    python冒泡排序(Bubble Sort).docx

    python冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以下是一个用Python实现的冒泡排序的例子: ```python def bubble_sort(lst): n = len(lst) for i in range(n): # 创建一个标记,用于优化 swapped = False # 遍历所有未排序的元素 for j in range(0, n-i-1): # 交换相邻元素,如果它们的顺序错误 if lst[j] > lst[j+1] : lst[j], lst[j+1] = lst[j+1], lst[j] swapped = True # 如果在内循环中没有交换

    企业九宫格人才盘点管理手册PPT模板ss.pptx

    企业九宫格人才盘点管理手册PPT模板ss.pptx

    基于tensorflow的图像风格转换,代码简介效果好.zip

    人工智能-深度学习-tensorflow

    tensorflow_onmttok_ops-0.2.0-cp37-cp37m-manylinux2014_x86_64.whl

    算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    traditional Chinese medicine and computational.pdf

    traditional Chinese medicine and computational

    tensorflow_privacy-0.8.1-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    三菱PLC例程源码Q系列带动伺服程序

    三菱PLC例程源码Q系列带动伺服程序本资源系百度网盘分享地址

    pvk2pfx 32位 Pvk2Pfx (Pvk2Pfx.exe) 是一种命令行工具,可将 .spc、.cer 和 .pvk 文

    pvk2pfx -pvk ServerPublicKey.pvk -spc ServerPublicKey.cer -pfx ServerPrivateKey.pfx -pi password 放置到c:\Windows\System32下面 https://blog.51cto.com/u_13864558/8993257 -pvk -spc 参数 请使用绝对路径

    基于ssm+web的微博网站.zip

    基于ssm+web的微博网站.zip

    基于Python的Struts2全漏洞扫描利用工具设计源码

    这是一个基于Python语言开发的Struts2全漏洞扫描利用工具,包含21个文件。主要文件类型包括15个WAR文件、1个gitignore文件、1个LICENSE文件、1个Markdown文档、1个Python源文件、1个TXT文件和1个JSP文件。该项目旨在帮助安全研究人员和开发人员检测和利用Struts2漏洞,提高网络安全防护能力。

Global site tag (gtag.js) - Google Analytics