poi操作Excel中sheet的复制(java版)

poi操作Excel中sheet的复制(java版)
poi操作Excel中sheet的复制(java版)

package https://www.360docs.net/doc/2c13889745.html,bos.utils.exportexcel;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCellStyle;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFFont;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRichTextString;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet;

import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.Region;

import https://www.360docs.net/doc/2c13889745.html,ermodel.Font;

public class CopyExcelSheet{

@SuppressWarnings("deprecation")

public static void main(String[] args) throws FileNotFoundException,

IOException {

String fromPath = "C:\\Users\\Administrator\\Desktop\\quinn\\1.xls";// excel存放路径

String toPath = "C:\\Users\\Administrator\\Desktop\\quinn\\5.xls";// 保存新EXCEL路径

copyExcelSheet(fromPath, toPath);

}

/**

* @Title: 根据文件路径复制sheet

* @Description: 将fromPath文件中的sheet全部复制到toPath中

* @param @param fromPath 源文件全路径

* @param @param toPath 新文件全路径

* @param @throws IOException

* @return 返回类型

* @throws

*/

@SuppressWarnings("deprecation")

public static void copyExcelSheet(String fromPath, String toPath)

throws IOException {

// 创建新的excel

File toFile = new File(toPath);

HSSFWorkbook wbCreat = null;

if (!toFile.isFile()) {

wbCreat = new HSSFWorkbook();//建立新HSSFWorkbook对象

} else {

InputStream out = new FileInputStream(toFile);

wbCreat = new HSSFWorkbook(out);

}

File fromFile = new File(fromPath);

if (fromFile.exists()) {

try {

InputStream in = new FileInputStream(fromFile);

HSSFWorkbook wb = new HSSFWorkbook(in);

for (int ii = 0; ii < wb.getNumberOfSheets(); ii++) {

HSSFSheet sheet = wb.getSheetAt(ii);

if (wbCreat.getSheetIndex(sheet.getSheetName()) >= 0) {

continue;

}

HSSFSheet sheetCreat = wbCreat.createSheet(sheet

.getSheetName());

// 复制源表中的合并单元格

MergerRegion(sheetCreat, sheet);

int firstRow = sheet.getFirstRowNum();

int lastRow = sheet.getLastRowNum();

for (int i = firstRow; i <= lastRow; i++) {

// 创建新建excel Sheet的行

HSSFRow rowCreat = sheetCreat.createRow(i);

// 取得源有excel Sheet的行

HSSFRow row = sheet.getRow(i);

if (row == null)

continue;

// 单元格式样

int firstCell = row.getFirstCellNum();

int lastCell = row.getLastCellNum();

for (int j = firstCell; j < lastCell; j++) {

if (row.getCell(j) == null)

continue;

if (i == 0) {

short width = sheet.getColumnWidth((short) j);

sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));

boolean isHidden=sheet.isColumnHidden(j);

sheetCreat.setColumnHidden(j,isHidden);

}

rowCreat.createCell(j);

// 设置高度

rowCreat.getCell(j).getRow().setHeight(

row.getCell(j).getRow().getHeight());

//复制样式

HSSFCellStyle newStyle = wbCreat.createCellStyle();

HSSFCellStyle oldStely = row.getCell(j).getCellStyle();

newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);

rowCreat.getCell(j).setCellStyle(newStyle);

//复制内容

rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));

}

}

}

FileOutputStream fileOut = new FileOutputStream(toFile);

wbCreat.write(fileOut);

fileOut.flush();

fileOut.close();

in.close();

} catch (RuntimeException e) {

e.printStackTrace();

}

}

};

/**

* @Title: 复制sheet

* @Description: 将fromFile文件中的sheet全部复制到toFile中

* @param @param fromFile .xls源文件

* @param @param toFile .xls新文件

* @param @throws IOException

* @return 返回类型

* @throws

*/

@SuppressWarnings("deprecation")

public static void copyExcelSheet(File fromFile, File toFile)

