Excel表单的读取与处理 PHPExcel与Apache POI
近日,连续遇到需要对Excel表单内容进行读取的需求。一个是在php环境下,一个是在java环境下。这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法。
d0710 : Finish
==============================================================
两个平台的简要介绍以及官方地址
PHPExcel
PHPExcel - OpenXML - Read, Write and Create Excel documents in PHP - Spreadsheet engine
官方网址:http://phpexcel.codeplex.com/Apache POI
Apache POI - the Java API for Microsoft Documents
官方网址:https://poi.apache.org/
PHPExcel的具体使用方法
从官方GitHub下载得到如下文件
将其放置当前工程内,其接口为PHPExcel.php。
在目标文件中包含此入口:<?php
require_once "./XXX/PHPExcel.php";
?>指定目标Excel文件:
<?php
$filename = "./Data/XXX.xls";
$objReader = PHPExcel_IOFactory::createReaderForFile($filename);
$objPHPExcel = $objReader->load($filename);
?>读取具体表格中的文件
<?php
$objPHPExcel->setActiveSheetIndex($SheetN);//读取第N表格
$result = $objPHPExcel->getActiveSheet()->getCell("$X$Y")->getValue();//读取这个表格中的第XY个数据
?>故完整的流程如下:
require_once "./XXX/PHPExcel.php";
$filename = "./Data/XXX.xls";
$objReader = PHPExcel_IOFactory::createReaderForFile($filename);
$objPHPExcel = $objReader->load($filename);
$objPHPExcel->setActiveSheetIndex($SheetN);
$result = $objPHPExcel->getActiveSheet()->getCell("$X$Y")->getValue();Apache POI的具体使用方法
下载文件目录如下:
搭建环境:在目标工程右键选择Properties,选择如下对话框中的Java Build Path中的Libraries,再选择Add External JARs,添加刚才目录下的Poi-version-date.jar包即可。
总体思想:Apache POI提供了WorkBook类,Sheet类,Row类,Cell类。从输入流中依次读入WorkBook,从而获取Sheet,Row,从而获取Cell。可以读取Cell中的数据,或者修改此Cell内的数据。
但是要注意的是,这时仅仅是修改了从输入流中读取的实例化的WorkBook类,若想输出该变化,最终要将WorkBook通过输出流来改变具体的文件。
同时,Apache POI对空单元格的处理是,对于该cell的指针置空(null),故若想修改空的单元格,最好对目标Excel文件预处理,加入NULL关键字,即可获取其指针再对其值修改。Apache POI处理示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
public class test {
private static Workbook wb;
private static int SheetNum = 0; //读取的表格号
private static int CellNum = 0; //读取第几个cell public static void main(String[] args) throws Exception {
String ifile = "IN.xls"; //输入文件的地址
String ofile = "OUT.xls"; //输出文件的地址
FileInputStream fis = new FileInputStream(ifile);
FileOutputStream fos = new FileOutputStream(ofile);
wb = new HSSFWorkbook(fis); //从输入流实例化workbook
if (wb != null) {
Sheet sheet = wb.getSheetAt(SheetNum); //打开workbook中SheetNum的表格
int totalRows = sheet.getPhysicalNumberOfRows(); //获取总行数
for (int r = 1; r < totalRows; r++) { //遍历每一行的数据
Row row = sheet.getRow(r);//获取第r行的row对象
if (row == null) continue;
Cell cell = row.getCell(CellNum);//获取第CellNum的数据,同时可以利用 row.getPhysicalNumberOfCells() 来遍历列
String old = cell.getStringCellValue();//获取原cell内容
if("NULL".equals(old)) old = ""; //若为标记单元格,清空
old += "After modify";
cell.setCellValue(new HSSFRichTextString(old));//设置修改后的内容
wb.write(fos); //将workbook写入输出流
System.out.println("Done");
fos.close(); //关闭输入输出流
fis.close();
}
}
Excel表单的读取与处理 PHPExcel与Apache POI的更多相关文章
- thinkphp导入导出excel表单数据
在PHP项目经常要导入导出Excel表单. 先去下载PHPExcel类库文件,放到相应位置. 我在thinkphp框架中的位置为ThinkPHP/Library/Org/Util/ 导入 在页面上传e ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- zf-关于差旅报销的excel表单填写
日期一定要填,还有二级科目事由跟申请金额,如果申请金额为0的话,那么久直接删除哪一行,因为如果不删除的话,Excel表单将提交出错.
- C# 添加Excel表单控件(Form Controls)
在Excel中,添加的控件可以和单元格关联,我们可以操作控件来修改单元格的内容,在下面的文章中,将介绍在Excel中添加几种不同的表单控件的方法,包括: 添加文本框(Textbox) 单选按钮(Rad ...
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
今天,一朋友问我使用JAVA有没有什么办法导出百万级的数据到Excel工作表. 当时我的第一个念头就是这真的是一个好疯狂的念头.然后就想假如真的有这样类似的需求,我自己应该怎么做呢? ps: 首先科普 ...
- (最全最灵活地)利用Jxl工具包实现Excel表的内容读取 、写入(可向已有表中追加数据)
1.引子 (1)读取 Jxl工具比较强大,可以方便地实现Excel表的读取和写入.另一款工具Poi也具有相似的功能,并且功能更多,运用也相对复杂.Poi读取Excel表内容时,需要先判断其内容格式,如 ...
- Java 实现Excel表数据的读取和写入 以及过程中可能遇到的问题
问题1:Unable to recognize OLE stream 格式的问题要可能是因为给的数据是2010年的数据表后缀为.xlsx,要先转化成2003版的后缀为.xls 问题2: Warning ...
- Java 添加、删除Excel表单控件
通过表单控件,用户可以快速地将数据填写到模板文档中,轻松引用单元格数据并与其进行交互.本文通过Java代码示例介绍如何在Excel表格中添加表单控件,包括文本框.单选按钮.复选框.组合框.微调按钮等: ...
- 用laravel Maatwebsite\Excel 教你导出漂亮的Excel表单
先来看效果图 还算是漂亮吧 哈哈哈. 第一步当然是安装包咯 环境要求 PHP: ^7.0Laravel: ^5.5 composer require maatwebsite/excel 目前3.1 只 ...
随机推荐
- cve-2017-0199&metasploit复现过程
CVE-2017-0199 WORD/RTF嵌入OLE调用远程文件执行的一个漏洞.不需要用户交互.打开文档即中招 首先更新msf到最新,据说最新版简化了利用过程,不需要开启hta这一步.但没测成功 还 ...
- [AOP系列]Autofac+Castle实现AOP日志
一.前言 最近公司新项目,需要搭架构进行开发,其中需要对一些日志进行输出,经过一番查找,发现很多博文都是通过Spring.Net.Unity.PostSharp.Castle Windsor这些方式实 ...
- js判断移动终端(手机浏览器)
方法1: <script type="text/javascript"> var browser = { versions: f ...
- hexdump命令的使用
hexdump命令是Linux下的打印16进制的利器,它可以按我们指定的格式输出16进制,特别有用,配合eeprom来用简直是绝配. 今天我们来介绍一个hexdump命令的使用: 首先我们准备一个测试 ...
- iOS tableview group时头尾视图间隔大小
解决: 一,当使用tableview的格式为group时 1.先设置 tableview.sectionHeaderHeight = 0.00001; tableview.sectionFooterH ...
- 一些实用而又记不住的css技巧
user-select 禁止用户选中文本 div { user-select: none; /* Standard syntax */ } 清除手机tap事件后element 时候出现的一个高亮 * ...
- Kettle安装和配置
0x01 Kettle软件概览 Spoon:集成开发环境 Kitchen:作业的命令行运行程序,可以通过Schell脚本来调用 Pan:转换的命令行程序 Carte:轻量级的HTTP服务,后台运行,监 ...
- Linux/Unix监控其他用户和信号
--Linux/Unix监控其他用户和信号 ------------------------------------------------------2013/10/27 查看有哪些用户登录 w ...
- 阅读:RAID5和RAID10,哪种RAID更适合你
阅读:RAID5和RAID10,哪种RAID更适合你-------------------------------------------2013/10/06 存储是目前IT产业发展的一大热点,而RA ...
- Velocity.js的使用
前面的话 Velocity是一款优秀的JS动画库,完全可以作为jQuery的animate的替代品.需要动画功能时,使用Velocity是一个好选择.本文将详细介绍Velocity.js的使用 概述 ...