import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
 
import org.apache.poi.hssf.usermodel.HSSFCell;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
/**
 * 可以从http://poi.apache.org/ 这里下载到POI的jar包 POI 
创建和读取2003-2007版本Excel文件
 * 
 */
 
public class CreatAndReadExcel {
 
public static void main(String[] args) throws Exception {
 
creat2003Excel();// 创建2007版Excel文件
creat2007Excel();// 创建2003版Excel文件
//读取2003Excel文件
String path2003 = System.getProperty("user.dir")
+ System.getProperty("file.separator") + "style_2003.xls";// 获取项目文件路径 
+2003版文件名
System.out.println("路径:" + path2003);
File f2003 = new File(path2003);
try {
readExcel(f2003);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        //读取2007Excel文件
String path2007 = System.getProperty("user.dir")
+ System.getProperty("file.separator") + "style_2007.xlsx";// 获取项目文件路径 
+2007版文件名
System.out.println("路径:" + path2007);
File f2007 = new File(path2007);
try {
readExcel(f2007);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
}
 
/**
* 创建2007版Excel文件
* @throws FileNotFoundException
* @throws IOException
*/
private static void creat2007Excel() throws FileNotFoundException,
IOException {
// HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象
XSSFWorkbook workBook = new XSSFWorkbook();
XSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象
 
sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
 
XSSFRow row = sheet.createRow(1);// 创建一个行对象
 
row.setHeightInPoints(23);// 设置行高23像素
 
XSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
 
// 设置字体
 
XSSFFont font = workBook.createFont();// 创建字体对象
 
font.setFontHeightInPoints((short) 15);// 设置字体大小
 
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
 
font.setFontName("黑体");// 设置为黑体字
 
style.setFont(font);// 将字体加入到样式对象
 
// 设置对齐方式
 
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.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
 
XSSFCell cell = row.createCell(1);// 创建单元格
 
cell.setCellValue(new Date());// 写入当前日期
 
cell.setCellStyle(style);// 应用样式对象
 
// 文件输出流
 
FileOutputStream os = new FileOutputStream("style_2007.xlsx");
 
workBook.write(os);// 将文档对象写入文件输出流
 
os.close();// 关闭文件输出流
System.out.println("创建成功 office 2007 excel");
}
 
/**
* 创建2003版本的Excel文件
*/
private static void creat2003Excel() throws FileNotFoundException,
IOException {
HSSFWorkbook workBook = new HSSFWorkbook();// 创建 一个excel文档对象
 
HSSFSheet sheet = workBook.createSheet();// 创建一个工作薄对象
 
sheet.setColumnWidth(1, 10000);// 设置第二列的宽度为
 
HSSFRow row = sheet.createRow(1);// 创建一个行对象
 
row.setHeightInPoints(23);// 设置行高23像素
 
HSSFCellStyle style = workBook.createCellStyle();// 创建样式对象
 
// 设置字体
 
HSSFFont font = workBook.createFont();// 创建字体对象
 
font.setFontHeightInPoints((short) 15);// 设置字体大小
 
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
 
font.setFontName("黑体");// 设置为黑体字
 
style.setFont(font);// 将字体加入到样式对象
 
// 设置对齐方式
 
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.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
 
HSSFCell cell = row.createCell(1);// 创建单元格
 
cell.setCellValue(new Date());// 写入当前日期
 
cell.setCellStyle(style);// 应用样式对象
 
// 文件输出流
 
FileOutputStream os = new FileOutputStream("style_2003.xls");
 
workBook.write(os);// 将文档对象写入文件输出流
 
os.close();// 关闭文件输出流
System.out.println("创建成功 office 2003 excel");
}
 
/**
* 对外提供读取excel 的方法
*/
public static List<List<Object>> readExcel(File file) throws IOException {
String fileName = file.getName();
String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
.substring(fileName.lastIndexOf(".") + 1);
if ("xls".equals(extension)) {
return read2003Excel(file);
} else if ("xlsx".equals(extension)) {
return read2007Excel(file);
} else {
throw new IOException("不支持的文件类型");
}
}
 
/**
* 读取 office 2003 excel
* @throws IOException
* @throws FileNotFoundException
*/
private static List<List<Object>> read2003Excel(File file)
throws IOException {
List<List<Object>> list = new LinkedList<List<Object>>();
HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file));
HSSFSheet sheet = hwb.getSheetAt(0);
Object value = null;
HSSFRow row = null;
HSSFCell cell = null;
System.out.println("读取office 2003 excel内容如下:");
for (int i = sheet.getFirstRowNum(); i <= sheet
.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = 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
// 字符
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
// System.out.println(i + "行" + j + " 列 is String type");
value = cell.getStringCellValue();
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_NUMERIC:
// System.out.println(i + "行" + j
// + " 列 is Number type ; DateFormt:"
// + cell.getCellStyle().getDataFormatString());
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()));
}
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
// System.out.println(i + "行" + j + " 列 is Boolean type");
value = cell.getBooleanCellValue();
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_BLANK:
// System.out.println(i + "行" + j + " 列 is Blank type");
value = "";
System.out.print("  " + value + "  ");
break;
default:
// System.out.println(i + "行" + j + " 列 is default type");
value = cell.toString();
System.out.print("  " + value + "  ");
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
 
}
System.out.println("");
list.add(linked);
}
 