throws IOException {

// 创建新的excel

HSSFWorkbook wbCreat = null;

if (!toFile.isFile()) {

wbCreat = new HSSFWorkbook();//建立新HSSFWorkbook对象

} else {

InputStream out = new FileInputStream(toFile);

wbCreat = new HSSFWorkbook(out);

}

if (fromFile.exists()) {

try {

InputStream in = new FileInputStream(fromFile);

HSSFWorkbook wb = new HSSFWorkbook(in);

for (int ii = 0; ii < wb.getNumberOfSheets(); ii++) {

HSSFSheet sheet = wb.getSheetAt(ii);

if (wbCreat.getSheetIndex(sheet.getSheetName()) >= 0) {

continue;

}

HSSFSheet sheetCreat = wbCreat.createSheet(sheet

.getSheetName());

// 复制源表中的合并单元格

MergerRegion(sheetCreat, sheet);

int firstRow = sheet.getFirstRowNum();

int lastRow = sheet.getLastRowNum();

for (int i = firstRow; i <= lastRow; i++) {

// 创建新建excel Sheet的行

HSSFRow rowCreat = sheetCreat.createRow(i);

// 取得源有excel Sheet的行

HSSFRow row = sheet.getRow(i);

if (row == null)

continue;

// 单元格式样

int firstCell = row.getFirstCellNum();

int lastCell = row.getLastCellNum();

for (int j = firstCell; j < lastCell; j++) {

if (row.getCell(j) == null)

continue;

if (i == 0) {

short width = sheet.getColumnWidth((short) j);

sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));

boolean isHidden=sheet.isColumnHidden(j);

sheetCreat.setColumnHidden(j,isHidden);

}

rowCreat.createCell(j);

// 设置高度

rowCreat.getCell(j).getRow().setHeight(

row.getCell(j).getRow().getHeight());

//复制样式

HSSFCellStyle newStyle = wbCreat.createCellStyle();

HSSFCellStyle oldStely = row.getCell(j).getCellStyle();

newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);

rowCreat.getCell(j).setCellStyle(newStyle);

//复制内容

rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));

}

}

}

FileOutputStream fileOut = new FileOutputStream(toFile);

wbCreat.write(fileOut);

fileOut.flush();

fileOut.close();

in.close();

} catch (RuntimeException e) {

e.printStackTrace();

}

}

};

/**

* @Title: 复制源文件中的第n个sheet

* @Description: 将fromFile文件中的第n个sheet复制到toFile中

* @param @param fromFile .xls源文件

* @param @param n 源文件中要复制的sheet的序号(从0开始)

* @param @param toFile .xls新文件

* @param @throws IOException

* @return 返回类型

* @throws

*/

@SuppressWarnings("deprecation")

public static void copyExcelSheet(File fromFile,int n, File toFile)

throws IOException {

// 创建新的excel

HSSFWorkbook wbCreat = null;

if (!toFile.isFile()) {

wbCreat = new HSSFWorkbook();//建立新HSSFWorkbook对象

} else {

InputStream out = new FileInputStream(toFile);

wbCreat = new HSSFWorkbook(out);

}

if (fromFile.exists()) {

try {

InputStream in = new FileInputStream(fromFile);

HSSFWorkbook wb = new HSSFWorkbook(in);

if(wb.getNumberOfSheets()>=(n+1)){

HSSFSheet sheet = wb.getSheetAt(n);

String sheetName=sheet.getSheetName();

int x=1;

while(wbCreat.getSheetIndex(sheetName) >= 0){

sheetName+="("+x+")";

}

HSSFSheet sheetCreat = wbCreat.createSheet(sheetName);

// 复制源表中的合并单元格

MergerRegion(sheetCreat, sheet);

int firstRow = sheet.getFirstRowNum();

int lastRow = sheet.getLastRowNum();

for (int i = firstRow; i <= lastRow; i++) {

// 创建新建excel Sheet的行

HSSFRow rowCreat = sheetCreat.createRow(i);

// 取得源有excel Sheet的行

HSSFRow row = sheet.getRow(i);

if (row == null)

continue;

// 单元格式样

int firstCell = row.getFirstCellNum();

int lastCell = row.getLastCellNum();

for (int j = firstCell; j < lastCell; j++) {

if (row.getCell(j) == null)

continue;

if (i == 0) {

short width = sheet.getColumnWidth((short) j);

sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));

boolean isHidden=sheet.isColumnHidden(j);

sheetCreat.setColumnHidden(j,isHidden);

}

rowCreat.createCell(j);

// 设置高度

rowCreat.getCell(j).getRow().setHeight(

row.getCell(j).getRow().getHeight());

//复制样式

HSSFCellStyle newStyle = wbCreat.createCellStyle();

HSSFCellStyle oldStely = row.getCell(j).getCellStyle();

newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);

rowCreat.getCell(j).setCellStyle(newStyle);

//复制内容

rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));

}

}

}

FileOutputStream fileOut = new FileOutputStream(toFile);

wbCreat.write(fileOut);

fileOut.flush();

fileOut.close();

in.close();

} catch (RuntimeException e) {

e.printStackTrace();

}

}

};

/**

* @Title: 复制源文件中的名称为sheetName的sheet

* @Description: 将fromFile文件中的名称为sheetName的sheet复制到toFile中* @param @param fromFile .xls源文件

* @param @param sheetName 源文件中要复制的sheet的名称

* @param @param toFile .xls新文件

* @param @throws IOException

* @return 返回类型

* @throws

*/

