当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

poi操作Excel, 各种具体操作和解释

发表于: 2015-07-01   作者:zengshaotao   来源:转载   浏览:
摘要: java读取excel文件的顺序是: Excel文件->工作表->行->单元格 对应到POI中,为:workbook->sheet->row->cell 注意: 注意:      1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束 

java读取excel文件的顺序是: 
Excel文件->工作表->行->单元格 对应到POI中,为:workbook->sheet->row->cell 
注意: 
注意:   
   1.sheet, 以0开始,以workbook.getNumberOfSheets()-1结束 
   2.row, 以0开始(getFirstRowNum),以getLastRowNum结束 
   3.cell, 以0开始(getFirstCellNum),以getLastCellNum结束, 
     结束的数目不知什么原因与显示的长度不同,可能会偏长 

 

//import org.apache.poi.ss.usermodel.contrib.CellUtil;

//import org.apache.poi.ss.usermodel.contrib.RegionUtil;

这两个类已更换到 这两个类移动是3.7开始变的

//import org.apache.poi.ss.util.CellUtil;

 

//import org.apache.poi.ss.util.RegionUtil;

package com.svse.test;

 

 

import java.awt.Color;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Calendar;

import java.util.Date;

 

 

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFClientAnchor;

import org.apache.poi.hssf.usermodel.HSSFFooter;

import org.apache.poi.hssf.usermodel.HSSFPatriarch;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;

import org.apache.poi.hssf.usermodel.HSSFShape;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFSimpleShape;

import org.apache.poi.hssf.usermodel.HSSFTextbox;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

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

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.ClientAnchor;

import org.apache.poi.ss.usermodel.CreationHelper;

import org.apache.poi.ss.usermodel.DataFormat;

import org.apache.poi.ss.usermodel.DateUtil;

import org.apache.poi.ss.usermodel.Drawing;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.IndexedColors;

import org.apache.poi.ss.usermodel.Picture;

import org.apache.poi.ss.usermodel.PrintSetup;

import org.apache.poi.ss.usermodel.RichTextString;

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.usermodel.WorkbookFactory;

//import org.apache.poi.ss.usermodel.contrib.CellUtil;

//import org.apache.poi.ss.usermodel.contrib.RegionUtil;

import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.ss.util.CellReference;

import org.apache.poi.ss.util.CellUtil;

import org.apache.poi.ss.util.RegionUtil;

import org.apache.poi.util.IOUtils;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.junit.BeforeClass;

import org.junit.Test;

 

 

/**

 * @author WESTDREAM

 * @since 2010-8-7 下午10:34:03

 */

