package 
IO.file; 
/** 
* 所需jar包从 http://apache.mirror.phpchina.com/poi/release/bin/下载 
* 
* 

* 
* 一个Excel文档从大到小可以分成如下几个要素:工作簿、工作表、行、单元格,在poi的类库中用不同的类描述。 
* 
* 
org.apache.poi.hssh.usernodel.HSSFWorkbook表示一个Excel文档。它的createSheet()方法为文档 
* 
创建新工作表;getSheet()方法获取工作簿的工作表;write()方法将文档对象保存到文件中。 
* 
* 
org.apache.poi.hssf.usermodel.HSSFSheet表示Excel文档中的工作表,它的createRow()方法为当前 
* 
工作表创建新行,getRow()方法获得当前工作表的某行。 
* 
* 
org.apache.poi.hssf.usermodel.HSSFRow表示Excel文档中的行,它的createCell()方法为当前行创建 
* 
一个单元格,getCell()方法获得当前行的某单元格。 
* 
* 
org.apache.poi.hssf.usermodel.HSSFCell表示Excel文档中的单元格,它的setCellType()方法设置单元格 
* 
的字符类型,如日期类型、数字类型等;setEncoding()方法设置单元格的字符编码方式;setCellStyle()设置单元格 
* 
的格式,如字体、居中对齐等;setCellValue()方法设置单元格的值。 
* 
*/ 
import 
java.io.File; 
import java.io.FileInputStream; 
import 
java.io.FileNotFoundException; 
import 
java.io.FileOutputStream; 
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import 
org.apache.poi.hssf.usermodel.HSSFCellStyle;
import 
org.apache.poi.hssf.usermodel.HSSFFont;
import 
org.apache.poi.hssf.usermodel.HSSFRow;
import 
org.apache.poi.hssf.usermodel.HSSFSheet;
import 
org.apache.poi.hssf.usermodel.HSSFWorkbook;
import 
org.apache.poi.hssf.util.Region;
public class ExcelFile {

public void writeExcel(String fileName) 
{
// 目标文件
File file = new File(fileName);
FileOutputStream fOut = 
null;

// 创建excel工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 
在excel工作簿中创建一个工作表,其名是默认
// 也可以指定工作表的名字
HSSFSheet sheet = 
workbook.createSheet("Test_Table");

// 创建字体,红色、粗体
HSSFFont font = 
workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置字体 
HSSFFont font = workbook.createFont(); 

font.setFontHeightInPoints(( short ) 20 ); // 字体高度 

font.setColor(HSSFFont.COLOR_RED); // 字体颜色 
font.setFontName( " 黑体 " ); 
// 字体 
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 宽度 

font.setItalic( true ); // 是否使用斜体 
font.setStrikeout(true); // 是否使用划线 


// 设置单元格类型 
HSSFCellStyle cellStyle = workbook.createCellStyle(); 

cellStyle.setFont(font); 

cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平布局:居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
//垂直居中
cellStyle.setWrapText( true ); 

// 添加单元格注释 

// 创建HSSFPatriarch对象,HSSFPatriarch是所有注释的容器. 
HSSFPatriarch patr = 
sheet.createDrawingPatriarch(); 
// 定义注释的大小和位置,详见文档 
HSSFComment comment = 
patr.createComment( new HSSFClientAnchor( 0 , 0 , 0 , 0 , ( short ) 4 , 2 , ( 
short ) 6 , 5 )); 
// 设置注释内容 
comment.setString( new HSSFRichTextString( " 
可以在POI中添加注释! " )); 
// 设置注释作者. 当鼠标移动到单元格上是可以在状态栏中看到该内容. 

comment.setAuthor( " Xuys. " ); 

// 创建单元格 
HSSFCell cell = 
row.createCell(( short ) 1 ); 
HSSFRichTextString hssfString = new 
HSSFRichTextString( " Hello World! " ); 
cell.setCellValue(hssfString); // 
设置单元格内容 
cell.setCellStyle(cellStyle); // 设置单元格样式 

cell.setCellType(HSSFCell.CELL_TYPE_STRING); // 指定单元格格式:数值、公式或字符串 

cell.setCellComment(comment); // 添加注释 

// 格式化数据 
row = 
sheet.createRow(( short ) 2 ); 
cell = row.createCell(( short ) 2 ); 

cell.setCellValue( 11111.25 ); 
cellStyle = workbook.createCellStyle(); 

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

cell.setCellStyle(cellStyle); 

row = sheet.createRow(( short ) 3 ); 

cell = row.createCell(( short ) 3 ); 
cell.setCellValue( 9736279.073 ); 

cellStyle = workbook.createCellStyle(); 

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

cell.setCellStyle(cellStyle); 


sheet.autoSizeColumn(( short ) 0 
); // 调整第一列宽度 
sheet.autoSizeColumn(( short ) 1 ); // 调整第二列宽度 

sheet.autoSizeColumn(( short ) 2 ); // 调整第三列宽度 
sheet.autoSizeColumn(( 
short ) 3 ); // 调整第四列宽度 

// 创建单元格的格式,如居中、左对齐等
HSSFCellStyle cellStyle 
= workbook.createCellStyle();
// 
水平方向居中对齐
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 
垂直方向居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 
设置字体
cellStyle.setFont(font);

// 下面将建立一个4行3列的表,第一行是表头
int rowNum = 
0; // 行标
int colNum = 0; // 列标
// 设置表头信息
HSSFRow row = 
sheet.createRow(rowNum);

HSSFCell cell = null; // 创建单元格
for(colNum = 
0; colNum < 5; colNum++) {
// 在当前行的colNum列上创建单元格
cell = 
row.createCell((short)colNum);
// 
定义单元格为字符类型,也可以指定为日期类型、数字类型等
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 
定义编码方面,为了支持中文,这里使用utf-16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("表头名" 
+ colNum);
}

rowNum++;
for(; rowNum < 5; rowNum++) {
// 
新建第rowNum行
row = sheet.createRow(rowNum);
for(colNum = 0; colNum < 5; 
colNum++) {
cell = 
row.createCell((short)colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("值-" 
+ rowNum + "-" + colNum);
}
}


// 合并单元格
// 

先创建2行5列的单元格,然后将这些单元格合并成2个大的单元格
rowNum = 5;
for(; rowNum < 7; rowNum++) 
{
row = sheet.createRow((short)rowNum);
for(colNum = 0; colNum < 5; 
colNum++)
cell = row.createCell((short)colNum);
}

// 
建立第一个大单元格,高度是2,宽度也是2
rowNum = 5;
colNum = 0;
Region region = new 
Region(rowNum, (short)colNum, (rowNum + 1), (short)(colNum + 
1));
sheet.addMergedRegion(region);
// 获得第一个大单元格
cell = 
sheet.getRow(rowNum).createCell((short)colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("第一个大单元格");

// 
建立第二个大单元格,高度是2,宽度是3
colNum = 2;
region = new Region(rowNum, (short)colNum, 
(rowNum + 1), (short)(colNum + 2));
sheet.addMergedRegion(region);
// 
获得第二个大单元格
cell = 
sheet.getRow(rowNum).createCell((short)colNum);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellStyle(cellStyle);
cell.setCellValue("第二个大单元格");

// 
工作簿建立完成,下面将工作簿存入文件
// 建立一个文件输出流
try {
fOut = new 
FileOutputStream(file);
workbook.write(fOut);
fOut.flush();
System.out.println("Excel文件生成成功!文件名:" 
+ file.getAbsolutePath());
} catch (FileNotFoundException e) 
{
e.printStackTrace();
} catch (IOException e) 
{
e.printStackTrace();
} finally {
try {
if (fOut != 
null)
fOut.close();
} catch (IOException e) 
{
e.printStackTrace();
}
}
}


public void readExcel(String 
fileName) {
File file = new File(fileName);
FileInputStream in = 
null;

try {
// 创建Excel工作簿文件的引用
in = new 
FileInputStream(file);
HSSFWorkbook workbook = new 
HSSFWorkbook(in);

// 创建对工作表的引用
// 这里使用按名引用
HSSFSheet sheet = 
workbook.getSheet("Test_Table");
// 也可以使用getSheetAt(int index)按索引引用 
// 
在Excel文档中,第一张工作表的默认引用是0,其语句是
// HSSFSheet sheet = 
workbook.getSheetAt(0);

HSSFRow row = null;
HSSFCell cell = 
null;
int rowNum = 0;
int colNum = 0;
for(; rowNum < 5; rowNum++) 
{
row = sheet.getRow(rowNum);
for(colNum = 0; colNum < 5; colNum++) 
{
cell = row.getCell(colNum);
System.out.print(cell.getStringCellValue() + 
"\t");
}
System.out.println();
}
} catch (FileNotFoundException e) 
{
e.printStackTrace();
} catch (IOException e) 
{
e.printStackTrace();
} finally {
try {
if (in != 
null)
in.close();
} catch (IOException e) 
{
e.printStackTrace();
}
}
}

public static void main(String[] 
args) {
ExcelFile excel = new ExcelFile();
String fileName = 
"c:/temp.xls";
excel.writeExcel(fileName);
excel.readExcel(fileName);
}
}