天天看點

快捷友善的Excel導入導出工具 Easy-Xls 1.0 版本釋出

EasyXls

使用EasyXls可以使你很友善的操作Excel。本項目目的是解決簡單的(不帶任何樣式)xls檔案的導入導出。  

處理XML時由于使用了JAXB,是以需要使用jdk1.6u14以上版本。  JAXB進行中文xml時容易出現亂碼,是以這裡限制XML為GBK編碼,在Windwos中的儲存格式為ANSI即可。  

​​​​​

EasyXls特點

  1. 支援xls轉換為List<Pojo>對象
  2. 支援xls轉換為List<Map>對象
  3. 支援List<Pojo>轉換為xls
  4. 支援List<Map>轉換為xls
  5. 支援xml配置形式
  6. 支援java編碼建立Config配置

xml配置向導

項目中包含一個簡單的xml生成向導,使用該項導時,需要在項目中建立main方法并調用如下方法:

EasyXls.openGenerater();      

支援的列類型

  • int
  • long
  • float
  • double
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double
  • java.util.Date
  • java.math.BigDecimal

項目依賴

<dependency>

<groupId>net.sourceforge.jexcelapi</groupId>

<artifactId>jxl</artifactId>

<version>2.6.12</version>

</dependency>

配置項說明

有一些屬性隻在寫入到xls時有效,這些會标記【寫】,有些隻在讀取xls時使用的标記【讀】,通用的不做标記。

整體配置

  • cache:使用xml配置時可以選擇是否啟用緩存,啟用緩存後不會重複解析xml配置檔案,這樣會提高反複使用的效率。但是如果修改了xml配置,新的配置不會生效。
  • sheet:sheet标簽的名字【寫】
  • class:excel對應的POJO類或Map
  • sheetNum:讀取第幾個sheet頁【讀】
  • startRow:從第幾行開始讀取【讀】
  • maxRow:最大讀取行,超出行數的不進行讀取【讀】

列Column配置

  • name:對應的java字段名
  • header:對應的excel标題名【寫】
  • type:對應列的類型,不設定時,如果使用的POJO,會自動比對字段類型。如果使用的Map,使用xls自身的格式【讀】
  • width:對應列的寬度(機關:像素)【寫】
  • key:必須包含值的列,如果該列為空,就會停止往下讀取。主要防止讀取空白行,隻有第一個設定key=true的列有效【讀】

示例

以下代碼均來自測試代碼(test目錄下)

部分xml:

<?xml version="1.0" encoding="GBK" standalone="yes"?>
<excel>
  <cache>false</cache>
  <sheet>一次性費用</sheet>
  <class>po.Charges</class>
  <sheetNum>0</sheetNum>
  <startRow>1</startRow>
  <columns>
    <column>
      <name>year</name>
      <header>年度</header>
      <type>java.lang.Integer</type>
      <width>50</width>
    </column>
    <column>
      <name>ownersname</name>
      <header>戶主姓名</header>
      <type>java.lang.String</type>
      <width>120</width>
    </column>
  </columns>
</excel>      

使用xml配置讀取xls:

@Test
public void testMap() {
    try {
        List list = EasyXls.xls2List(
                Xls2ListTest.class.getResource("/ChargesMap.xml").getPath(),
                new File(Xls2ListTest.class.getResource("2.xls").getPath()));
        System.out.println(list);
    } catch (Exception e) {
        e.printStackTrace();
    }
}      

使用java代碼建立Config并讀取xls:

@Test
public void testConfig() {
    try {
        //建立一個配置
        ExcelConfig config = new ExcelConfig.Builder(Charges.class)
                .sheetNum(0)
                .startRow(1)
                .key("name")
                .addColumn("year", "communityid", "roomno", 
                        "ownersid", "ownersname", "property").build();
        List list = EasyXls.xls2List(config, 
                        Xls2ListTest.class.getResourceAsStream("2.xls"));
        for (int i = 0; i < list.size(); i++) {
            System.out.println(((Charges) list.get(i)).getOwnersname());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}      

這裡對列的處理很簡單,excel檔案的列和column的列一一對應即可。

使用xml配置讀取,使用Config方式寫入到新的excel檔案:

@Test
public void testMap2() {
    InputStream is = Xls2ListTest.class.getResourceAsStream("2.xls");
    try {
        String xmlPath = Xls2ListTest.class.getResource("/ChargesMap.xml").getPath();
        List list = EasyXls.xls2List(xmlPath, is);

        Map map = new HashMap();
        map.put("year", 2013);
        map.put("ownersname", "測試戶主");
        list.add(map);

        EasyXls.list2Xls(list, xmlPath, "d:/", "testMap.xls");

        ExcelConfig config = new ExcelConfig.Builder(Charges.class)
                .sheetNum(0)
                .startRow(1)
                .separater(",")
                .key("name")
                .addColumn("year,年度", "communityid,小區ID",
                        "roomno,房号", "ownersid,戶主ID",
                        "ownersname,戶主姓名", "property,物業費").build();
        EasyXls.list2Xls(config, list, "d:/", "testMap2.xls");
    } catch (Exception e) {
        e.printStackTrace();
    }
}      

這裡為了調用友善,先使用.separater(",")方法設定分隔符(預設為英文逗号),然後在addColumn方法中使用如"year,年度"這種方式指派。

這種指派方式最多支援4個參數,分别對應name,header,width,type,如:

"year,年度,200,java.lang.Integer"

繼續閱讀