@SuppressWarnings("deprecation")

public static void copyExcelSheet(File fromFile,String sheetName, File toFile) throws IOException {

// 创建新的excel

HSSFWorkbook wbCreat = null;

if (!toFile.isFile()) {

wbCreat = new HSSFWorkbook();//建立新HSSFWorkbook对象} else {

InputStream out = new FileInputStream(toFile);

wbCreat = new HSSFWorkbook(out);

}

if (fromFile.exists()) {

try {

InputStream in = new FileInputStream(fromFile);

HSSFWorkbook wb = new HSSFWorkbook(in);

if(wb.getSheetIndex(sheetName)>=0){

HSSFSheet sheet = wb.getSheetAt(wb.getSheetIndex(sheetName));

int x=1;

while(wbCreat.getSheetIndex(sheetName) >= 0){

sheetName+="("+x+")";

}

HSSFSheet sheetCreat = wbCreat.createSheet(sheetName);

// 复制源表中的合并单元格

MergerRegion(sheetCreat, sheet);

int firstRow = sheet.getFirstRowNum();

int lastRow = sheet.getLastRowNum();

for (int i = firstRow; i <= lastRow; i++) {

// 创建新建excel Sheet的行

HSSFRow rowCreat = sheetCreat.createRow(i);

// 取得源有excel Sheet的行

HSSFRow row = sheet.getRow(i);

if (row == null)

continue;

// 单元格式样

int firstCell = row.getFirstCellNum();

int lastCell = row.getLastCellNum();

for (int j = firstCell; j < lastCell; j++) {

if (row.getCell(j) == null)

continue;

if (i == 0) {

short width = sheet.getColumnWidth((short) j);

sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));

boolean isHidden=sheet.isColumnHidden(j);

sheetCreat.setColumnHidden(j,isHidden);

}

rowCreat.createCell(j);

// 设置高度

rowCreat.getCell(j).getRow().setHeight(

row.getCell(j).getRow().getHeight());

//复制样式

HSSFCellStyle newStyle = wbCreat.createCellStyle();

HSSFCellStyle oldStely = row.getCell(j).getCellStyle();

newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);

rowCreat.getCell(j).setCellStyle(newStyle);

//复制内容

rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));

}

}

}

FileOutputStream fileOut = new FileOutputStream(toFile);

wbCreat.write(fileOut);

fileOut.flush();

fileOut.close();

in.close();

} catch (RuntimeException e) {

e.printStackTrace();

}

}

};

private static HSSFRichTextString copyfont(HSSFWorkbook wbCreat,HSSFWorkbook wb,HSSFCell oldCell){

int fromIndex = 0;

int toIndex = 0;

String value = "";

//获取单元格中的数据

HSSFRichTextString rts = (HSSFRichTextString) oldCell.getRichStringCellValue();

//获取每个单元格数据的style属性

HSSFFont fontTemp =oldCell.getCellStyle().getFont(wb);

//处理上下标

if (rts.numFormattingRuns() > 0) {

for (int k = 0; k < rts.numFormattingRuns(); k++) {

toIndex = rts.getIndexOfFormattingRun(k);

String temp = rts.toString().substring(fromIndex, toIndex);

//判断下标

if (fontTemp.getTypeOffset() == HSSFFont.SS_SUB) {

Font font1 = wbCreat.createFont();

font1.setTypeOffset(HSSFFont.SS_SUB);

rts.applyFont(fromIndex, toIndex,font1);

}

//判断上标

if (fontTemp.getTypeOffset() == HSSFFont.SS_SUPER) {

Font font2 = wbCreat.createFont();

font2.setTypeOffset(HSSFFont.SS_SUPER);

rts.applyFont(fromIndex, toIndex,font2);

}

value += temp;

if (!value.equals("")) {

fontTemp = wb.getFontAt(rts.getFontOfFormattingRun(k));

}

fromIndex = toIndex;

}

toIndex = rts.length();

String temp1 = rts.toString().substring(fromIndex, toIndex);

if (fontTemp.getTypeOffset() == HSSFFont.SS_SUB) {

Font font1 = wbCreat.createFont();

font1.setTypeOffset(HSSFFont.SS_SUB);

rts.applyFont(fromIndex, toIndex,font1);

}

if (fontTemp.getTypeOffset() == HSSFFont.SS_SUPER) {

Font font2 = wbCreat.createFont();

font2.setTypeOffset(HSSFFont.SS_SUPER);

rts.applyFont(fromIndex, toIndex,font2);

}

value += temp1;

}

return rts;

}