public class POIExcelTest {

 

 

/**

* @throws java.lang.Exception

*/

public static final String XLS_WORKBOOK_LOCATION = "D:/workbook.xls";

public static final String XLS_OR_XLSX_DIR = "D:/";

public static final String XLSX_WORKBOOK_LOCATION = "D:/workbook.xlsx";

public static final String IMAGE_LOCATION = "book.jpg";

 

 

@BeforeClass

public static void setUpBeforeClass() throws Exception {

 

 

}

 

 

@Test

public void testWriteExcel() {

// ## 重复利用 的对象 ##//

Workbook wb = null;

FileOutputStream fileOut = null;

CellStyle cellStyle = null;

Cell cell = null;

Font font = null;

 

 

/**

* EXCEL早期版本

*/

try {

// ## 创建早期EXCEL的Workbook ##//

wb = new HSSFWorkbook();

// ## 获取HSSF和XSSF的辅助类 ##//

CreationHelper createHelper = wb.getCreationHelper();

// ## 创建一个名为“New Sheet”的Sheet ##//

Sheet sheet = wb.createSheet("New Sheet");

 

 

/** 第一行 --- CELL创建,数据填充及日期格式 **/

Row row1 = sheet.createRow(0);

// Cell cell = row.createCell(0);

// cell.setCellValue(1);

 

 

// ## 在相应的位置填充数据 ##//

row1.createCell(0).setCellValue(1);

row1.createCell(1).setCellValue(1.2);

row1.createCell(2).setCellValue(

createHelper.createRichTextString("CreationHelper---字符串"));

row1.createCell(3).setCellValue(true);

 

 

// ## 填充日期类型的数据---未设置Cell Style ##//

row1.createCell(4).setCellValue(new Date());

// ## 填充日期类型的数据---已设置Cell Style ##//

cellStyle = wb.createCellStyle();

cellStyle.setDataFormat(createHelper.createDataFormat().getFormat(

"yyyy年MM月dd日 hh:mm:ss"));

// cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("mm/dd/yyyy h:mm"));

cellStyle.setDataFormat(createHelper.createDataFormat().getFormat(

"yyyy-MM-dd hh:mm:ss"));

cell = row1.createCell(5);

cell.setCellValue(new Date());

cell.setCellStyle(cellStyle);

// ## 另一种创建日期的方法 ##//

/*

* cell = row1.createCell(6);

* cell.setCellValue(Calendar.getInstance());

* cell.setCellStyle(cellStyle);

*/

 

 

/** 第二行 --- 数据类型 **/

Row row2 = sheet.createRow(1);

row2.createCell(0).setCellValue(1.1);

row2.createCell(1).setCellValue(new Date());

row2.createCell(2).setCellValue(Calendar.getInstance());

row2.createCell(3).setCellValue("字符串");

row2.createCell(4).setCellValue(true);

// ## 错误的CELL数据格式 ##//

row2.createCell(5).setCellType(HSSFCell.CELL_TYPE_ERROR);

 

 

/** 第三行 --- CELL的各种对齐方式 **/

Row row3 = sheet.createRow(2);

row3.setHeightInPoints(30);

// ## 水平居中,底端对齐 ##//

createCell(wb, row3, (short) 0, XSSFCellStyle.ALIGN_CENTER,

XSSFCellStyle.VERTICAL_BOTTOM);

// ## 水平居中,垂直居中 ##//

createCell(wb, row3, (short) 1,

XSSFCellStyle.ALIGN_CENTER_SELECTION,

XSSFCellStyle.VERTICAL_BOTTOM);

// ## 填充 ,垂直居中 ##//

createCell(wb, row3, (short) 2, XSSFCellStyle.ALIGN_FILL,

XSSFCellStyle.VERTICAL_CENTER);

// ## 左对齐,垂直居中 ##//

createCell(wb, row3, (short) 3, XSSFCellStyle.ALIGN_GENERAL,

XSSFCellStyle.VERTICAL_CENTER);

// ## 左对齐,顶端对齐 ##//

createCell(wb, row3, (short) 4, XSSFCellStyle.ALIGN_JUSTIFY,

XSSFCellStyle.VERTICAL_JUSTIFY);

// ## 左对齐,顶端对齐 ##//

createCell(wb, row3, (short) 5, XSSFCellStyle.ALIGN_LEFT,

XSSFCellStyle.VERTICAL_TOP);

// ## 右对齐,顶端对齐 ##//

createCell(wb, row3, (short) 6, XSSFCellStyle.ALIGN_RIGHT,

XSSFCellStyle.VERTICAL_TOP);

 

 

/** 第四行 --- CELL边框 **/

Row row4 = sheet.createRow(3);

cell = row4.createCell(1);

cell.setCellValue(4);

cellStyle = wb.createCellStyle();

// ## 设置底部边框为THIN ##//

cellStyle.setBorderBottom(CellStyle.BORDER_THIN);

// ## 设置底部边框颜色为黑色 ##//

cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());

// ## 设置左边边框为THIN ##//

cellStyle.setBorderLeft(CellStyle.BORDER_THIN);

// ## 设置左边边框颜色为红色 ##//

cellStyle.setLeftBorderColor(IndexedColors.RED.getIndex());

// ## 设置右边边框为THIN ##//

cellStyle.setBorderRight(CellStyle.BORDER_THIN);

// ## 设置右边边框颜色为蓝色 ##//

cellStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());

// ## 设置顶部边框为MEDIUM DASHED ##//

cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);

// ## 设置顶部边框颜色为黑色 ##//

cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());

cell.setCellStyle(cellStyle);

 

 

/** 第五行 --- 填充与颜色 **/

Row row5 = sheet.createRow((short) 4);

// ## Aqua背景 ##//

cellStyle = wb.createCellStyle();

cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex());

// ## 设置填充模式为BIG SPOTS ##//

