导入Excel
/**
*
* @author ym
* 描述:导入excel文件
* @param i_class:导入的文件中存放实体类的class
* @param map:导入的模板(excel里的表头和实体类里的列对应)
* @param file:需要导入的文件
*/
public static Object Import(Class i_class,Map<String,String> map, File file){
List<Object> list = new ArrayList<Object>();
int wrong=0;
String[] attrs = null;
Workbook wb = null;
StringBuffer message = new StringBuffer();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
wb = Workbook.getWorkbook(file);
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//得到所有工作表
Sheet[] sheets = wb.getSheets();
//判断所有工作表中有无错误的列名
List<String[]> ColNames=new ArrayList<String[]>();
String wrongCols="出错列名为:";
for(Sheet s : sheets){
//获取这一行的单元格
Cell[] cells = s.getRow(0);
attrs = new String[cells.length];
//判断excel中的列和实体类中的属性是否对照
for(int i=0;i<cells.length;i++){
Cell c = cells[i];
if(!map.containsKey(c.getContents())){
if (!wrongCols.equals("出错列名为:"))
wrongCols+=",";
wrongCols+=c.getContents();
}else{
attrs[i]=map.get(c.getContents());
}
}
ColNames.add(attrs);
}
//当列名有误时返回特定字符
if(!wrongCols.equals("出错列名为:")){
return wrongCols;
}
String MethodName;
Method method;
//判断有无数据类型错误
for(int t=0;t<sheets.length;t++){
int row = 1;
//单元格数据内容
Cell[] cells = sheets[t].getRow(row++);
//列名
Cell[] top = sheets[t].getRow(0);
attrs = ColNames.get(t);
int result=0;
for(int i=0;i<top.length;i++){
if("".equals(top[i])){
result++;
}
}
if(result!=top.length){
message.append("第"+(t+1)+"张工作表:");
}
while(cells!=null&&cells.length>0){
try {
Object o = i_class.newInstance();
for(int i=0;i<attrs.length;i++){
if(cells[i].getContents()==null||"".equals(cells[i].getContents())){
continue;
}
MethodName = "set"+attrs[i];
//Integer类型
try{
method = i_class.getMethod(MethodName,Integer.class);
Integer.parseInt(cells[i].getContents());
continue;
}catch(NoSuchMethodException e){
}catch(Exception e){
wrong++;
message.append(attrs[i]+"列,"+row+"行;");
continue;
}
//Double类型
try{
method = i_class.getMethod(MethodName, Double.class);
Double.parseDouble(cells[i].getContents());
continue;
}catch(NoSuchMethodException e){
}catch(Exception e1){
e1.printStackTrace();
wrong++;
message.append(attrs[i]+"列,"+row+"行;");
continue;
}
//Date类型
try{
method = i_class.getMethod(MethodName, Date.class);
format.format(format.parse(cells[i].getContents()));
continue;
}catch(NoSuchMethodException e){
}catch(Exception e2){
wrong++;
message.append(attrs[i]+"列,"+row+"行;");
continue;
}
//String类型
try{
method = i_class.getMethod(MethodName, String.class);
}catch(NoSuchMethodException e){
wrong++;
message.append(attrs[i]+"列,"+row+"行;");
}
}
cells = sheets[t].getRow(row++);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Exception e) {
break;
}
}
message.append("\n");
}
if(wrong>0){
return "数据出错总数为:"+wrong+"\n分别为:"+message.toString();
}
//验证文件无错误后,开始插入
for(int t=0;t<sheets.length;t++){
attrs = ColNames.get(t);
Cell[] cells = sheets[t].getRow(1);
int row = 2;
while(cells!=null&&cells.length>0){
try {
Object o = i_class.newInstance();
for(int i=0;i<attrs.length;i++){
if(cells[i].getContents()==null||"".equals(cells[i].getContents())){
continue;
}
MethodName = "set"+attrs[i];
//得到该属性对应的set方法,参数有可能是Integer、Double、Date、String
try{
method = i_class.getMethod(MethodName,Integer.class);
method.invoke(o, Integer.parseInt(cells[i].getContents()));
}catch(Exception e){
try{
method = i_class.getMethod(MethodName, Double.class);
method.invoke(o, Double.parseDouble(cells[i].getContents()));
}catch(Exception e1){
try{
method = i_class.getMethod(MethodName, Date.class);
method.invoke(o, format.format(format.parse(cells[i].getContents())));
}catch(Exception e2){
method = i_class.getMethod(MethodName, String.class);
method.invoke(o, cells[i].getContents());
}
}
}
}
list.add(o);
cells = sheets[t].getRow(row++);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (Exception e) {
break;
}
}
}
return list;
}
导出Execl
/**
*
* @author ym
* 描述:导出Excel文件
* @param list:实体类的集合
* @param path:导出excel文件的路径名
* @param name:导出excel文件的文件名
* @param columnName:要导出的列名(开头第一个字母大写)
*/
public static void Export(List list, String path, String name, String[] columnName, String[] columnTitle){
OutputStream os = null;
try {
os = new FileOutputStream(path+name+".xls");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Class bean = list.get(0).getClass();
try {
//建立excel文件
WritableWorkbook wbook = Workbook.createWorkbook(os);
String bean_name = bean.getName();
bean_name = bean_name.substring(bean_name.lastIndexOf(".")+1);
//生成名为bean_name所代表的工作表,参数0表示这是第一页
WritableSheet wsheet = wbook.createSheet(bean_name, 0);
//是否显示网格
//wsheet.getSettings().setShowGridLines(true);
//设置列宽
//wsheet.getSettings().setDefaultColumnWidth(10);
//设置行高
//wsheet.getSettings().setDefaultRowHeight(15);
//设置Excel字体
WritableFont wfont = new WritableFont(WritableFont.ARIAL, 9,
WritableFont.BOLD, false,
jxl.format.UnderlineStyle.NO_UNDERLINE,
jxl.format.Colour.BLACK);
WritableCellFormat titleFormat = new WritableCellFormat(wfont);
titleFormat.setAlignment(jxl.format.Alignment.CENTRE);
//设置Excel表头,如果标题为null则用列名代替标题
if(columnTitle==null){
columnTitle = columnName;
}
//循环设置列名
for (int i = 0; i < columnTitle.length; i++) {
Label excelTitle = new Label(i, 0, columnTitle[i], titleFormat);
wsheet.addCell(excelTitle);
}
//用于循环时Excel的行号
int line = 1;
String value;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
for(Object b:list){
for(int i=0;i<columnName.length;i++){
Method method = bean.getMethod("get"+columnName[i]);
//判断是否是日期属性
Object o = method.invoke(b);
if(o!=null){
if(o instanceof Date){
value = format.format(format.parse(o.toString()));
}else{
value = o.toString();
}
}else{
value="";
}
//根据不同单元格样式要求可以定义多个WritableCellFormat进行设定
Label content = new Label(i, line, value);
wsheet.addCell(content);
}
line++;
}
wbook.write();
wbook.close();
os.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
分享到:
相关推荐
在Java开发中,处理Excel数据是一项常见的任务,无论是读取大量数据进行分析,还是批量导入导出信息。这里我们关注的是两个主要的库:jxl和Apache POI,它们都是用于处理Excel文件的强大工具。 首先,让我们深入...
接下来,我们将讨论如何使用`jxl`库进行Excel文件的导入和导出。 **Excel导入**: 导入Excel文件主要是读取其中的数据。以下是一段基本的导入代码示例: ```java import jxl.*; public class ExcelImporter { ...
综上所述,Java JXL库是Java开发者处理Excel文件的强大工具,尤其在数据导入导出、报表生成等场景下,其简洁的API和丰富的功能使其成为不可或缺的选择。然而,对于需要处理.xlsx格式的新版Excel文件,开发者可能需要...
Java使用JXL库进行Excel导入导出是一种常见的技术实践,特别是在需要在Java应用程序或Web应用中处理Excel数据时。JXL是一个轻量级的库,它允许开发人员以纯Java方式读取、创建和修改Excel文件,而无需依赖于Windows...
在Java编程环境中,我们经常需要处理数据的导入和导出,Excel作为一种常见的数据存储和展示格式,被广泛应用。`jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库...
在 Java 中,实现 Excel 导入导出可以使用多种方式,本文将介绍使用 JXL 和 POI 两个库实现 Excel 导入导出的方法。 使用 JXL 库实现 Excel 导入导出 JXL(Java Excel API)是一个开源的 Java 库,用于读写 Excel ...
java_Jxl(导入导出Excel) 导入导出Excel的jar包,与大家共同分享,互相学习
以下是一些使用Apache POI和JXL进行Excel导入导出的基本步骤: 1. **导入库**: - 对于Apache POI,你需要引入`poi`, `poi-ooxml`, 和 `poi-ooxml-schemas`库。 - 对于JXL,只需引入`jxl.jar`。 2. **创建工作簿...
java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图 java JXL导出Excel源码及jfreechart 生成折线图,饼图
以上就是关于使用JXL和Apache POI实现Excel导入导出的基本知识。根据实际需求,你可以结合这两个库的功能,灵活地处理各种Excel文件操作。在实际项目中,通常会根据性能、功能需求以及文件兼容性等因素选择适合的库...
JAVA中excel导入导出通用方法 JAVA 中 excel 导入导出通用方法是指在 Java 项目中实现 excel 文件的导入和导出功能。这种方法可以应用于各种需要 excel 文件交互的业务场景中。 一、引入依赖 在 Java 项目中想要...
本文将深入探讨如何使用JXL进行Excel的导入与导出。 一、JXL库介绍 JXL是一个开源的Java库,它支持读取和写入多种Excel文件格式,包括老版本的.BIFF8格式和较新的.XLSX格式。这个库不仅提供了对单元格、工作表和...
Java JXL Excel导入导出API Java JXL 是一个纯 Java 的API,用于导入导出Excel文件。它支持Excel 95-2000的所有版本,生成Excel 2000标准格式。该API还支持字体、数字、日期操作,并能够修饰单元格属性。另外,JXL...
本篇文章将深入探讨jxl包在JAVA中如何轻松处理EXCEL的导入与导出,以及如何对单元格进行格式化操作。 首先,`jxl`是一个开源的Java库,它允许开发者在Java应用程序中创建、读取和修改Excel文件。这个库支持多种...
Java Jxl库是一个专门用于处理Excel文件的开源Java库,它允许开发者在Java应用程序中进行Excel文件的读取、创建和修改。Jxl支持多种Excel版本,包括从Excel 95到2000,而且生成的文件格式符合Excel 2000的标准。这个...
在Java编程中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成或数据分析等场景下。jxl.jar是一个专门为Java设计的库,它允许开发者轻松地读取、写入和修改Excel文件。这个库的功能强大,覆盖了从...
总结来说,JXL是Java中处理Excel文件的一个强大工具,通过它可以轻松实现数据的导入导出。通过理解并实践上述代码,你可以快速掌握使用JXL创建Excel表格的基本技巧。记住,不断学习和实践是提升编程技能的关键,希望...