JAVA用POI读取和创建2003和2007版本Excel
1.添加maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10-FINAL</version>
</dependency>
2.读取和创建2003和2007版本Excel示例
package com.wyg.simple; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CreatAndReadExcel {
private static String excel2007Path = "D:\\temp\\style_2007.xlsx";
private static String excel2003Path = "D:\\temp\\style_2003.xls"; public static void main(String[] args) throws Exception {
creatExcel(excel2007Path, "2007");// 创建2007版Excel文件
creatExcel(excel2003Path,"2003");// 创建2003版Excel文件 // List<List<Object>> excel2007List = readExcel(excel2007Path);// 读取2007版Excel文件
List<List<Object>> excel2003List = readExcel(excel2003Path);// 读取2003版Excel文件
System.out.println(excel2003List.toString());
} /**
* 创建Excel文件
*
* @return
* @throws IOException
*/
public static void creatExcel(String excelPath, String version) throws IOException {
// XSSFWork used for .xslx (>=2007), HSSWorkbook for 03 .xsl
Workbook workbook = null;
if (version.equals("2007")) {
workbook = new XSSFWorkbook();// 创建 一个excel文档对象
} else if (version.equals("2003")) {
workbook = new HSSFWorkbook();// 创建 一个excel文档对象
}
Sheet sheet = workbook.createSheet("2007sheet");// 创建一个工作薄对象
sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为 Row row0 = sheet.createRow(1);// 创建一个行对象,从0行开始
row0.setHeightInPoints(23);// 设置行高23像素
for (int i = 0; i < 11; i++) {
Cell cell_1 = row0.createCell(i, Cell.CELL_TYPE_STRING);// 创建单元格,从0列开始
cell_1.setCellValue("column" + i);// 写入单元格的值
CellStyle style = getStyle(workbook);
cell_1.setCellStyle(style);// 应用样式对象
sheet.autoSizeColumn(i);// 自动调整列宽
} FileOutputStream outputStream = new FileOutputStream(excelPath);
workbook.write(outputStream);// 将文档对象写入文件输出流 outputStream.close();// 关闭文件输出流
System.out.println("创建成功 office excel");
} /**
* 设置样式
*
* @param workbook
* @return
*/
private static CellStyle getStyle(Workbook workbook) {
CellStyle style = workbook.createCellStyle();// 创建样式对象
// 设置对齐方式
style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中 // 设置边框
style.setBorderTop(HSSFCellStyle.BORDER_THICK);// 顶部边框粗线
style.setTopBorderColor(HSSFColor.RED.index);// 设置为红色
style.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);// 底部边框双线
style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);// 左边边框
style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);// 右边边框 style.setWrapText(true);// 设置单元格内容是否自动换行
// 格式化日期
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); // 设置单元格字体
Font font = workbook.createFont(); // 创建字体对象
font.setFontHeightInPoints((short) 14);// 设置字体大小
font.setColor(HSSFColor.RED.index);// 设置字体颜色
font.setFontName("宋体");// 设置为宋体字
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
style.setFont(font);// 将字体加入到样式对象 return style;
} /**
* 读取excel
*
* @param fileName
* @return 行<列>
* @throws IOException
*/ private static List<List<Object>> readExcel(String fileName) throws IOException {
File file = new File(fileName);
Workbook wb = null;
if (fileName.endsWith(".xlsx")) {//
wb = new XSSFWorkbook(new FileInputStream(file));// 创建 一个excel文档对象
} else if (fileName.endsWith(".xls")) {//
wb = new HSSFWorkbook(new FileInputStream(file));// 创建 一个excel文档对象
} Sheet sheet = wb.getSheetAt(0);// 读取第一个sheet页表格内容
Object value = null;
Row row = null;
Cell cell = null;
System.out.println("读取office 2007 excel内容如下:");
// System.out.println(sheet.getPhysicalNumberOfRows());// 获取的是物理行数,也就是不包括那些空行(隔行)的情况。
// System.out.println(sheet.getLastRowNum());// 获取的是最后一行的编号(编号从0开始)
// 行
List<List<Object>> rowlist = new LinkedList<List<Object>>();
for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
} // 列
List<Object> cellList = new LinkedList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
} DecimalFormat df = new DecimalFormat("0");// 格式化 number String
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:// 字符串——String type
value = cell.getStringCellValue();
break;
case XSSFCell.CELL_TYPE_NUMERIC:// 数字——Number type
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue());
} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
value = nf.format(cell.getNumericCellValue());
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case XSSFCell.CELL_TYPE_BOOLEAN:// boolean——Boolean type
value = cell.getBooleanCellValue();
break;
case XSSFCell.CELL_TYPE_BLANK:// 空白——Blank type
value = "";
break;
default:// default type
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
cellList.add(value);
}
rowlist.add(cellList);
}
return rowlist;
}
}
JAVA用POI读取和创建2003和2007版本Excel的更多相关文章
- JAVA用POI读取和创建2003和2007版本Excel完美示例
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决
Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...
- JAVA使用POI读取EXCEL文件的简单model
一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...
- Java使用POI读取和写入Excel指南
Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...
- POI 读取word (word 2003 和 word 2007)(转,好用)
POI 读取word (word 2003 和 word 2007)(转,好用) 转做的操作: 将作者文中失效的链接的正确链接放在失效链接的下面. 最近在给客户做系统的时候,用户提出需求,要能够导入 ...
- java使用poi读取ppt文件和poi读取excel、word示例
java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm
- java使用poi读取doc和docx文件(maven自动导入依赖包)
java使用poi读取doc和docx文件(maven自动导入依赖包) 于是在网上搜寻了一阵之后才发现原来doc文档和excel一样不能用普通的io流的方法来读取,而是也需要用poi,于是进行了一番尝 ...
- java使用poi读取word(简单,简约,直观)
java使用poi读取word(简单,简约,直观) 说明 其实poi的官网上面都是有接口和样例的,只是都是英文 例如网址:http://poi.apache.org/spreadsheet/quick ...
- 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题
1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...
随机推荐
- caffe环境的搭建(Ubuntu14.04 64bit,无CUDA,caffe在CPU下运行)
1. 安装BLAS : $ sudo apt-get install libatlas-base-dev 2. 安装依赖项: $ sudo apt-get install libprotobuf-de ...
- 一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow
Caffe Torch Theano TensorFlow Language C++, Python Lua Python Python Pretrained Yes ++ Yes ++ Yes ...
- ListView - SimpleAdapter 行间颜色交替(转)
一.概述 通过扩展SimpleAdapter,来改变显示外观.因为要每行的显示颜色,首先要获得每行的View实例,然后调用setBackgroundColor函数设置. 二.实例 [效果] [代码片段 ...
- 洛谷 P1976 鸡蛋饼
题目背景 Czyzoiers 都想知道小 x 为什么对鸡蛋饼情有独钟.经过一番逼问,小 x 道出 了实情:因为他喜欢圆. 题目描述 最近小 x 又发现了一个关于圆的有趣的问题:在圆上有2N 个不同的点 ...
- python实现堆栈、队列
一.利用python列表实现堆栈和队列 堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的a ...
- 51nod 1486 大大走格子——dp
有一个h行w列的棋盘,里面有一些格子是不能走的,现在要求从左上角走到右下角的方案数. Input 单组测试数据. 第一行有三个整数h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 20 ...
- 【游记】CTSC&APIO2017
GDOI回来不到两天就前往北京参加CTSC和APIO. CTSC Day1 [考试] T1一道神奇的题,很快想到O(n2)做法,感觉ctsc题目难度应该很大,就没马上想着出正解(事实上这届CTSC偏水 ...
- 【洛谷 P1525】 关押罪犯 (二分图+二分答案)
题目链接 并查集+贪心当然是可以做的. 但我用二分图+二分答案. 二分一个\(mid\),删去所有边权小于等于\(mid\)的边,看有没有奇环存在,如果存在,则\(mid\)不行. #include ...
- HH实习 acm算法部 1689
题目描述 这学期到了十五周了,HH突然要去实训中心实习了,想到要拿着钳子,锯子什么的,头就有点大了,因为它挺好玩的,但是,也是很累的,看着学弟坐在机房悠闲地敲着代码,HH学长决定要让他们好好忙忙,这道 ...
- 关于RecylerView:1.在ScrollView的RecylerView滑动事件的处理。2.item之间的距离 小数取整
1.在ScrollView的RecylerView滑动事件的处理. 在布局文件中在RecylerView外包裹一层相对布局 2.RecylerView item之间的距离 (1)编写SpaceItem ...