Apache POI 操作 Excel 和 Word

本贴最后更新于 2627 天前,其中的信息可能已经沧海桑田

Apache POI 官网下载:
http://poi.apache.org/download.html
下面需要用到的 poi jar 包百度网盘分享:
https://pan.baidu.com/s/1i4DDcpB

具体代码

java 使用 poi 读取 Word:
这里我们把在 word 中读取到的图片保存到一个专门的地方,内容用 html 的 img 标签代替

	/**
	 * 读取doc文件
	 * docPath: doc文件路径
	 * descImageFolder: doc文件中的图片存放位置文件夹
	 */
	public static StringBuilder readDoc(String docPath,String descImageFolder) throws Exception{
		InputStream is=new FileInputStream(new File(docPath));
		//poi读取doc
		HWPFDocument doc=new HWPFDocument(is);
		//存储doc内容
		StringBuilder sb=new StringBuilder();
		//获取doc图片表格对象
		PicturesTable pt=doc.getPicturesTable();
		Range docr=doc.getRange();
		CharacterRun run=null;
		for (int i = 0; i < docr.numCharacterRuns(); i++) {
			run=docr.getCharacterRun(i);
			//判断是不是图片
			if(pt.hasPicture(run)){
				//图片对象
				Picture pic=pt.extractPicture(run, true);
				//图片路径,文件以系统时间命名
				String imgSrc=descImageFolder+"/"+System.currentTimeMillis()+"."+pic.suggestFullFileName();
				sb.append("<img src='").append(imgSrc).append("' />");
				//输出图片
				this.writeFile(imgSrc,pic.getContent());
			}else{
				//在该范围内遍历字符,判断是否有换行符
				for(int j=run.getStartOffset();j<run.getEndOffset();j++){
					//获取单个字符
					String text=new Range(j, j+1, doc).text();
					int code=text.hashCode();
					//根据code判断是否有换行
					if(code==13||code==7)
						sb.append("\n");
					else
						sb.append(text);
				}
			}
		}
		return sb;
	}

	/**输出文件*/
	public static void writeFile(String path,byte []file){
		try{
			File f=new File(path);
			if(!f.exists())
				f.createNewFile();
			OutputStream os=new FileOutputStream(f);
			os.write(file);
			os.close();
		}catch(Exception e){e.printStackTrace();}
	}
	
	//main方法测试
	public static void main(String[] args) throws Exception {
		String docPath="C:/Users/Administrator/Desktop/测试.doc";
		String descImageFolder="C:/Users/Administrator/Desktop";
		StringBuilder sb=readDoc(docPath, descImageFolder);
		System.out.println(sb.toString());
	}

java 使用 poi 读取 Excel:

	//读取Excel打印到控制台
	public static void main(String[] args) throws Exception{
		String xlsPath="C:/Users/Administrator/Desktop/测试.xls";
		//读取excel对象
		HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(xlsPath));
		//获取sheet数
		int sheets=workbook.getNumberOfSheets();
		HSSFSheet sheet=null;//sheet
		HSSFRow row=null;//row
		HSSFCell cell=null;//cell
		//遍历sheets
		for (int i = 0; i < sheets; i++) {
			sheet=workbook.getSheetAt(i);
			//遍历行
			for (int j = 0; j <= sheet.getLastRowNum(); j++) {
				row=sheet.getRow(j);
				//遍历列
				for (int s = 0; s < row.getLastCellNum(); s++) {
					cell=row.getCell(s);
					//打印列的值用|隔开,这里需要判断列的类型
					System.out.print(getCellValue(cell)+" | ");
				}
				//换行
				System.out.println();
			}
		}
	}

	
	//获取列的值,返回String
	public static String getCellValue(HSSFCell cell){
		if(cell==null) return null;
		Object obj=null;
		int type=cell.getCellType();
		//列为空
		if(type==cell.CELL_TYPE_BLANK){
			obj="";
		//boolean类型
		}else if(type==cell.CELL_TYPE_BOOLEAN){
			obj=cell.getBooleanCellValue();
		//数字/时间
		}else if(type==cell.CELL_TYPE_NUMERIC){
			if(HSSFDateUtil.isCellDateFormatted(cell))
				obj=cell.getDateCellValue();
			else
				obj=cell.getNumericCellValue();
		//字符串类型
		}else if(type==cell.CELL_TYPE_STRING){
			obj=cell.getStringCellValue();
		//其他类型
		}else/* if(type==cell.CELL_TYPE_FORMULA)*/{
			obj=cell.toString();
		}
		return obj!=null?String.valueOf(obj):null;
	}
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 94 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 5 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 615 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    4 引用 • 91 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 283 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    16 引用 • 7 回帖 • 2 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7018 引用 • 31717 回帖 • 219 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 321 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    70 引用 • 533 回帖 • 734 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 239 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 404 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 110 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    165 引用 • 1474 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1427 引用 • 10046 回帖 • 473 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 196 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 330 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    86 引用 • 897 回帖 • 1 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 141 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 3 关注