cellStyle.setFillPattern(CellStyle.BIG_SPOTS);

cell = row5.createCell((short) 1);

cell.setCellValue("Aqua背景");

cell.setCellStyle(cellStyle);

 

 

// ## 橙色前景色(相对 于CELL背景) ##//

cellStyle = wb.createCellStyle();

cellStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex());

// ## 设置填充模式为SOLID FOREGROUND ##//

cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

cell = row5.createCell((short) 2);

cell.setCellValue("橙色前景色");

cell.setCellStyle(cellStyle);

 

 

/** 第六行 --- 合并单元格 **/

Row row6 = sheet.createRow((short) 5);

cell = row6.createCell((short) 4);

cell.setCellValue("合并单元格测试");

// ## Wrong:EXCEL 2007中打开workbook.xls文件看不到"合并单元格测试",但单元格已经合并了 ##//

/*

* sheet.addMergedRegion(new CellRangeAddress( 3, //first row

* (0-based) 5, //last row (0-based) 4, //first column (0-based) 6

* //last column (0-based) ));

*/

// ## 正确合并单元格 注意:与上不同的是first row=last row ##//

sheet.addMergedRegion(new CellRangeAddress(5, // first row (0-based)

5, // last row (0-based)

4, // first column (0-based)

6// last column (0-based)

));

 

 

/** 第七行 --- 字体 **/

Row row7 = sheet.createRow(6);

// ## 创建字体 ##//

// 注意:POI限制一个Workbook创建的Font对象最多为32767,所以不要为每个CELL创建一个字体,建议重用字体

font = wb.createFont();

// ## 设置字体大小为24 ##//

font.setFontHeightInPoints((short) 24);

// ## 设置字体样式为华文隶书 ##//

font.setFontName("华文隶书");

// ## 斜体 ##//

font.setItalic(true);

// ## 添加删除线 ##//

font.setStrikeout(true);

// ## 将字体添加到样式中 ##//

cellStyle = wb.createCellStyle();

cellStyle.setFont(font);

cell = row7.createCell(1);

cell.setCellValue("字体测试");

cell.setCellStyle(cellStyle);

 

 

/** 第八行 --- 自定义颜色 **/

Row row8 = sheet.createRow(7);

cell = row8.createCell(0);

cell.setCellValue("自定义颜色测试");

cellStyle = wb.createCellStyle();

// ## 设置填充前景色为LIME ##//

cellStyle.setFillForegroundColor(HSSFColor.LIME.index);

// ## 设置填充模式为SOLID FOREGROUND ##//

cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);

font = wb.createFont();

// ## 设置字体颜色为红色 ##//

font.setColor(HSSFColor.RED.index);

cellStyle.setFont(font);

cell.setCellStyle(cellStyle);

 

 

/*

* cell.setCellValue("自定义颜色测试Palette"); //creating a custom palette

* for the workbook HSSFPalette palette =

* ((HSSFWorkbook)wb).getCustomPalette(); //replacing the standard

* red with freebsd.org red

* palette.setColorAtIndex(HSSFColor.RED.index, (byte) 153, //RGB

* red (0-255) (byte) 0, //RGB green (byte) 0 //RGB blue );

* //replacing lime with freebsd.org gold

* palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte)

* 204, (byte) 102);

*/

 

 

/** 第九行 --- 换行 **/

Row row9 = sheet.createRow(8);

cell = row9.createCell(2);

cell.setCellValue("使用 /n及Word-wrap创建一个新行");

cellStyle = wb.createCellStyle();

// ## 设置WrapText为true ##//

cellStyle.setWrapText(true);

cell.setCellStyle(cellStyle);

// ## 设置行的高度以适应新行 ---两行##//

row9.setHeightInPoints((2 * sheet.getDefaultRowHeightInPoints()));

// ## 调整列宽 ##//

sheet.autoSizeColumn(2);

 

 

/** 第十行 --- 数据格式 **/

DataFormat format = wb.createDataFormat();

 

 

Row row10 = sheet.createRow(9);

cell = row10.createCell(0);

cell.setCellValue(11111.25);

cellStyle = wb.createCellStyle();

// ## 一位小数 ##//

