POI解析读写EXCEL,复制SHEET,兼容EXCEL93-2003,2007
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的更多相关文章
- java的poi技术写Excel的Sheet
在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...
- java 使用POI读写Excel文件(兼容2003、2007)
package com.jadyer.demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOExce ...
- 关于C#操作Excel,复制Sheet的记录
1.先用了NPOI,去做,HSSFWorkbook 里面有一个Copy方法,但这个只支持office2003. 对应的XSSFWorkbook没有些方法. 而且这个这个方法对devexpress导出的 ...
- Apache POI 实现对 Excel 文件读写
1. Apache POI 简介 Apache POI是Apache软件基金会的开放源码函式库. 提供API给Java应用程序对Microsoft Office格式档案读和写的功能. 老外起名字总是很 ...
- [转]POI读写Excel 修改
[转]POI读写Excel 修改 一.Excel基础 二.HSSF概况 三.通过usermodel读取文件 四.通过usermodel写入文件 五.通过eventusermodel读取文件 六.HSS ...
- Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好
欢迎使用Excelbatis! github地址:https://github.com/log4leo/Excelbatis Excelbatis的优点 和spring天然结合,易于接入 xsd支持, ...
- java读写excel文件( POI解析Excel)
package com.zhx.base.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi ...
- C++读写EXCEL文件OLE,java读写excel文件POI 对比
C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...
- Java读写Excel之POI超入门
转自:http://rensanning.iteye.com/blog/1538591 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给J ...
随机推荐
- UML 类图关系(继承,实现,依赖,关联,聚合,组合)
1.继承(is-a) 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能.并能够添加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中此类 ...
- linux查看进程数
命令行: $ ps -ef | wc -l 如果想匹配某个关键词的话,加上grep,下面命令是匹配关键词 “XXX”,并统计含有该关键词的进程数 $ ps -ef | grep XXX | wc -l
- style中各种选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- angularjs 信息链接 转摘自:http://www.zhihu.com/question/27427447
这个问题嘛,真不好回答,问的太笼统了,其实你只要熟悉掌握了Angular.js,自然而然的就会用Angular.js结合自身的业务去构建SPA程序了,Angular.js是一个比较全面的框架,按照他的 ...
- C# 一个网站
http://www.aizhengli.com/aspnet-mvc5/6/aspnet-mvc5-member-user-register.html
- MapReduce-WordCountDemo
/** * @Author: dreamer Q * @Date: 2019/11/4 22:26 * @Version 1.0 * @Discription 使用MapReduce 开发 WordC ...
- jieba库的使用
jieba库的使用 jeiba库是一款很优秀的用于中文分词的第三方库,它通过一个汉词词典来确定汉字之间的关联概率,将概率较大的组成分词. 精准模式 把文本精准的分割开来,不存在冗余单词. jieba. ...
- 同步与异步,阻塞与非阻塞 bio,nio,aio
BIO.NIO和AIO的区别(简明版) 同步异步,阻塞非阻塞: https://www.zhihu.com/question/19732473 转载请注明原文地址:http://www.cnblo ...
- Mongodb使用shell实现与javascript的动态交互
关于利用mongodb的shell执行脚本,这点在以前的文章中有点遗漏:现在在此篇博客中做个补充: 一.在命令行中传入脚本文件 定义一个javasciprt文件,名称为:script1.js,内容如下 ...
- WPF 几种常用控件样式的总结
这里把wpf中几种常用样式总结一下,后期可以直接拷贝使用,呵呵 一.Button <ResourceDictionary xmlns="http://schemas.microsoft ...