Javaは任意のクラスExcelのインポートとエクスポートを実現
実際のアプリケーションでは、Excelのインポートによって一般的な操作がエクスポートされ、インスタンスはJavaの反射と注釈のメカニズムによって任意のクラスのExcel操作を実現します.注記は、プログラムのタグ言語として理解され、意味がなく、Java仮想マシンは行コードの実行を説明しません.プログラマはこの特性を特定の方法,属性,クラスにカスタム意味を加えてJavaの反射メカニズムfieldを利用することができる.getAnnotationは、この例の@Excel注釈タグクラス属性がExcel操作フィールドであるかどうかなど、独自の論理判断を実現します.
package annotate;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
//excel
public @interface Excel {
// excel
public String name() default "";
//
public boolean require() default false;
}
package test;
import annotate.Excel;
public class Student {
@Excel(name=" ",require=true)
private int id;
@Excel(name=" ",require=true)
private String name;
@Excel(name=" ",require=true)
private String sex;
@Excel(name=" ")
private int age;
private int num;
public Student(){
}
public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
package test;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import annotate.Excel;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.NumberFormats;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import unity.SpellHelper;
@SuppressWarnings("unchecked")
public class excel {
public static void main(String[] args){
List students = new ArrayList();
for(int i=0;i<10;i++){
Student student = new Student(i, " "+i,i%2==0?" ":" " , i*10);
students.add(student);
}
out(Student.class,new File("D:\\ .xls"),students, " ","
");
List list = (List)in(new File("D:\\ .xls"),Student.class);
//JDK1.8 Lambda
list.stream().forEach(student -> System.out.println(student.toString()));
}
/***
* Excel
* @param file Excel
* @param classz
* @return
*/
public static Object in(File file,Class> classz){
int i=0,j=0;
try {
Workbook rwb=Workbook.getWorkbook(file);
Sheet rs=rwb.getSheet(0);
int clos=rs.getColumns();//
int rows=rs.getRows();//
Map fieldMap = new HashMap();
StringBuffer fieldNames = new StringBuffer("");
for(Field field: classz.getDeclaredFields()){
if(field.isAnnotationPresent(Excel.class)){
Excel excel = field.getAnnotation(Excel.class);
fieldMap.put(excel.name(), field.getName());
}
}
for(j=0;j1)
fieldNames.setLength(fieldNames.length()-1);
String filedNames[] = fieldNames.toString().split(",");
List
/***
* ( ASCII )
* @param name
* @return
*/
public static String captureName(String name) {
char[] cs=name.toCharArray();
cs[0]-=32;
return String.valueOf(cs);
}