cellStyle.setDataFormat(format.getFormat("0.0"));

cell.setCellStyle(cellStyle);

 

 

cell = row10.createCell(1);

cell.setCellValue(11111.25);

cellStyle = wb.createCellStyle();

// ## 四位小数,千位逗号隔开 ##//

// #,###.0000效果一样

cellStyle.setDataFormat(format.getFormat("#,##0.0000"));

cell.setCellStyle(cellStyle);

 

 

// ## 将文件写到硬盘上 ##//

fileOut = new FileOutputStream(XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

/**

* EXCEL 2007及以后

*/

/*

* try { wb = new XSSFWorkbook(); wb.createSheet("sheet1"); Cell cell =

* row.createCell( 0); cell.setCellValue("custom XSSF colors");

* CellStyle style1 = wb.createCellStyle();

* style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128,

* 0, 128))); style1.setFillPattern(CellStyle.SOLID_FOREGROUND); fileOut

* = new FileOutputStream("d:/workbook.xlsx"); wb.write(fileOut);

* fileOut.close(); } catch (FileNotFoundException e) {

* e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

*/

 

 

}

 

 

/**

* 创建相应格式的CELL

*/

public void createCell(Workbook wb, Row row, short column, short halign,

short valign) {

Cell cell = row.createCell(column);

// ## 给CELL赋值 ##//

cell.setCellValue("对齐排列");

CellStyle cellStyle = wb.createCellStyle();

// ## 设置水平对齐方式 ##//

cellStyle.setAlignment(halign);

// ## 设置垂直对齐方式 ##//

cellStyle.setVerticalAlignment(valign);

// ## 添加CELL样式 ##//

cell.setCellStyle(cellStyle);

}

 

 

/**

* 测试POI EXCEL迭代和或CELL中的值

*/

@Test