return list;
}
 
/**
* 读取Office 2007 excel
*/
 
private static List<List<Object>> read2007Excel(File file)
throws IOException {
 
List<List<Object>> list = new LinkedList<List<Object>>();
// String path = System.getProperty("user.dir") +
// System.getProperty("file.separator")+"dd.xlsx";
// System.out.println("路径:"+path);
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
 
// 读取第一章表格内容
XSSFSheet sheet = xwb.getSheetAt(0);
Object value = null;
XSSFRow row = null;
XSSFCell cell = null;
System.out.println("读取office 2007 excel内容如下:");
for (int i = sheet.getFirstRowNum(); i <= sheet
.getPhysicalNumberOfRows(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
List<Object> linked = 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
// 字符
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00");// 格式化数字
 
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
// System.out.println(i + "行" + j + " 列 is String type");
value = cell.getStringCellValue();
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_NUMERIC:
// System.out.println(i + "行" + j
// + " 列 is Number type ; DateFormt:"
// + cell.getCellStyle().getDataFormatString());
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()));
}
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_BOOLEAN:
// System.out.println(i + "行" + j + " 列 is Boolean type");
value = cell.getBooleanCellValue();
System.out.print("  " + value + "  ");
break;
case XSSFCell.CELL_TYPE_BLANK:
// System.out.println(i + "行" + j + " 列 is Blank type");
value = "";
// System.out.println(value);
break;
default:
// System.out.println(i + "行" + j + " 列 is default type");
value = cell.toString();
System.out.print("  " + value + "  ");
}
if (value == null || "".equals(value)) {
continue;
}
linked.add(value);
}
System.out.println("");
list.add(linked);
}
return list;
}
}
 

JAVA用POI读取和创建2003和2007版本Excel完美示例的更多相关文章

  1. JAVA用POI读取和创建2003和2007版本Excel

    1.添加maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-o ...

  2. 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中 ...

  3. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  4. Java使用POI读取和写入Excel指南

    Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...

  5. POI 读取word (word 2003 和 word 2007)(转,好用)

    POI 读取word (word 2003 和 word 2007)(转,好用) 转做的操作: 将作者文中失效的链接的正确链接放在失效链接的下面. 最近在给客户做系统的时候,用户提出需求,要能够导入 ...

  6. java使用poi读取ppt文件和poi读取excel、word示例

    java使用poi读取ppt文件和poi读取excel.word示例 http://www.jb51.net/article/48092.htm

  7. java使用poi读取doc和docx文件(maven自动导入依赖包)

    java使用poi读取doc和docx文件(maven自动导入依赖包) 于是在网上搜寻了一阵之后才发现原来doc文档和excel一样不能用普通的io流的方法来读取,而是也需要用poi,于是进行了一番尝 ...

  8. java使用poi读取word(简单,简约,直观)

    java使用poi读取word(简单,简约,直观) 说明 其实poi的官网上面都是有接口和样例的,只是都是英文 例如网址:http://poi.apache.org/spreadsheet/quick ...

  9. 【Java POI】POI基于事件驱动解析大数据量2007版本Excel,空值导致列错位问题

    1.目前测试了20M的文件,可以读取. 2.支持单个工作表1万+的数据行数,耗时如图. 3.以下是关键地方处理的代码 //Accepts objects needed while parsing. / ...

随机推荐

  1. 捕获Chrome浏览器全屏退出事件

    参考地址 document.addEventListener("fullscreenchange", function(e) { console.log("fullscr ...

  2. PHP-各种下载安装

    Windows下常用PHP扩展下载: http://dev.freshsite.pl/php-accelerators.html http://windows.php.net/downloads/pe ...

  3. 利用Aspose.BarCode生成条码

    生成条码有很多控件,大部分好的控件,做出来的条码精确清晰,但是往往该部分的控件费用都很高,这里推荐大家使用6.0版本的破解版,可以生成无水印,下方也可以不显示文字. 1.下图是 onbarcode 控 ...

  4. 关于远程访问Oracle数据库的设置(共享数据库)

    写在前面: 需求描述:     我笔记本上安装了oracle数据库, 现在同事也想连接这个数据库. 也就是设置为别人能远程访问我本地的数据库. 思路:     通过在我笔记本WiFi共享,别人连接该W ...

  5. HDUOJ-----1098 Ignatius's puzzle

    Ignatius's puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. HDUOJ---Can you solve this equation?

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  7. NSURLRequestCachePolicy 缓存策略

    1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端获取.如果缓存存在,会根据response中的Cache-Co ...

  8. oc set/get方法

    新建一个“Cocoa Touch Class”文件,命名为People People.h 写入 @interface People : NSObject @property int age; @end ...

  9. go 学习 ---数据类型

    25个关键字 程序声明:import, package 程序实体声明和定义:chan, const, func, interface, map, struct, type, var 程序流程控制:go ...

  10. activity 概念认知

    工作流生命周期,5步 定义,工作流生命周期从流程定义开始. 发布,由开发人员打包各种资源,然后在系统管理中发布流程定义.包含流程定义文件.自定义表单.任务监听等. 执行,有具体的流程引擎如 activ ...