解析xlsx与xls--使用2012poi.jar
1.导入Jar包:poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、poi-ooxml-schemas-3.8-20120326.jar、xbean.jar、dom4j-1.6.1.jar
类开始================
package servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcleTest {
public static void main(String[] args) {
String path = "E:/yy.xls";
//String path = "E:/yy.xlsx";
Map<String, List<String[]>> map = getExcle(path);
List<String[]> list = map.get("Sheet1");
for (int i = 0; i < list.size(); i++) {
String[] str = list.get(i);
for (int j = 0; j < str.length; j++) {
System.out.print(str[j] + " | ");
}
System.out.println("");
}
}
/**
*获得excle的数据
*
* @param pathname
* @return
*/
public static Map<String, List<String[]>> getExcle(String pathname) {
InputStream fs = null;
Workbook wb = null;
Map<String, List<String[]>> map = new HashMap<String, List<String[]>>();
try {
// excle的类型
String readType = pathname.substring(pathname.lastIndexOf("."));
File file = new File(pathname);
if (file.exists()) {
fs = new FileInputStream(file);
} else {
System.out.println("文件不存在!");
}
if (readType.equals(".xls")) {
wb = new HSSFWorkbook(fs);
} else {
wb = new XSSFWorkbook(fs);
}
map = getExcleData_xls(wb);
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 获得excle xls格式的数据
*
* @param wb
* @return
*/
public static Map<String, List<String[]>> getExcleData_xls(Workbook wb) {
Map<String, List<String[]>> map = new HashMap<String, List<String[]>>();
try {
if (wb != null) {
// sheet个数
int numSheet = wb.getNumberOfSheets();
for (int i = 0; i < numSheet; i++) {
Sheet sheet = wb.getSheetAt(i);
String sheetname = sheet.getSheetName();
List<String[]> listData = getSheetData(sheet); // 读取sheet里的数据
listData = setMergedRegion(sheet, listData);
map.put(sheetname, listData);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 获得sheet 里的数据
*
* @param sheet
* @return
*/
public static List<String[]> getSheetData(Sheet sheet) {
List<String[]> listData = new ArrayList<String[]>();
try {
if (sheet != null) {
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
String[] rowData = getRowData(row);
listData.add(rowData);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return listData;
}
/**
* 获得row 的数据
*
* @param row
* @return
*/
public static String[] getRowData(Row row) {
String[] rowData = null;
try {
if (row != null) {
int numcell = row.getLastCellNum();
rowData = new String[numcell];
for (int i = 0; i < numcell; i++) {
Cell cell = row.getCell(i);
rowData[i] = getCellData(cell);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return rowData;
}
/**
* 获得单元格的值
* @param cell
* @return
*/
public static String getCellData(Cell cell) {
String value = null;
try {
if (cell != null) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC: // 数值型
if (DateUtil.isCellDateFormatted(cell)) {
// 如果是Date类型则 ,获取该Cell的Date值
value =new SimpleDateFormat("yyyy-MM-dd").format(DateUtil
.getJavaDate(cell.getNumericCellValue()));
} else {// 纯数字,这里要判断是否为小数的情况,因为整数在写入时会被加上小数点
String t = cell.getNumericCellValue() + "";
BigDecimal n = new BigDecimal(cell
.getNumericCellValue());
// 判断是否有小数点
if (t.indexOf(".") < 0) {
value = n.intValue() + "";
} else {
// 数字格式化对象
NumberFormat nf = NumberFormat.getInstance();
// 小数点最大两位
nf.setMaximumFractionDigits(2);
// 执行格式化
value = nf.format(n.doubleValue());
}
}
break;
case Cell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue().toString();
break;
case Cell.CELL_TYPE_FORMULA:// 公式型
// 读公式计算值
value = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_BOOLEAN:// 布尔
value = " " + cell.getBooleanCellValue();
break;
/* 此行表示该单元格值为空 */
case Cell.CELL_TYPE_BLANK: // 空值
value = " ";
break;
case Cell.CELL_TYPE_ERROR: // 故障
value = " ";
break;
default:
value = cell.getRichStringCellValue().toString();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 处理单元格值相等的单元格
*
* @param sheet
*/
@SuppressWarnings("unused")
public static List<String[]> setMergedRegion(Sheet sheet,
List<String[]> list) {
int num = sheet.getNumMergedRegions();
List<String[]> listDate = new ArrayList<String[]>();
try {
for (int i = 0; i < num; i++) {
CellRangeAddress rangeAddress = sheet.getMergedRegion(i);
int firstcell = rangeAddress.getFirstColumn();
int firstrow = rangeAddress.getFirstRow();
int lastcell = rangeAddress.getLastColumn();
int lastrow = rangeAddress.getLastRow();
// 处理合并行的值
if (firstcell == lastcell) {
for (int j = firstrow; j <= lastrow; j++) {
list.get(j)[firstcell] = list.get(firstrow)[firstcell];
}
}
// 处理合并列的值
if (firstrow == lastrow) {
for (int j = firstcell; j <= lastcell; j++) {
list.get(firstrow)[j] = list.get(firstrow)[j];
}
}
// 处理合并行列
if (firstcell != lastcell && firstrow != lastrow) {
for (int j = firstrow; j <= lastrow; j++) {
for (int k = firstcell; k <= lastcell; k++) {
list.get(j)[k] = list.get(firstrow)[firstcell];
}
}
}
}
listDate = list;
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
类结束================
解析xlsx与xls--使用2012poi.jar的更多相关文章
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- java 关于xlsx(xls) 和 csv 文件的数据解析
1.适用于xlsx 和 xls <!--xlsx和xls文件pom依赖--> <dependency> <groupId>org.apache.poi</g ...
- Java 导出Excel xlsx、xls, CSV文件
通用导出功能: 1.支持Excel xlsx.xls 2.支持CSV文件导出 3.数据库查询分页导出.内存导出 4.支持大批量数据导出 使用步骤如下 导入jar <dependency> ...
- 使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
- 把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中
把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中步骤如下: 把需要合并的文件放到同一个文件夹 在该文件夹中新建一个excel文件 打开新建的excel问价,把鼠标放到sh ...
- 判断上传的Excel为.xlsx还是.xls
这个问题其实蛮简单的,具体操作如下 判断获取到上传的文件id后下载文件,然后拿到文件名称,截取文件名称后缀,判断是.xlsx还是.xls进行不同的操作即可
- 在线预览(pptx、ppt、pps、docx、doc、xlsx、xls)
http://view.officeapps.live.com/op/view.aspx?src=<文档位置> 示例文档https://www.dujin.org/file/ppt/duj ...
- java解析Excel(xls、xlsx两种格式)
https://www.cnblogs.com/hhhshct/p/7255915.html ***************************************************** ...
- 解析xlsx文件---Java读取Excel2007
关于Java读取Excel2007的文章在Google.百度上搜索一下,没有太好的例子,实现的也不算太好.查看了一下Poi,最新的 POI 3.5 beta 4 支持读写 Excel2007和PPT2 ...
随机推荐
- raywenderlich-iOS设计模式Part 1/2【译】
原文地址:http://www.raywenderlich.com/86477/introducing-ios-design-patterns-in-swift-part-1 Update 04/22 ...
- Mysql安装过程(linux:2.6.18-194.el5,Mysql:)
1.安装[root@RAC2 mysql]# rpm -ivh MySQL-server-5.6.12-2.rhel5.x86_64.rpm Preparing... ################ ...
- JVM 学习笔记(一)
JVM ----Java Virtual Machine (熟称:JAVA虚拟机),JVM 在执行JAVA程序的过程中将内容划分为若干个区域,其有各自的用途和管理机制.如下图: 1. 程序计 ...
- python中的单下划线和双下划线意义和作用
Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以 ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- hdu 1827
强连通分量——tarjin算法: 这题的思路就是找出多少个出度为0的连通分量,结果就是这些连通分量的元素的最小值相加: 一道很简单的题,改了我好久,= =!~ 贴代码: #include<cst ...
- 纯js将form表单的数据封装成json 以便于ajax发送
使用方式: var json = form2Json("formId");//这里的参数是form表单的id值 form2json.js function form2Json(fo ...
- 三星 PMU NXE2000,x-powers的AXP228,NXE2000
核心板PMIC X4418CV2并没有用三星推荐的PMU NXE2000,而是自主研发,采用x-powers的AXP228,这是因为AXP228更符合用户的习惯,更适合做产品,他们有如下区别: PMU ...
- C++中new和不new的区别
我们都知道C++中有三种创建对象的方法,如下: 复制代码代码如下: #include <iostream>using namespace std; class A{private: ...