import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
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;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelTest { private static final String EXL_2003 = "C:\\Users\\Administrator\\Desktop\\sale2003.xls";
private static final String EXL_2007 = "C:\\Users\\Administrator\\Desktop\\sale2007.xlsx"; public static void main(String[] args){
try {
test(EXL_2003);
test(EXL_2007);
} catch (Exception e) {
System.out.println("请检查EXCEL文件及格式!!");
}
} private static void test(String file) throws Exception {
Workbook wb = null;
if (file.endsWith(".xlsx")) {//EXCEL2007
wb = new XSSFWorkbook(new FileInputStream(new File(file)));
}else if(file.endsWith(".xls")){//EXCEL97-2003
wb = new HSSFWorkbook(new FileInputStream(new File(file)));
}else{
throw new Exception("");
} if(wb.getNumberOfSheets() > 1){
wb.removeSheetAt(1);
} //单元格合并
CellRangeAddress region = null;
Sheet sheet1 = wb.getSheetAt(0);
Sheet sheet2 = wb.createSheet(sheet1.getSheetName() + "_副本");
for (int i = 0; i < sheet1.getNumMergedRegions(); i++) {
region = sheet1.getMergedRegion(i);
if ((region.getFirstColumn() >= sheet1.getFirstRowNum())
&& (region.getLastRow() <= sheet1.getLastRowNum())) {
sheet2.addMergedRegion(region);
}
} //复制内容
Row rowFrom = null;
Row rowTo = null;
Cell cellFrom = null;
Cell cellTo = null;
for (int i = sheet1.getFirstRowNum(); i < sheet1.getLastRowNum(); i++) {
rowFrom = sheet1.getRow(i);
if (null == rowFrom){
continue;
} rowTo = sheet2.createRow(i);
rowTo.setHeight(rowFrom.getHeight());
for (int j = 0; j < rowFrom.getLastCellNum(); j++) {
sheet2.setColumnWidth(j, sheet1.getColumnWidth(j));
if(null != sheet1.getColumnStyle(j)){
sheet2.setDefaultColumnStyle(j, sheet1.getColumnStyle(j));
} cellFrom = rowFrom.getCell(j);
if (null == cellFrom){
continue;
} cellTo = rowTo.createCell(j);
cellTo.setCellStyle(cellFrom.getCellStyle());
cellTo.setCellType(cellFrom.getCellType()); if(Cell.CELL_TYPE_STRING == cellFrom.getCellType()){
cellTo.setCellValue(cellFrom.getStringCellValue());
}else if(Cell.CELL_TYPE_NUMERIC == cellFrom.getCellType()){
cellTo.setCellValue(cellFrom.getNumericCellValue());
}
}
} sheet2.setDisplayGridlines(true);//
FileOutputStream fileOut = new FileOutputStream(file);
wb.write(fileOut);
fileOut.close(); System.out.println(file + " 复制sheet成功!");
} }

本人没装EXCEL2007以上版本,不知是否向上兼容

POI解析读写EXCEL,复制SHEET,兼容EXCEL93-2003,2007的更多相关文章

  1. java的poi技术写Excel的Sheet

    在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...

  2. java 使用POI读写Excel文件(兼容2003、2007)

    package com.jadyer.demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...

  3. 关于C#操作Excel,复制Sheet的记录

    1.先用了NPOI,去做,HSSFWorkbook 里面有一个Copy方法,但这个只支持office2003. 对应的XSSFWorkbook没有些方法. 而且这个这个方法对devexpress导出的 ...

  4. Apache POI 实现对 Excel 文件读写

    1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...

  5. [转]POI读写Excel 修改

    [转]POI读写Excel 修改 一.Excel基础 二.HSSF概况 三.通过usermodel读取文件 四.通过usermodel写入文件 五.通过eventusermodel读取文件 六.HSS ...

  6. Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好

    欢迎使用Excelbatis! github地址:https://github.com/log4leo/Excelbatis Excelbatis的优点 和spring天然结合,易于接入 xsd支持, ...

  7. java读写excel文件( POI解析Excel)

    package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...

  8. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  9. Java读写Excel之POI超入门

    转自:http://rensanning.iteye.com/blog/1538591 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给J ...

随机推荐

  1. Qt 如何使用反射?

    Qt 如何使用反射? c++ 反射 标准库暂时还没有,那我们来看看如何使用 qt 来进行反射. 反射类的案例 1. 通过注册的类型需找 id 进行实例化该类 myclass.h #include &l ...

  2. pthread_cond_timedwait

    该函数用于在同时等待条件变量时提供超时功能,不过该函数的超时时间是一个绝对时间.默认使用系统时间,这意味这,若修改系统时间,那么超时就不准确,有可能提前返回,也可能要几年才返回.这在某些需求下会导致b ...

  3. DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法

    原文:DevExpress Winform使用单例运行程序方法和非DevExpress使用Mutex实现程序单实例运行且运行则激活窗体的方法 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  4. hadoop工作流调度系统

    常见工作流调度系统 Oozie, Azkaban, Cascading, Hamake 各种调度工具特性对比 特性 Hamake Oozie Azkaban Cascading 工作流描述语言 XML ...

  5. vue 移动端列表筛选功能实现

    最近兴趣所致,打算使用vant搭建一个webapp,由于需要使用列表筛选,没有找到合适组件,于是写了一个简单的功能,权当记录. 效果如下:        HTML: <div class=&qu ...

  6. 【LeetCode】深搜DFS(共85题)

    [98]Validate Binary Search Tree [99]Recover Binary Search Tree [100]Same Tree [101]Symmetric Tree [1 ...

  7. Sass-数字运算

    在 Sass 运算中数字运算是较为常见的,数字运算包括前面介绍的:加法.减法.乘法和除法等运算.而且还可以通过括号来修改他们的运算先后顺序.和我们数学运算是一样的,一起来看个示例. .box { wi ...

  8. javascript实现下拉菜单的显示与隐藏

    demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. USACO2008 Jan 电话网络

    Time Limit: 10 Sec Memory Limit: 162 MB Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶 ...

  10. Java遍历集合的几种方法

    遍历集合的几种方法 用不同的方法遍历集合. public interface Iterator:对Collection进行迭代的迭代器.迭代器取代了Java Collections FrameWork ...