import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.poifs.filesystem.POIFSFileSystem;
public class ExcelOpt {
/**
*
生成一个
Excel
文件
jxl
* @param fileName
要生成的
Excel
文件名
* @jxl.jar
版本:
2.6
*/
public static void writeExcel(String fileName){
WritableWorkbook wwb = null;
try {
//
首先要使用
Workbook
类的工厂方法创建一个可写入的工作薄
(Workbook)
对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//
创建一个可写入的工作表
//Workbook
的
createSheet
方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("
工作表名称
", 0);
//
下面开始添加单元格
for(int i=0;i<10;i++){
for(int j=0;j<5;j++){
//
这里需要注意的是,在
Excel
中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, "
这是第
"+(i+1)+"
行,第
"+(j+1)+"
列
");
try {
//
将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
try {
//
从内存中写入文件中
wwb.write();
//
关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
/**
*
生成一个
Excel
文件
POI
* @param inputFile
输入模板文件路径
* @param outputFile
输入文件存放于服务器路径
* @param dataList
待导出数据
* @throws Exception
* @roseuid:
*/
public static void exportExcelFile(String inputFile,String outputFile,List dataList) throws Exception{
//
用模板文件构造
poi
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
//
创建模板工作表
HSSFWorkbook templatewb = new HSSFWorkbook(fs);
//
直接取模板第一个
sheet
对象
HSSFSheet templateSheet = templatewb.getSheetAt(1);
//
得到模板的第一个
sheet
的第一行对象
为了得到模板样式
HSSFRow templateRow = templateSheet.getRow(0);
//HSSFSheet timplateSheet = templatewb.getSheetAt(1);
//
取得
Excel
文件的总列数
int columns = templateSheet.getRow((short) 0)
.getPhysicalNumberOfCells();
// Debug.println("columns is : " + columns); //=========================
//
创建样式数组
HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];
//
一次性创建所有列的样式放在数组里
for (int s = 0; s < columns; s++) {
//
得到数组实例
styleArray[s] = templatewb.createCellStyle();
}
//
循环对每一个单元格进行赋值
//
定位行
for (int rowId = 1; rowId < dataList.size(); rowId++) {
//
依次取第
rowId
行数据
每一个数据是
valueList
List valueList = (List) dataList.get(rowId - 1);
//
定位列
for (int columnId = 0; columnId < columns; columnId++) {
//
依次取出对应与
colunmId
列的值
//
每一个单元格的值
String dataValue = (String) valueList.get(columnId);
//
取出
colunmId
列的的
style
//
模板每一列的样式
HSSFCellStyle style = styleArray[columnId];
//
取模板第
colunmId
列的单元格对象
//
模板单元格对象
HSSFCell templateCell = templateRow.getCell((short) columnId);
//
创建一个新的
rowId
行
行对象
//
新建的行对象
HSSFRow hssfRow = templateSheet.createRow(rowId);
//
创建新的
rowId
行
columnId
列
单元格对象
//
新建的单元格对象
HSSFCell cell = hssfRow.createCell((short) columnId);
//
如果对应的模板单元格
样式为非锁定
if (templateCell.getCellStyle().getLocked() == false) {
//
设置此列
style
为非锁定
style.setLocked(false);
//
设置到新的单元格上
cell.setCellStyle(style);
}
//
否则样式为锁定
else {
//
设置此列
style
为锁定
style.setLocked(true);
//
设置到新单元格上
cell.setCellStyle(style);
}
//
设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
//Debug.println("dataValue : " + dataValue);
//
设置值
统一为
String
cell.setCellValue(dataValue);
}
}
//
设置输入流
FileOutputStream fOut = new FileOutputStream(outputFile);
//
将模板的内容写到输出文件上
templatewb.write(fOut);
fOut.flush();
//
操作结束,关闭文件
fOut.close();
}
/**
*
导出数据为
XLS
格式
* @param fos
生成
Excel
文件
Path
* @param bo
要导入的数据
*/
public static void writeExcelBo(String fos, java.util.List ve)
{
jxl.write.WritableWorkbook wwb;
try
{
wwb= Workbook.createWorkbook(new File(fos));
jxl.write.WritableSheet ws= wwb.createSheet("
上市新书
", 10);
ws.addCell(new jxl.write.Label(0, 1, "
书名
"));
ws.addCell(new jxl.write.Label(1, 1, "
作者
"));
ws.addCell(new jxl.write.Label(2, 1, "
定价
"));
ws.addCell(new jxl.write.Label(3, 1, "
出版社
"));
int bookSize=ve.size();
BookVO book = new BookVO();
for (int i= 0; i < bookSize; i++)
{
book= (BookVO)ve.get(i);
ws.addCell(new jxl.write.Label(0, i + 2, "" + book.getBookName()));
ws.addCell(new jxl.write.Label(1, i + 2, book.getBookAuthor()));
ws.addCell(new jxl.write.Label(2, i + 2, "" + book.getBookPrice()));
ws.addCell(new jxl.write.Label(3, i + 2, book.getBookConcern()));
}
// jxl.write.WritableFont wfc=
//new jxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
//jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);
ws.addCell(new jxl.write.Label(0, 0, "2007
年
07
月即将上市新书!
"));
wwb.write();
//
关闭
Excel
工作薄对象
wwb.close();
} catch (IOException e){
} catch (RowsExceededException e){
} catch (WriteException e){
}
}
public static void main(String[] args) {
writeExcel("c:\\Test
测试
Excel.xls");
System.out.println("OK");
ArrayList list = new ArrayList();
for (int i = 0; i < 10; i++) {
BookVO book = new BookVO();
book.setBookName("WebWork in action+"+i);
book.setBookAuthor("
唐勇
+"+i);
book.setBookPrice("39
元
+"+i);
book.setBookConcern("
飞思科技
+"+i);
list.add(book);
}
writeExcelBo("c:\\
上市新书
.xls",list);
System.err.println("Book OK!!!");
}
}