private static HSSFCellStyle copyStyle(HSSFCellStyle newStyle,HSSFWorkbook wbCreat,HSSFCellStyle oldStely,HSSFWorkbook wb){

newStyle.setAlignment(oldStely.getAlignment());

newStyle.setBorderTop(oldStely.getBorderTop());

newStyle.setBorderBottom(oldStely.getBorderBottom());

newStyle.setBorderLeft(oldStely.getBorderLeft());

newStyle.setBorderRight(oldStely.getBorderRight());

newStyle.setBottomBorderColor(oldStely.getBottomBorderColor());

newStyle.setFillBackgroundColor(oldStely.getFillBackgroundColor());

newStyle.setDataFormat(oldStely.getDataFormat());

newStyle.setFillForegroundColor(oldStely.getFillForegroundColor());

newStyle.setFillPattern(oldStely.getFillPattern());

newStyle.setHidden(oldStely.getHidden());

newStyle.setIndention(oldStely.getIndention());

newStyle.setLeftBorderColor(oldStely.getLeftBorderColor());

newStyle.setLocked(oldStely.getLocked());

newStyle.setRightBorderColor(oldStely.getRightBorderColor());

newStyle.setRotation(oldStely.getRotation());

newStyle.setTopBorderColor(oldStely.getTopBorderColor());

newStyle.setVerticalAlignment(oldStely.getVerticalAlignment());

newStyle.setWrapText(oldStely.getWrapText());

//设置字体

Font newfont = wbCreat.createFont();

HSSFFont font = oldStely.getFont(wb);

newfont.setFontHeightInPoints(font.getFontHeightInPoints());//设置字号

newfont.setFontName(font.getFontName());//设置字体

newfont.setItalic(font.getItalic());//设置是否斜体

newfont.setStrikeout(font.getStrikeout());//设置是否强调

newfont.setBoldweight(font.getBoldweight());

newfont.setFontHeight(font.getFontHeight());

newfont.setCharSet(font.getCharSet());

newfont.setColor(font.getColor());

newfont.setTypeOffset(font.getTypeOffset());

newfont.setUnderline(font.getUnderline());

newStyle.setFont(newfont);

return newStyle;

}

/**

* 复制原有sheet的合并单元格到新创建的sheet

*

* @param sheetCreat

* 新创建sheet

* @param sheet

* 原有的sheet

*/

@SuppressWarnings("deprecation")

private static void MergerRegion(HSSFSheet sheetCreat, HSSFSheet sheet) { int sheetMergerCount = sheet.getNumMergedRegions();

for (int i = 0; i < sheetMergerCount; i++) {

Region mergedRegionAt = sheet.getMergedRegionAt(i);

sheetCreat.addMergedRegion(mergedRegionAt);

}

}

}

POI操作excel内存一直增大解决方法

