package com.excel;
import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class ExcelFileExport implements IFileExport {
private String fileName = "export_data";
private String fileSaveDir = "C:/" ;
int a;
@Override
public void export(String fileName, Header[] header, List<Object> dataSource,String name) {
this.fileName = fileName != null ? fileName : this.fileName;
String fileDir = fileSaveDir + this.fileName + ".xls";
WritableWorkbook book = null;
WritableSheet sheet = null;
try {
// create xls book
//生成一个表格
book = Workbook.createWorkbook(new File(fileDir));
//该方法的作用是创建一个WorkSheet放在指定的位置
sheet = book.createSheet(name, 0);
// create report header
if(header != null && header.length > 0){
List<WritableCell> returnHead = createHeader(header);
for(WritableCell label : returnHead){
//该方法的作用是添加单元格,需要注意的是一个Cell/Label只能使用一次
sheet.addCell(label);
}
}
// create report body
if(dataSource != null && dataSource.size() > 0){
List<WritableCell> returnBody = createBody(header, dataSource);
for(WritableCell label : returnBody){
sheet.addCell(label);
}
}
//给sheet电子版中所有的列设置默认的列的宽度;
sheet.getSettings().setDefaultColumnWidth(30);
//设置第一行高(标题)
sheet.setRowView(0, 600, false);
Label labe;
WritableFont font = new WritableFont(WritableFont.createFont("Arial"), 20, WritableFont.BOLD);
WritableCellFormat format = new WritableCellFormat(font);
format.setAlignment(Alignment.CENTRE);
format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
sheet.mergeCells(0,0,a-1,0);
labe = new Label(0,0,name,format);
sheet.addCell(labe);
//生成一个文档
book.write();
} catch (Exception ex) {
ex.printStackTrace();
} finally{
if(book != null){
try {
//该方法非常重要,在最后需要调用这个方法,才能使生成的Excel有效
//生成,否则,不写此句的话将会导致生成的Excel文件在打开时提示“文 件的格式与扩展名指定的格式不一致”
book.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
private List<WritableCell> createHeader(Header[] header) throws WriteException {
List<WritableCell> result = new ArrayList<WritableCell>();
WritableFont font = new WritableFont(WritableFont.createFont("Arial"), 10, WritableFont.BOLD);
WritableCellFormat format = new WritableCellFormat(font);
format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
format.setAlignment(Alignment.CENTRE);
for(a=0;a<header.length;a++){
Label label = new Label(a,1,header[a].getText(),format);
result.add(label);
}
return result;
}
private List<WritableCell> createBody(Header[] header, List<Object> dataSource) throws IllegalArgumentException, IllegalAccessException, WriteException {
List<WritableCell> result = new ArrayList<WritableCell>();
WritableFont font = new WritableFont(WritableFont.createFont("Arial"));
WritableCellFormat format = new WritableCellFormat(font);
format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN);
format.setAlignment(Alignment.CENTRE);
Map<String,Integer> headerLocationMap = header != null ? createHeaderLocationMap(header) : new HashMap<String,Integer>();
int rowCount = dataSource.size();
for(int i=1;i<=rowCount;i++){
Object row = dataSource.get(i-1);
Field[] fields = row.getClass().getDeclaredFields();
int columnCount = 0;
for(int j=0;j<fields.length;j++){
Field field = fields[j];
field.setAccessible(true);
String type = field.getType().getName();
if (! TypeUtils.isBaseType(type)) {
continue;
}
WritableCell cell = null;
Integer columnLocation = headerLocationMap.get(field.getName());
columnLocation = columnLocation != null ? columnLocation : columnCount;
if(TypeUtils.isBooleanType(type))
{
cell = new jxl.write.Boolean(columnLocation, i+1, java.lang.Boolean.valueOf(TypeUtils.simpleTypeToStr(field.get(row))),format);
}
else if(TypeUtils.isNumberType(type))
{
cell = new jxl.write.Number(columnLocation, i+1, java.lang.Double.valueOf(TypeUtils.simpleTypeToStr(field.get(row))),format);
}
else
{
cell = new Label(columnLocation, i+1, TypeUtils.simpleTypeToStr(field.get(row)),format);
}
result.add(cell);
columnCount++;
}
}
return result;
}
private Map<String, String> createExcludeMap(String[] exclude) {
Map<String,String> map = new HashMap<String,String>();
for(String e: exclude){
map.put(e, e);
}
return map;
}
private Map<String, Integer> createHeaderLocationMap(Header[] header) {
Map<String,Integer> map = new HashMap<String,Integer>();
for(int i=0;i<header.length;i++){
map.put(header[i].getFieldName(), i);
}
return map;
}
}
java程序导出Excel
需积分: 50 125 浏览量
2016-05-06
09:33:12
上传
评论
收藏 1.44MB RAR 举报
JiangQuangang
- 粉丝: 11
- 资源: 8
最新资源
- 407000001.fasset
- J-20240402998-HTE-HTE-2947110DA-D3_整车运动控制器-电压渐变(缓升缓降)-检测报告-XS-汽车及零部件检测中心.pdf.crdownload
- Excel表格VBA-获取文件夹内所有文件路径.zip
- 文件移动.zip
- 反射源代码,源代码,源代码,源代码
- CAJViewer 9.0_x64-setup.exe
- servant C++语言框架rpc的源码实现 tools C++语言框架IDL工具的源码实现 util C++语言.7z
- 使用pyqt创建一个登录具有动态背景的登陆界面
- 实验名称 调幅波信号的解调
- 实验名称 振幅调制器(利用乘法器)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