public void testExcelIteratorAndCellContents() {

try {

// ## 创建HSSFWorkbook实例 ##//

Workbook wb = new HSSFWorkbook(new FileInputStream(

XLS_WORKBOOK_LOCATION));

// ## 获得第一个SHEET ##//

Sheet sheet = wb.getSheetAt(0); // or we could cast into

// HSSFSheet,that doesn't matter

/** 第一种迭代方法 **/

/*

* //## 迭代ROW ##// for (Iterator<Row> rit = sheet.rowIterator();

* rit.hasNext(); ) { Row row = rit.next(); //## 迭代CELL ##// for

* (Iterator<Cell> cit = row.cellIterator(); cit.hasNext(); ) { Cell

* cell = cit.next(); System.out.println(cell); } }

*/

/** 第二种迭代方法 **/

for (Row row : sheet) {

for (Cell cell : row) {

// ## 获取CellReference对象 ##/

CellReference cellRef = new CellReference(row.getRowNum(),

cell.getColumnIndex());

System.out.print(cellRef.formatAsString());

System.out.print(" - ");

// ## 根据CELL值类型进行相应处理 ##/

switch (cell.getCellType()) {

case Cell.CELL_TYPE_STRING:

System.out.println(cell.getRichStringCellValue()

.getString());

break;

case Cell.CELL_TYPE_NUMERIC:

// ## yyyy年mm月dd日 hh:mm:ss此种格式日期不能识别 ##//

// ## mm/dd/yyyy h:mm,yyyy-MM-dd

// hh:mm:ss可以识别,估计是POI对中文日期支持不怎么好的问题 ##//

if (DateUtil.isCellDateFormatted(cell)) {

System.out.println(cell.getDateCellValue());

} else {

System.out.println(cell.getNumericCellValue());

}

break;

case Cell.CELL_TYPE_BOOLEAN:

System.out.println(cell.getBooleanCellValue());

break;

case Cell.CELL_TYPE_FORMULA:

System.out.println(cell.getCellFormula());

break;

case Cell.CELL_TYPE_ERROR:

System.out.println(cell.getErrorCellValue());

break;

default:

System.out.println();

}

}

}

 

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

/**

* 修改文件测试

*/

@Test

public void testReadingAndRewritingWorkbooks() {

InputStream inp = null;

try {

inp = new FileInputStream(XLS_WORKBOOK_LOCATION);

// inp = new FileInputStream("workbook.xlsx");

// ## 获得要修改的Workbook ##/

Workbook wb = WorkbookFactory.create(inp);

// ## 获取要修改的Sheet ##//

Sheet sheet = wb.getSheetAt(0);

// ## 获取要修改的Row ##//

Row row = sheet.getRow(1);

// ## 获取要修改的Cell,如果没有相应位置的Cell那么就创建一个 ##//

Cell cell = row.getCell(2);

if (cell == null)

cell = row.createCell(2);

// ## 写入修改数据 ##//

cell.setCellType(Cell.CELL_TYPE_STRING);

cell.setCellValue("修改文件测试");

 

 

// ## 将文件写到硬盘上 ##//

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (InvalidFormatException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

/**

* 暂时没看到有什么区别

*/

@Test

public void testFitSheetToOnePage() {

try {

Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("format sheet");

PrintSetup ps = sheet.getPrintSetup();

 

 

sheet.setAutobreaks(true);

 

 

ps.setFitHeight((short) 1);

ps.setFitWidth((short) 1);

// Create various cells and rows for spreadsheet.

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (Exception e) {

e.printStackTrace();

}

}

 

 

/**

* 设置打印区域测试

*/

@Test

public void testSetPrintArea() {

/**

* 注意:我测试的时候用的是EXCEL 2007打开的,效果不明显,只能控制列且列好像也是不正确的。 但是我用EXCEL

* 2007转换了一下,xls,xlsx的都正确了,目前还不知道是什么问题。

*/

try {

Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("Print Area Sheet");

Row row = sheet.createRow(0);

row.createCell(0).setCellValue("第一个单元格");

row.createCell(1).setCellValue("第二个单元格");

row.createCell(2).setCellValue("第三个单元格");

row = sheet.createRow(1);

row.createCell(0).setCellValue("第四个单元格");

row.createCell(1).setCellValue("第五个单元格");

row = sheet.createRow(2);

row.createCell(0).setCellValue("第六个单元格");

row.createCell(1).setCellValue("第七个单元格");

// ## 设置打印区域 A1--C2 ##//

// wb.setPrintArea(0, "$A$1:$C$2");

// ## 或者使用以下方法设置 ##//

wb.setPrintArea(0, // Sheet页

0, // 开始列

2, // 结束列

0, // 开始行

1// 结束行

);

 

 

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

}

 

 

/**

* 设置页脚测试 用“页面布局”可以看到效果 下列代码只适用xls

*/

@Test

public void testSetPageNumbersOnFooter() {

try {

HSSFWorkbook wb = new HSSFWorkbook();

HSSFSheet sheet = wb.createSheet("Footer Test");

// ## 获得页脚 ##/

HSSFFooter footer = sheet.getFooter();

Row row;

// ## 将 当前页/总页数 写在右边 ##/

footer.setRight(HSSFFooter.page() + "/" + HSSFFooter.numPages());

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

row = sheet.createRow(i);

for (int j = 0; j < 20; j++) {

row.createCell(j).setCellValue("A" + i + j);

}

}

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

}

 

 

/**

* 测试一些POI提供的比较方便的函数 文档中有些以HSSF为前缀的类的方法以过时(e.g: HSSFSheet, HSSFCell etc.),

* 测试的时候我去掉了HSSF前缀,当然也就是现在POI推荐的接口(Sheet,Row,Cell etc.)

*/

@Test

public void testConvenienceFunctions() {

try {

Workbook wb = new HSSFWorkbook();

Sheet sheet1 = wb.createSheet("Convenience Functions");

// ## 设置Sheet的显示比例 这里是3/4,也就是 75% ##//

sheet1.setZoom(3, 4);

// ## 合并单元格 ##//

Row row = sheet1.createRow((short) 1);

Row row2 = sheet1.createRow((short) 2);

Cell cell = row.createCell((short) 1);

cell.setCellValue("合并单元格测试");

// ## 创建合并区域 ##//

CellRangeAddress region = new CellRangeAddress(1, (short) 1, 4,

(short) 4);

sheet1.addMergedRegion(region);

 

 

// ## 设置边框及边框颜色 ##//

final short borderMediumDashed = CellStyle.BORDER_MEDIUM_DASHED;

RegionUtil.setBorderBottom(borderMediumDashed, region, sheet1, wb);

RegionUtil.setBorderTop(borderMediumDashed, region, sheet1, wb);

RegionUtil.setBorderLeft(borderMediumDashed, region, sheet1, wb);

RegionUtil.setBorderRight(borderMediumDashed, region, sheet1, wb);

// ## 设置底部边框的颜色 ##//

RegionUtil.setBottomBorderColor(HSSFColor.AQUA.index, region,

sheet1, wb);

// ## 设置顶部边框的颜色 ##//

RegionUtil.setTopBorderColor(HSSFColor.AQUA.index, region, sheet1,

wb);

// ## 设置左边边框的颜色 ##//

RegionUtil.setLeftBorderColor(HSSFColor.AQUA.index, region, sheet1,

wb);

// ## 设置右边边框的颜色 ##//

RegionUtil.setRightBorderColor(HSSFColor.AQUA.index, region,

sheet1, wb);

 

 

// ## CellUtil的一些用法 ##/

CellStyle style = wb.createCellStyle();

style.setIndention((short) 10);

CellUtil.createCell(row, 8, "CellUtil测试", style);

Cell cell2 = CellUtil.createCell(row2, 8, "CellUtil测试");

// ## 设置对齐方式为居中对齐 ##//

CellUtil.setAlignment(cell2, wb, CellStyle.ALIGN_CENTER);

 

 

// ## 将Workbook写到硬盘上 ##//

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

/**

* 测试冻结窗格和拆分

*/

@Test

public void testSplitAndFreezePanes() {

try {

Workbook wb = new HSSFWorkbook();

Sheet sheet1 = wb.createSheet("冻结首行Sheet");

Sheet sheet2 = wb.createSheet("冻结首列Sheet");

Sheet sheet3 = wb.createSheet("冻结两行两列 Sheet");

Sheet sheet4 = wb.createSheet("拆分Sheet");

 

 

/** 冻结窗格 **/

/*

* createFreezePane( colSplit, rowSplit, topRow, leftmostColumn )

* colSplit 冻结线水平位置 rowSplit 冻结线垂直位置 topRow Top row visible in

* bottom pane leftmostColumn Left column visible in right pane.

*/

// ## 冻结首行 ##//

sheet1.createFreezePane(0, 1, 0, 1);

// ## 冻结首列 ##//

sheet2.createFreezePane(1, 0, 1, 0);

// ## 冻结两行两列 ##//

sheet3.createFreezePane(2, 2);

// ## 拆分,左下的为面板为激活状态 ##//

sheet4.createSplitPane(2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT);

 

 

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

/**

* 测试简单图形

*/

@Test

public void testDrawingShapes() {

try {

Workbook wb = new HSSFWorkbook();

Sheet sheet = wb.createSheet("Drawing Shapes");

// ## 得到一个HSSFPatriarch对象,有点像画笔但是注意区别 ##//

HSSFPatriarch patriarch = (HSSFPatriarch) sheet

.createDrawingPatriarch();

/*

* 构造器: HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short

* col1, int row1, short col2, int row2) 描述:

* 创建HSSFClientAnchor类的实例,设置该anchor的顶-左和底-右坐标(相当于锚点,也就是图像出现的位置,大小等).

* Creates a new client anchor and sets the top-left and

* bottom-right coordinates of the anchor. 参数: dx1 第一个单元格的x坐标 dy1

* 第一个单元格的y坐标 dx2 第二个单元格的x坐标 dy2 第二个单元格的y坐标 col1 第一个单元格所在列 row1

* 第一个单元格所在行 col2 第二个单元格所在列 row2 第二个单元格所在行

*/

HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 512, 255,

(short) 1, 0, (short) 1, 0);

// ## 通过HSSFClientAnchor类的对象创建HSSFSimpleShape的实例 ##//

HSSFSimpleShape shape = patriarch.createSimpleShape(anchor);

// ## 画个椭圆 ##//

shape.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL);

 

 

// ## 这几个是没问题的 ##//

// shape.setLineStyleColor(10,10,10);

// shape.setFillColor(90,10,200);

// shape.setLineStyleColor(HSSFColor.BLUE.index); //设置不了,尚不知原因

// ## 设置线条颜色为红色 ##//

// shape.setLineStyleColor(Color.BLUE.getRGB()); //搞不清楚为什是反的BLUE:红色

// RED:蓝色,是不是开发POI的有点色盲,JUST KIDDING!

// ## 设置填充颜色为灰色 ##//

shape.setFillColor(Color.GRAY.getRGB()); // 这个又可以

// ## 设置线条宽度为3pt ##//

shape.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3);

// ## 设置线条的样式为点式 ##//

shape.setLineStyle(HSSFShape.LINESTYLE_DOTSYS);

 

 

// ## 创建文本框并填充文字 “创建文本框” ##//

HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor(

0, 0, 0, 0, (short) 1, 1, (short) 2, 2));

RichTextString text = new HSSFRichTextString("创建文本框");

// ## 创建字体 ##//

Font font = wb.createFont();

// ## 斜体 ##//

font.setItalic(true);

// ## 设置字体颜色为蓝色 ##//

// font.setColor((short)Color.BLUE.getBlue()); not work

font.setColor(HSSFColor.BLUE.index);

// ## 添加字体 ##//

text.applyFont(font);

textbox.setString(text);

 

 

// ## 将文件写到硬盘上 ##//

FileOutputStream fileOut = new FileOutputStream(

XLS_WORKBOOK_LOCATION);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

/**

* 添加图片到工作薄测试 已测试PNG,JPG,GIF

*/

@Test

public void testImages() {

try {

// ## 创建一个新的工作薄 ##//

Workbook wb = new XSSFWorkbook(); // or new HSSFWorkbook();

 

 

// ## 添加图片到该工作薄 ##//

InputStream is = new FileInputStream(IMAGE_LOCATION);

byte[] bytes = IOUtils.toByteArray(is);

int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);

is.close();

 

 

CreationHelper helper = wb.getCreationHelper();

 

 

// ## 创建一个名为“添加图片”的Sheet ##//

Sheet sheet = wb.createSheet("添加图片");

 

 

// ## 创建一个DrawingPatriarch实例 ##//

Drawing drawing = sheet.createDrawingPatriarch();

 

 

// ## 设置图片的形状,位置等 ##//

ClientAnchor anchor = helper.createClientAnchor();

// set top-left corner of the picture,

// subsequent call of Picture#resize() will operate relative to it

anchor.setCol1(3);

anchor.setRow1(2);

Picture pict = drawing.createPicture(anchor, pictureIdx);

// ## 自动设置图片的大小 注意:只支持PNG,JPG,GIF(BMP未测试)##//

pict.resize();

 

 

// ## 保存Workbook ##//

String file = "picture.xls";

if (wb instanceof XSSFWorkbook)

file += "x";

FileOutputStream fileOut = new FileOutputStream(XLS_OR_XLSX_DIR

+ file);

wb.write(fileOut);

fileOut.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

}

}

 

 

poi操作Excel, 各种具体操作和解释

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
我用过的操作Excel的插件有jxl和poi,其中jxl只对office 2007以前的版本提供支持,无法操作 office 2
★、POI中很多组件并不是都能用上,根据需要选择自己需要的,我这里用到的就是SS(HSSF+XSSF)了,分别
最近在做导出Excel表格的功能,在网上查了资料,把网上的资料和自己做的,现在总结一下,留个纪念。
Excel操作 1.下载引用poi-3.5.jar 2.典型查询示例 try { HSSFWorkbook workbook=new HSSFWorkbook(n
目的:导出的Excel模板,某些单元格要是文本形式,如下图 我之前想当然的用cell.setCellType(HSSFCe
前端时间有个.NET项目中涉及到了C#对Excel表格的操作,因为以前没弄过使用Java实现相关操作,所以想
前端时间有个.NET项目中涉及到了C#对Excel表格的操作,因为以前没弄过使用Java实现相关操作,所以想
项目中很多模块需要将数据导出到Excel中,简单的如导出所有的用户信息到Excel,对于导出这种数据,可
前端时间有个.NET项目中涉及到了C#对Excel表格的操作,因为以前没弄过使用Java实现相关操作,所以想
以前项目中用过Excel导入导出过2003版本的,最近研究了一下能够兼容07+ 版本的操作方法。 首先下载P
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号