POI操作Excel POI操作Excel 内存一直增大直至溢出问题主要是针对写入内容操作.xlsx格式 遇到问题: 如果反复操作模板文件往工作表中写入数据会出现文件内存一直增大问题 多次操作的话直至内存溢出。 (1)首先要配置myEclipse ------->run----->run Configurations----->Java Application ----对其下要用到的类进行配置---->Arguments在VM arguments 下写入 -Xms512m -Xmx1048m -XX:PermSize=128m -XX:MaxPermSize=400m -Dcom.sun.management.jmxremote=true 点击apply 然后确定 (2)这里根据能想到的方法进行了多次测试: <1>多次下载数据写入sheet1 每次写入数据之前清空sheet1中的所有行内容,之后再写入新数据即每次操作都是对sheet1的更新;能够清空内容但是内存大小还会一直增大初步认为是内容清空了行所占的占位符还在那表面是空了但是真实的大小还是存在,暂没有解决此问题 示例代码 /*for(int i = 0;;i++){ XSSFRow row = sheet.getRow(i); if(row != null){ sheet.removeRow(row); }else{ break; } }*/ <2>多次下载数据写入sheet1 每次写入前对工作区的工作表进行删除操作,删除sheet1 ,然后在新建sheet1,写入数据,确保每次数据都是最新暂没有解决此问题 示例代码 public void deleteSheet(String targetFile,String sheetName) { try { FileInputStream fis = new FileInputStream(targetFile); HSSFWorkbook wb = new HSSFWorkbook(fis); //删除Sheet wb.removeSheetAt(wb.getSheetIndex(sheetName)); this.fileWrite(targetFile, wb); fis.close(); } catch (Exception e) { e.printStackTrace(); } } //新建 public static void newSheet1(String filePath,String sheetName) throws Exception{ try { System.out.println("然后走的这里新建sheet1+++++++++++++++++++++++++++++"); FileInputStream fis = new FileInputStream(filePath); XSSFWorkbook workbook2003 = new XSSFWorkbook(fis);

poi读写Excel文件

一、Excel基础 二、HSSF概况 三、通过usermodel读取文件 四、通过usermodel写入文件 五、通过eventusermodel读取文件 六、HSSF电子表格结构 七、通过HPSF读取文档属性 八、文档摘要信息 九、附录 ━━━━━━ 正文: ━━━━━━ 在上一篇文章中,我们介绍了POI项目的基本概念,了解了如何用POI来读写OLE 2复合文档结构,并给出了两个简单的例子:用POI来读写Excel文件的Workbook流。本文继续前文的话题,阐述如何用POI来读取/写入完整的Excel文件。 约定:POI项目2.0版现在已经接近正式发行阶段,开发进度迅速,不断有新的功能集成到原有的系统,同时也有对原有系统的修改。为了保证本文的及时性,本文将按照最近的1.9开发版说明。虽然编译最近的发行版源代码也能正常运行,但现在的代码和2.0的发行版会有一些出入。 一、Excel基础 Microsoft Excel 97文件格式也被称为BIFF8,最近版本的Excel只对该格式作了少量的改动。增加对新格式的支持除了增加项目的复杂性之外,唯一的效果也许只是不得不使每个用户升级代码,没有什么实际的好处。因此,在下文说明中,凡是提到Excel 97格式的地方其实都是指Excel从97到XP的格式。 二、HSSF概况 POI项目实现的Excel 97文件格式称为HSSF——也许你已经猜到,HSSF是Horrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”(微软使某些原本简单的事情过分复杂,同时又过分简单地处理了某些原本需要灵活性的事情,让人不胜佩服!)也

POI操作Excel常用方法总结

POI操作Excel常用方法总结 一、POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2003对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 二、HSSF概况 HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三、POI EXCEL文档结构类 HSSFWorkbook excel文档对象 HSSFSheet excel的sheet HSSFRow excel的行 HSSFCell excel的单元格 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式 HSSFDateUtil 日期 HSSFPrintSetup 打印 HSSFErrorConstants 错误信息表 四、EXCEL常用操作方法 1、得到Excel常用对象 POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:\test.xls")); HSSFWorkbook wb = new HSSFWorkbook(fs);//得到Excel工作簿对象 HSSFSheet sheet = wb.getSheetAt(0); //得到Excel工作表对象 HSSFRow row = sheet.getRow(i);//得到Excel工作表的行 HSSFCell cell = row.getCell((short) j);//得到Excel工作表指定行的单元格 cellStyle = cell.getCellStyle();//得到单元格样式 2、建立Excel常用对象 HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象 HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象 HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行 cellStyle = wb.createCellStyle();//创建单元格样式

poi操作excel行自适应高度

import java.text.SimpleDateFormat; import java.util.Date; import https://www.360docs.net/doc/2c13889745.html,ng3.StringUtils; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFDataFormat; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFDateUtil; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import https://www.360docs.net/doc/2c13889745.html,ermodel.Cell; import org.apache.poi.ss.util.CellRangeAddress; /** * excel行自适应高度 * @author lw * @version 2019年8月27日下午1:59:27 */ public class AutoRowHeightUtil { /** * 自适应excel行高 * @author lw * @date 2019年8月27日上午10:27:33 * @param cell 列 * @param margin 字体边距 */ public static void autoRowHeight(HSSFCell cell, short margin) { if(cell == null) { return ; } String cellVal = getStringCellValue(cell) ; if(StringUtils.isBlank(cellVal)) { return ;

Java用poi读取excel文件

Java用poi读取excel文件 POI 是Apache的一个开源的工具包,可以在Apache的官网下载到jar包。如下为简单示例: package POI; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ReadExcel { public static void main(String[] args) { try { InputStream input = new FileInputStream("D:\\test.xls"); POIFSFileSystem fs = new POIFSFileSystem(input); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0); // Iterate over each row in the sheet Iterator rows = sheet.rowIterator();

POI设置EXCEL单元格格式的操作小结

POI中可能会用到一些需要设置EXCEL单元格格式的操作小结: 先获取工作薄对象: Java代码 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb.createCellStyle(); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); HSSFCellStyle setBorder = wb.createCellStyle(); 一、设置背景色: Java代码 setBorder.setFillForegroundColor((short) 13);// 设置背景色setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); setBorder.setFillForegroundColor((short) 13);// 设置背景色setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 二、设置边框: Java代码 setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 三、设置居中: Java代码 setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

java的POI操作Excel文件

java的POI操作Excel文件(2) 现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。 1、设置分页符的bug POI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。 Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。 解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。 如果sheet是由POI生成的则没有这个问题。我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。 2、如何拷贝行 我在https://www.360docs.net/doc/2c13889745.html,的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写: //注:this.fWorkbook是一个HSSHWorkbook,请自行在外部new public void copyRows (String pSourceSheetName, String pTargetSheetName, int pStartRow, int pEndRow, int pPosition) { HSSFRow sourceRow = null; HSSFRow targetRow = null; HSSFCell sourceCell = null; HSSFCell targetCell = null; HSSFSheet sourceSheet = null; HSSFSheet targetSheet = null; Region region = null; int cType; int i; short j; int targetRowFrom; int targetRowTo;

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法 最近单位有个项目需要读取excel文件的内容,特别对java读取excel文件的方法做了一点学习,也为了其他人以后能更简单地开发,少走弯路,特写此文,以下程序经过了我的测试,可以保证程序可用,如果你照搬都不行,可能是你的环境有问题。 读取excel文件的常用开源免费方法有以下几种: JDBC-ODBC Excel Driver jxl.jar jcom.jar poi.jar 下面分别对这几种方法分别进行探讨 1、JDBC-ODBC Excel Driver 这种方法是将excel看成是数据库进行操作,使用SQL Select语句即可 查询excel表格。优点是:不需要第三方的jar包。 如下表样 首先在控制面板进行数据源ODBC登记 具体方法如下:

下面就是代码了。 package xuzhe;

import java.io.*; import java.sql.*; //java xuzhe.ExcelJDBC public class ExcelJDBC { public static void main(String[] args) throws SQLException{ Connection con = null; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection( "jdbc:odbc:ExcelJDBC" ); Statement st = con.createStatement(); ResultSet rs = st.executeQuery( "Select * from [Sheet1$]" ); ResultSetMetaData rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); System.out.println ("表格列数"+numberOfColumns ); System.out.println( rsmd.getColumnName(1)+ "," + rsmd.getColumnName(2) + "," + rsmd.getColumnName(3)); while (rs.next()) { for (int i = 1; i <= numberOfColumns; i++) { if (i > 1) System.out.print(", "); String columnValue = rs.getString(i); System.out.print(columnValue); } System.out.println(""); } rs.close(); st.close(); } catch(Exception ex) { System.err.print("Exception: "); System.err.println(ex.getMessage()); } finally { con.close(); } } } 执行结果如下:

poi读取excel并输出到jsp页面

代码来源于网络,只做了部分修改,我也是刚用到很多都不懂,找了一些例子之类的自己用,有些不错的分享给大家,仅供参考。 下面这个是用servlet做(注意web.xml );其实原理一样;源码如下 readExcelServlet.java package com.test.servlet; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFDateUtil; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * author:wx * describe:Reads the Excel example * */ public class readExcelServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; /** * * Constructor of the object. */ public readExcelServlet() { super(); } /** * Destruction of the servlet.
* */ public void destroy() { super.destroy(); }// Just puts "destroy" string in log // Put your code here /** * doGet */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

poi读取excel,包含所有excel版本,兼容excel2003和2007以上版本

package com.excel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import https://www.360docs.net/doc/2c13889745.html,ermodel.Cell; import https://www.360docs.net/doc/2c13889745.html,ermodel.DateUtil; import https://www.360docs.net/doc/2c13889745.html,ermodel.Row; import https://www.360docs.net/doc/2c13889745.html,ermodel.Sheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.Workbook; import https://www.360docs.net/doc/2c13889745.html,ermodel.WorkbookFactory; import https://www.360docs.net/doc/2c13889745.html,ermodel.XSSFWorkbook; import org.apache.xmlbeans.impl.piccolo.io.FileFormatException; /** * 读取EXCEL内容 * @author lxr * */ public class TestReadExcelAll { private static final String EXTENSION_XLS = "xls"; private static final String EXTENSION_XLSX = "xlsx"; /** * 判断EXCEL版本 * @param in * @param filename * @return * @throws IOException */ public static Workbook getWorkbook(InputStream in,String filename)throws IOException {

poi读写excel案例

Java-Excel 报表开发 POI (2009-02-19 21:44:10) 转载▼ 分类:java 标签: java 杂谈 开发环境为windowsXP-SP2,Eclipse3.2,JDK1.5.07,其实差不多都行,不会有太大的差异。本文从POI 下载开始讲解,前提是开发环境包括系统变量等等已经正确设置完毕。 1.POI的下载 截至本文发表,POI最新版本是3.0.1,距离上一个Final版本有3年了吧,以至于我差点儿就把他放弃了——以为没人管了。官方的公告讲,这一版主要是追加了一些新的特性和BUG修正,不过稍微有点儿遗憾的是,还不能很好的操作Excel2007。 POI官方网址: https://www.360docs.net/doc/2c13889745.html,/ JAR包下载: https://www.360docs.net/doc/2c13889745.html,/poi/release/bin/poi-bin-3.0.1-FINAL-20070705.zip 源码下载: https://www.360docs.net/doc/2c13889745.html,/poi/release/src/poi-src-3.0.1-FINAL-20070705.zip 下载上面的JAR和源码(源码不是必须的,但是为了早日修得正果,深入系统的看看POI代码还是有必要的)并解压待用。 2.用Eclipse搭建项目 打开Eclipse 依次点击File->New->Java Project 输入项目名称,本例中设置为POI 单击完成 在项目上点击右键->New->Folder 输入文件夹名称lib 把刚才解压的poi-3.0.1-FINAL-20070705.jar复制过来 右键点击项目,选择Properties 在左侧列表里选中Java Build Path,右侧选中Libraries 点击Add JARs,选择POI项目的lib下的所有文件 两次OK确认,回到Eclipse界面 小技巧,快捷操作:可以用鼠标左键选中poi-3.0.1-FINAL-20070705.jar但不松开,拖到任务栏的Eclipse 图标上等候1秒左右,Eclipse会自动弹起来,依然不松开移动到lib文件夹上,这个时候鼠标后面跟个十

poi操作Excel中sheet的复制(java版)

package https://www.360docs.net/doc/2c13889745.html,bos.utils.exportexcel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCellStyle; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFFont; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRichTextString; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import org.apache.poi.hssf.util.Region; import https://www.360docs.net/doc/2c13889745.html,ermodel.Font; public class CopyExcelSheet{ @SuppressWarnings("deprecation") public static void main(String[] args) throws FileNotFoundException, IOException { String fromPath = "C:\\Users\\Administrator\\Desktop\\quinn\\1.xls";// excel存放路径 String toPath = "C:\\Users\\Administrator\\Desktop\\quinn\\5.xls";// 保存新EXCEL路径 copyExcelSheet(fromPath, toPath); } /** * @Title: 根据文件路径复制sheet * @Description: 将fromPath文件中的sheet全部复制到toPath中 * @param @param fromPath 源文件全路径 * @param @param toPath 新文件全路径 * @param @throws IOException * @return 返回类型 * @throws */ @SuppressWarnings("deprecation") public static void copyExcelSheet(String fromPath, String toPath) throws IOException { // 创建新的excel File toFile = new File(toPath); HSSFWorkbook wbCreat = null;

Java使用POI操作Excel并创建下拉框

Java使用POI操作Excel并创建下拉框Java代码 package poiexcel; import java.io.FileOutputStream; import java.util.Date; import https://www.360docs.net/doc/2c13889745.html,ermodel.DVConstraint; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFDataValidation; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet; import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddressList; public class POI { public static void main(String [] args) { String [] list={"东软","华信","SAP","海辉"}; new POI().createListBox(list); return; } public void createListBox (String [] list) {

//文件初始化 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); //在第一行第一个单元格,插入下拉框 HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell(0); //普通写入操作 cell.setCellValue("请选择");//这是实验 //生成下拉列表 //只对(0,0)单元格有效 CellRangeAddressList regions = new CellRangeAddressList(0,0,0,0); //生成下拉框内容 DVConstraint constraint = DVConstraint.createExplicitListConstraint(list); //绑定下拉框和作用区域 HSSFDataValidation data_validation = new HSSFDataValidation(regions,constraint); //对sheet页生效 sheet.addValidationData(data_validation); //写入文件 FileOutputStream fileOut; try { fileOut = new FileOutputStream("workbook.xls"); wb.write(fileOut);

POI 操作excel_wd总结

使用POI操作EXCEL 注:action中,首先应该设置字符集: //设置字符集 response.setContentType("application/vnd.ms-excel;charset=GB2312"); 一、生成excel文件: OutputStream outStream=response.getOutputStream();//获取文件输出流 HSSFWorkbook wb = new HSSFWorkbook(); //声明一个工作薄 HSSFSheet sheet = wb.createSheet(); //生成一个工作表 wb.setSheetName(0, "第1页"); //为第一个工作表取名字 HSSFCellStyle normalStyle = 样式方法名(wb);// 设置样式 HSSFRow row = sheet.createRow(0); //创建第一行 row.setHeightInPoints(20); //设置行高 HSSFCell cell = row.createCell(0); //创建第一行的第一列 cell.setCellValue("第一列的值"); //为第一列赋值 cell.setCellStyle(normalStyle); //设置单元格的样式 cell.setCellFormula(string);//给单元格设公式 sheet.addMergedRegion(new CellRangeAddress(1,3,(short)1, (short)1)); //跨行(列):firstRow,lastRow,firstCol,lastCol wb.write(outStream); //将文档对象写入文件输出流 outStream.close(); //关闭文件输出流 二、设置各种样式: A.基本样式: //生成一个样式 HSSFCellStyle style = wb.createCellStyle(); //设置背景颜色

Java读写Excel之POI入门

Java读写Excel之POI入门 Apache POI 是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。 如果处理.xlsx、docx、pptx的话可以试试Docx4j 。 ?HSSF -提供读写Microsoft Excel XLS格式档案的功能。 ?XSSF -提供读写Microsoft Excel OOXML XLSX格式档案的功能。 ?HWPF -提供读写Microsoft Word DOC格式档案的功能。 ?HSLF -提供读写Microsoft PowerPoint格式档案的功能。 ?HDGF -提供读Microsoft Visio格式档案的功能。 ?HPBF -提供读Microsoft Publisher格式档案的功能。 ?HSMF -提供读Microsoft Outlook格式档案的功能。 版本:poi-3.8-20120326.jar 1、生成Workbook Java代码

2、生成Workbook OOXML形式(.xlsx) Java代码 3、打开Workbook Java代码

使用POI读取excel文件内容

使用POI读取excel文件内容 package edu.sjtu.erplab.poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFCell;import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFDateUtil;import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFRow;import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFSheet;import https://www.360docs.net/doc/2c13889745.html,ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/** * 操作Excel表格的功能类*/public class ExcelReader { private POIFSFileSystem fs; private HSSFWorkbook wb; private HSSFSheet sheet; private HSSFRow row; /** * 读取Excel表格表头的内容* @param InputStream * @return String 表头内容的数组*/ public String[] readExcelTitle(InputStream is) { try { fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(fs); } catch (IOException e)

POI操作excel大全

POI操作excel大全 第一讲:基本的Excel读写本文主要演示一下POI的基本操作,例如怎样读取和创建一个具体的Excel文件。按照惯例,拿HelloWorld说事儿。 说明:本文主要内容皆包含于官方帮助手册,之所以要拿出来,出于两个原因,手册是英文的+手册是对应 2.5.1的。 核心代码如下,注释部分为讲解。 这里只挑干的讲,完整的代码请参考(下载代码)。 //创建一个空白的WorkBook HSSFWorkbook wb = new HSSFWorkbook(); //基于上面的WorkBook创建属于此WorkBook 的Sheet, // 3.0.1版在使用全角Sheet名的时候不必再setEncdoing了,个人感觉方便了许多。H SSFSheet st = wb.createSheet(“测试页“); //创建属于上面Sheet的Row,参数0可以是0~65535之间的任何一个, //注意,尽管参数是Int类型,但是Excel最多支持65536行 HSSFRow row = st.createRow(0); //创建属于上面Row的Cell,参数0可以是0~255之间的任何一个, //同样,是因为Excel最大支持的列数为256列 HSSFCell cell = row.createCell((short)

0); //设置此单元格的格式为文本,此句可以省略,Excel会自动识别。 //其他还有几种常用的格式,请参考本文底部的补充部分。c ell.setCellType(HSSFCell.CELL_TYPE_STRING); //此处是 3.0.1版的改进之处,上一版可以直接 setCellValue(“Hello, World!“), //但是在 3.0.1里,被deprecated了。c ell.setCellValue(new HSSFRichTextString(“Hello, World!“)); //创建一个文件输出流,指定到C盘根目录下(C盘都有吧?) //xls是Excel97-2003的标准扩展名,xx是xlsx,目前的POI能直接生产的还是xls格式, //如果此处把扩展名改成xlsx,在用Excelxx打开此文件时会报错。F ileOutputStream writeFile = new FileOutputStream(“c:/helloworld.xls“); //把WorkBook写到流里 wb.write(writeFile); //记得手动关闭流,官方文档已经做了特别说明,说POI不负责关闭用户打开的流。所以. writeFile.close(); 上面就是创建一个新文档的简易代码,下面的例子是读取刚才创建的Excel并把读取到的内容显示在控制台上。 //指定要读取的文件,本例使用上面生成的helloworld.xls FileInputStream readFile = new FileInputStream(“c:/helloworld.xls“); //创建一个WorkBook,从指定的文件流中创建,即上面指定了的文件流

相关主题
相关文档
最新文档