POI之Excel文档增删改查
需要引用apache第三方lib库poi
支持xls、xlsx格式excel读写操作
package com.hua.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.functions.Column;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
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.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class WorkExcel implements Excel {
private boolean isXls=false;
private Sheet sheet;
private Workbook wb;
private String savePath;
public WorkExcel(String excelPath,String sheetname) throws IOException{
savePath=excelPath;
isXls=excelPath.endsWith(".xls");
FileInputStream excelfile = null;
File file = new File (excelPath);
if(file.exists()){
excelfile=new FileInputStream(excelPath);
}
if(!isXls){
// wb = new XSSFWorkbook(excelfile);
// setActiveSheet(sheetname);
if(null!=excelfile){
wb =new XSSFWorkbook(excelfile);
setActiveSheet(sheetname);
} else {
wb =new XSSFWorkbook();
createSheet(sheetname);
}
} else {
// wb = new HSSFWorkbook(excelfile);
// setActiveSheet(sheetname);
if(null!=excelfile){
wb =new HSSFWorkbook(excelfile);
setActiveSheet(sheetname);
} else {
wb =new HSSFWorkbook();
createSheet(sheetname);
}
}
}
@Override
public void insertColumn(int columnIndex) {
if(isXls){
int maxCellNum=columnIndex;
for(Iterator<Row> rowIterator=sheet.rowIterator();rowIterator.hasNext();){
HSSFRow row = (HSSFRow) rowIterator.next();
for(int i=row.getLastCellNum()-1;i>=columnIndex;i--){
HSSFCell cell2 = row.getCell(i);
if(cell2==null){
continue;
}
row.moveCell(cell2, (short)(i+1));
}
HSSFCell cell = row.getCell(columnIndex);
if(cell!=null){
row.removeCell(cell);
}
if(maxCellNum<row.getLastCellNum()){
maxCellNum=row.getLastCellNum();
}
}
for(int n=maxCellNum-2;n>columnIndex;n--){
int width=sheet.getColumnWidth(n-1);
sheet.setColumnWidth(n, width);
}
} else {
int maxCellNum=columnIndex;
for(Iterator<Row> rowIterator=sheet.rowIterator();rowIterator.hasNext();){
XSSFRow row = (XSSFRow)rowIterator.next();
for(int i=row.getLastCellNum()-1;i>=columnIndex;i--){
Cell cell2 = row.getCell(i);
if (cell2==null) {
continue;
}
String value = getCellvalue(row.getRowNum(), i);
setCellvalue(row.getRowNum(), i+1, value);
setCellStyle(row.getRowNum(), i+1, cell2.getCellStyle());
row.removeCell(cell2);
}
if(maxCellNum<row.getLastCellNum()){
maxCellNum=row.getLastCellNum();
}
}
for(int n=maxCellNum-2;n>columnIndex;n--){
int width = sheet.getColumnWidth(n-1);
sheet.setColumnWidth(n, width);
}
}
}
@Override
public void insertRow(int rowIndex) {
// TODO 自动生成的方法存根
sheet.shiftRows(rowIndex, sheet.getLastRowNum(), 1,true,false);
sheet.createRow(rowIndex);
}
@Override
public void createSheet(String sheetName) {
// TODO 自动生成的方法存根
sheet = wb.createSheet(sheetName);
}
@Override
public void delColumn(int columnIndex) {
if(isXls){
int maxCellNum = columnIndex;
for(Iterator<Row> rowiIterator = sheet.rowIterator();rowiIterator.hasNext();){
HSSFRow row = (HSSFRow) rowiIterator.next();
HSSFCell cell = row.getCell(columnIndex);
if(cell!=null){
row.removeCell(cell);
}
for(int i=columnIndex;i<row.getLastCellNum();i++){
HSSFCell cell2= row.getCell(i+1);
if(cell2==null){
continue;
}
row.moveCell(cell2, (short)i);
}
if(maxCellNum<row.getLastCellNum()){
maxCellNum=row.getLastCellNum();
}
}
for(int n= columnIndex;n<maxCellNum;n++){
int width=sheet.getColumnWidth(n+1);
sheet.setColumnWidth(n, width);
}
} else {
int maxCellNum = columnIndex;
for(Iterator<Row> rowiIterator = sheet.rowIterator();rowiIterator.hasNext();){
XSSFRow row = (XSSFRow) rowiIterator.next();
Cell cell = row.getCell(columnIndex);
if(cell!=null){
row.removeCell(cell);
}
for(int i=columnIndex;i<row.getLastCellNum();i++){
Cell cell2= row.getCell(i+1);
if(cell2==null){
continue;
}
String value = getCellvalue(row.getRowNum(), i+1);
setCellvalue(row.getRowNum(), i,value);
setCellStyle(row.getRowNum(), i, cell2.getCellStyle());
row.removeCell(cell2);
}
if(maxCellNum<row.getLastCellNum()){
maxCellNum=row.getLastCellNum();
}
}
for(int n = columnIndex;n<maxCellNum;n++){
int width = sheet.getColumnWidth(n+1);
sheet.setColumnWidth(n, width);
}
}
}
@Override
public void delRow(int rowIndex) {
Row row = sheet.getRow(rowIndex);
sheet.removeRow(row);
sheet.shiftRows(rowIndex+1, sheet.getLastRowNum(), -1, true, false);
}
@Override
public String getCellvalue(int rowIndex, int columnIndex) {
Row row = sheet.getRow(rowIndex);
if(row==null){
return "";
}
Cell cell = row.getCell(columnIndex);
if(cell==null){
return "";
}
cell.setCellType(Cell.CELL_TYPE_STRING);
return cell.getStringCellValue();
}
@Override
public int getColumnNumb(int rowIndex) {
// TODO 自动生成的方法存根
return sheet.getRow(rowIndex).getLastCellNum();
}
/**
* 获取最后行索引
*/
@Override
public int getLastRowIndex() {
return sheet.getLastRowNum();
}
/**
* 按照行读取内容
*/
@Override
public ArrayList<String> getRow(int rowIndex) {
ArrayList<String> al = new ArrayList<String>();
Row row = sheet.getRow(rowIndex);
for(int i=0;i<row.getLastCellNum();i++){
al.add(getCellvalue(rowIndex, i));
}
return al;
}
@Override
public void setRow(int rowIndex,ArrayList<String> al) {
for(int i=0;i<al.size();i++){
setCellvalue(rowIndex, i, al.get(i));
}
}
@Override
public void saveExcel() throws IOException {
// TODO 自动生成的方法存根
OutputStream stream = new FileOutputStream(savePath);
wb.write(stream);
stream.close();
wb.close();
}
@Override
public void setActiveSheet(int sheetIndex) {
sheet=wb.getSheetAt(sheetIndex);
if (sheet==null) {
sheet=wb.createSheet();
}
}
@Override
public void setActiveSheet(String sheetName) {
sheet=wb.getSheet(sheetName);
if (sheet==null) {
sheet=wb.createSheet(sheetName);
}
}
@Override
public void setCellStyle(int rowIndex, int columnIndex, CellStyle cellStyle) {
// TODO 自动生成的方法存根
Row row =sheet.getRow(rowIndex);
if(row==null){
return ;
}
Cell cell =row.getCell(columnIndex);
if(cell==null){
return ;
}
cell.setCellStyle(cellStyle);
}
@Override
public void setCellvalue(int rowIndex, int columnIndex,String value) {
Row row =sheet.getRow(rowIndex);
if(row==null){
row=sheet.createRow(rowIndex);
}
Cell cell =row.createCell(columnIndex);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(value);
}
public static void main(String[] args) throws IOException {
WorkExcel we = new WorkExcel("d:/java/exceltest.xls", "Test1");
// we.delColumn(4);
// we.delRow(1);
we.setCellvalue(1, 1, "2B");
we.setCellvalue(2, 1, "3B");
we.setActiveSheet("Test2");
we.setCellvalue(1, 1, "2B2");
we.setCellvalue(2, 1, "3B2");
we.saveExcel();
}
}
POI之Excel文档增删改查的更多相关文章
- Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查
今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...
- dom4j解析xml文档(增删改查)
package itcast.dom4j; import java.io.File; import java.io.FileOutputStream; import java.io.FileWrite ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- Java之Poi导出Excel文档
一.Poi简介 在后台管理系统中,我们经常要做的导出操作,通常导出为Excel文档的形式,而Poi则提供了这种需要的支持. 二.Workbook/HSSFWorkbook/XSSFWorkbook 1 ...
- POI导出Excel文档通用工具方法
import java.lang.reflect.InvocationTargetException; import java.util.List; import java.util.Map; imp ...
- 模板页显示Excel数据Gridview增删改查
<%@ Page Title="主页" Language="C#" MasterPageFile="~/Site.master" Au ...
- POI 读取Excel文档中的数据——兼容Excel2003和Excel2007
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. HSSF - 提供读写Microsoft Exce ...
- 使用struts2和poi导出excel文档
poi眼下应该是比較流行的操作excel的工具了.这几天做了个struts2和poi结合使用来实现导出excel的功能.个人认为还是比較有用的.代码阅读起来也非常easy.下来就来分享下我的心得 1 ...
- 【Java】常用POI生成Excel文档设置打印样式
package poi_test; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi ...
随机推荐
- [web 安全] xxe
一.探测漏洞 1.是否支持实体解析. 2.是否支持外部实体解析. 2.1 直接读取本地文件: 2.2 远程文件: 3.不回显错误,则用 blind xxe.(先获取本地数据,然后带着本地数据去访问恶意 ...
- JS基础入门篇( 三 )—使用JS获取页面中某个元素的4种方法以及之间的差别( 一 )
1.使用JS获取页面中某个元素的4种方法 1.通过id名获取元素 document.getElementById("id名"); 2.通过class名获取元素 document.g ...
- centos 6.5 安装 subversion
安装subversion需要依赖apr.apr-util.sqlite,下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...
- django 的保护机制
- Dump文件的生成
一.Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件 ...
- __getattr__属性查找
from datetime import date """ __getattr__ : 在查找不到对象的属性时调用 __getattribute__ : 在查找属性之前调 ...
- linux运维、架构之路-linux用户管理
一. linux系统用户分类 1.分类 ①超级用户:root,UID为0 ②普通用户:UID是500-65535的用户 ③虚拟用户:UID在1-499,一般不能登录,满足文件或服务启动的需要,/sbi ...
- BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- ubuntu18.04-安装最新cmake
https://www.linuxidc.com/Linux/2018-09/154165.htm
- 20180826(04)-Java序列化
Java序列化 Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据.有关对象的类型的信息和存储在对象中数据的类型 将序列化对象写入文件之后,可 ...