Repository: wangguanquan/eec
Pull request #39 (2019-06-19 15:20:02)

0.3.2


Patch:
diff --git a/README.md b/README.md
index 3bcc042b..04e0f642 100755
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ eec（Excel Export Core）是一个Excel读取和写入工具，目前支持xlsx
 - [ResultSetSheet](./src/main/java/org/ttzero/excel/entity/ResultSetSheet.java) // ResultSet支持(多用于存储过程)
 - [EmptySheet](./src/main/java/org/ttzero/excel/entity/EmptySheet.java) // 空worksheet
 
-也可以继承已知worksheet来实现自定义数据源，比如微服务，mybatis或者其它RPC
+也可以继承已知[Worksheet](./src/main/java/org/ttzero/excel/entity/Sheet.java)来实现自定义数据源，比如微服务，mybatis或者其它RPC
 
 eec并不是一个功能全面的excel操作工具类，它功能有限并不能用它来完全替代Apache POI
 ，它最擅长的操作是表格处理。比如将数据库表导出为excel文档或者读取excel表格内容到
@@ -97,7 +97,7 @@ xls格式的读取与xlsx对外暴露完全一样，ExcelReader内部判断文
 
 #### 1.1 准备工作
 对象数组导出时可以在对象上使用注解`@DisplayName("column name")`来设置excel头部信息，
-使用注解`@NotExport`标记不需要导出的字段。
+使用注解`@IgnoreExport`标记不需要导出的字段。
 
 ```
     @NotExport("敏感信息不导出")
@@ -210,7 +210,7 @@ public void testCustomizeDataSource(Parameter params) throws IOException {
 }
 
 ```
-更详细的信息请查测试类`ListObjectPagingTest.testPagingCustomizeDataSource`
+更详细的信息请查测试类[CustomizeDataSourceSheet](./src/test/java/org/ttzero/excel/entity/CustomizeDataSourceSheet.java)`
 
 #### 4. 数据源为数据库
 数据源为数据库时可以直接传入`java.sql.Connection`和SQL语句，取数据的过程在EEC内部实现，
diff --git a/src/main/java/org/ttzero/excel/annotation/DisplayName.java b/src/main/java/org/ttzero/excel/annotation/DisplayName.java
index 6d0c6ebf..d9590f29 100644
--- a/src/main/java/org/ttzero/excel/annotation/DisplayName.java
+++ b/src/main/java/org/ttzero/excel/annotation/DisplayName.java
@@ -25,7 +25,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * 导出对象数组时指定对象的导出信息
+ * Specify export information for exporting object-array
  * <p>
  * Created by guanquan.wang at 2018-01-30 13:23
  */
diff --git a/src/main/java/org/ttzero/excel/annotation/NotExport.java b/src/main/java/org/ttzero/excel/annotation/IgnoreExport.java
similarity index 85%
rename from src/main/java/org/ttzero/excel/annotation/NotExport.java
rename to src/main/java/org/ttzero/excel/annotation/IgnoreExport.java
index bd8cfbd4..1f96f41c 100644
--- a/src/main/java/org/ttzero/excel/annotation/NotExport.java
+++ b/src/main/java/org/ttzero/excel/annotation/IgnoreExport.java
@@ -24,18 +24,18 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * 指定字段不导出
+ * Specified the field witch not exported
  * <p>
  * Created by guanquan.wang at 2018-01-30 15:09
  */
 @Target({ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
-public @interface NotExport {
+public @interface IgnoreExport {
     /**
-     * 添加不导出的原因，方便开发者阅读
+     * Add reasons for not exporting, for developers to read
      *
-     * @return 原因
+     * @return the reason for not export
      */
     String value() default "";
 }
diff --git a/src/main/java/org/ttzero/excel/annotation/NotImport.java b/src/main/java/org/ttzero/excel/annotation/IgnoreImport.java
similarity index 85%
rename from src/main/java/org/ttzero/excel/annotation/NotImport.java
rename to src/main/java/org/ttzero/excel/annotation/IgnoreImport.java
index 74b9f987..3d66f873 100644
--- a/src/main/java/org/ttzero/excel/annotation/NotImport.java
+++ b/src/main/java/org/ttzero/excel/annotation/IgnoreImport.java
@@ -23,18 +23,18 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * 指定字段不做导入映射
+ * Specified the field witch not imported mapping.
  * <p>
  * Created by guanquan.wang at 2018-10-24 09:29
  */
 @Target({ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
-public @interface NotImport {
+public @interface IgnoreImport {
     /**
-     * 添加不导入的原因，方便开发者阅读
+     * Add reasons for not importing, for developers to read
      *
-     * @return 原因
+     * @return the reason for not import
      */
     String value() default "";
 }
diff --git a/src/main/java/org/ttzero/excel/entity/I18N.java b/src/main/java/org/ttzero/excel/entity/I18N.java
index 15caf273..870024ee 100644
--- a/src/main/java/org/ttzero/excel/entity/I18N.java
+++ b/src/main/java/org/ttzero/excel/entity/I18N.java
@@ -25,8 +25,6 @@ import java.util.Locale;
 import java.util.Properties;
 
 /**
- * 国际化
- * <p>
  * Create by guanquan.wang on 2018-10-13
  */
 public class I18N {
diff --git a/src/main/java/org/ttzero/excel/entity/ListMapSheet.java b/src/main/java/org/ttzero/excel/entity/ListMapSheet.java
index 9fe63846..933c20d4 100644
--- a/src/main/java/org/ttzero/excel/entity/ListMapSheet.java
+++ b/src/main/java/org/ttzero/excel/entity/ListMapSheet.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * ListMapSheet is a subclass of ListSheet, the difference is
+ * ListMapSheet is a subclass of {@link ListSheet}, the difference is
  * in the way the data is taken
  *
  * @see ListSheet
@@ -194,7 +194,7 @@ public class ListMapSheet extends ListSheet<Map<String, ?>> {
             for (int i = 0; i < columns.length; i++) {
                 Column hc = columns[i];
                 if (StringUtil.isEmpty(hc.key)) {
-                    throw new ExcelWriteException(getClass() + " 类别必须指定map的key。");
+                    throw new ExcelWriteException(getClass() + " must specify the 'key' name.");
                 }
                 if (hc.getClazz() == null) {
                     hc.setClazz(first.get(hc.key).getClass());
diff --git a/src/main/java/org/ttzero/excel/entity/ListSheet.java b/src/main/java/org/ttzero/excel/entity/ListSheet.java
index 07d59dcb..0f952856 100644
--- a/src/main/java/org/ttzero/excel/entity/ListSheet.java
+++ b/src/main/java/org/ttzero/excel/entity/ListSheet.java
@@ -18,7 +18,7 @@ package org.ttzero.excel.entity;
 
 import org.ttzero.excel.reader.Cell;
 import org.ttzero.excel.annotation.DisplayName;
-import org.ttzero.excel.annotation.NotExport;
+import org.ttzero.excel.annotation.IgnoreExport;
 import org.ttzero.excel.util.StringUtil;
 
 import java.io.IOException;
@@ -29,8 +29,8 @@ import java.util.List;
 /**
  * List is the most important data source, you can pass all
  * the data at a time, or customize the worksheet to extends
- * the {@code ListSheet}, and then override the {@code more}
- * method to achieve segmented loading of data. The {@code more}
+ * the {@code ListSheet}, and then override the {@link #more}
+ * method to achieve segmented loading of data. The {@link #more}
  * method returns NULL or an empty array to complete the current
  * worksheet write
  *
@@ -300,11 +300,14 @@ public class ListSheet<T> extends Sheet {
     /**
      * Get the first object of the object array witch is not NULL,
      * reflect all declared fields, and then do the following steps
-     * step 1. If there is has DisplayName annotation, the value of
+     * <p>
+     * step 1. If there is has {@link DisplayName} annotation, the value of
      * this annotation is used as the column name.
-     * step 2. If the DisplayName annotation has no value or no
-     * DisplayName annotation, the field name is used as the column name.
-     * step 3. Skip this Field if field has a NotExport annotation
+     * <p>
+     * step 2. If the {@link DisplayName} annotation has no value or no
+     * {@link DisplayName} annotation, the field name is used as the column name.
+     * <p>
+     * step 3. Skip this Field if field has a {@link IgnoreExport} annotation
      * <p>
      * The column order is the same as the order in declared fields.
      *
@@ -320,7 +323,7 @@ public class ListSheet<T> extends Sheet {
             for (int i = 0; i < fields.length; i++) {
                 Field field = fields[i];
                 String gs = field.toGenericString();
-                NotExport notExport = field.getAnnotation(NotExport.class);
+                IgnoreExport notExport = field.getAnnotation(IgnoreExport.class);
                 if (notExport != null || StringUtil.indexOf(exclude, gs.substring(gs.lastIndexOf('.') + 1)) >= 0) {
                     fields[i] = null;
                     continue;
@@ -468,7 +471,7 @@ public class ListSheet<T> extends Sheet {
      * The more data you get each time, the faster write speed. You
      * should minimize the database query or network request, but the
      * excessive data will put pressure on the memory. Please balance
-     * this value between the speed and memory. You can refer to 2^8 ~ 2^10
+     * this value between the speed and memory. You can refer to {@code 2^8 ~ 2^10}
      * <p>
      * This method is blocked
      *
diff --git a/src/main/java/org/ttzero/excel/entity/ResultSetSheet.java b/src/main/java/org/ttzero/excel/entity/ResultSetSheet.java
index 06ac328d..170b0c2e 100644
--- a/src/main/java/org/ttzero/excel/entity/ResultSetSheet.java
+++ b/src/main/java/org/ttzero/excel/entity/ResultSetSheet.java
@@ -46,11 +46,11 @@ import static java.sql.Types.VARCHAR;
 
 /**
  * ResultSet is one of the worksheet data sources, It has a subclass
- * {@code StatementSheet}. Most of the time it is used to get the
+ * {@link StatementSheet}. Most of the time it is used to get the
  * result of a stored procedure.
  * <p>
  * Write data to the row-block via the cursor, finished write when
- * {@code ResultSet#next} returns false
+ * {@link ResultSet#next} returns false
  *
  * @see StatementSheet
  * <p>
@@ -175,7 +175,7 @@ public class ResultSetSheet extends Sheet {
     /**
      * Release resources
      *
-     * @throws IOException if io error occur
+     * @throws IOException if I/O error occur
      */
     @Override
     public void close() throws IOException {
@@ -290,7 +290,7 @@ public class ResultSetSheet extends Sheet {
     }
 
     /**
-     * Convert {@code java.sql.Type} to java type
+     * Convert {@link java.sql.Types} to java type
      *
      * @param type type sql type
      * @return java class
diff --git a/src/main/java/org/ttzero/excel/entity/StatementSheet.java b/src/main/java/org/ttzero/excel/entity/StatementSheet.java
index 31dbbb7b..bf345b86 100644
--- a/src/main/java/org/ttzero/excel/entity/StatementSheet.java
+++ b/src/main/java/org/ttzero/excel/entity/StatementSheet.java
@@ -27,13 +27,13 @@ import java.sql.SQLException;
 
 /**
  * Statement is one of the worksheet data sources, it's
- * extends from {@code ResultSetSheet}, and will be obtained from
+ * extends from {@link ResultSetSheet}, and will be obtained from
  * MetaData if no header information is given. When MetaData
  * cannot be obtained, the header name will be setting as 1, 2,
  * and 3...
  * <p>
- * The Connection will not be actively closed, but the {@code Statement}
- * and {@code ResultSet} will be closed with worksheet.
+ * The Connection will not be actively closed, but the {@link java.sql.Statement}
+ * and {@link ResultSet} will be closed with worksheet.
  *
  * @see ResultSetSheet
  * <p>
diff --git a/src/main/java/org/ttzero/excel/entity/TooManyColumnsException.java b/src/main/java/org/ttzero/excel/entity/TooManyColumnsException.java
index 481cbfec..e640b75a 100644
--- a/src/main/java/org/ttzero/excel/entity/TooManyColumnsException.java
+++ b/src/main/java/org/ttzero/excel/entity/TooManyColumnsException.java
@@ -17,7 +17,8 @@
 package org.ttzero.excel.entity;
 
 /**
- * xlsx文件最大列数为16_384，如果超出这个数将抛出此异常
+ * The maximum number of columns in the xlsx file is 16_384.
+ * If this number is exceeded, this exception will occur.
  * <p>
  * Created by guanquan.wang on 2017/10/19.
  */
diff --git a/src/main/java/org/ttzero/excel/entity/style/Border.java b/src/main/java/org/ttzero/excel/entity/style/Border.java
index 0e00ff05..8f52505f 100644
--- a/src/main/java/org/ttzero/excel/entity/style/Border.java
+++ b/src/main/java/org/ttzero/excel/entity/style/Border.java
@@ -23,11 +23,14 @@ import java.awt.Color;
 import java.lang.reflect.Field;
 
 /**
- * 边框
- * 边框包含方位，样式和颜色，Excel边框有6个方位，
- * 分别是left,right,top,bottom,diagonalDown,diagonalUp
- * 样式请参照BorderStyle
- * EEC默认边框颜色为#333333
+ * Border line styles and colors
+ *
+ * The border contains orientation, style and color. The Excel
+ * border has 6 orientations, which are left, right, top, bottom,
+ * diagonalDown, diagonalUp. For the style, please refer to {@link BorderStyle}.
+ * The default border color is #333333 in EEC
+ *
+ * @see BorderStyle
  * <p>
  * Created by guanquan.wang on 2018-02-06 08:55
  */
@@ -42,7 +45,7 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格上方边框
+     * Top line style
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -53,7 +56,7 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格右方边框
+     * Right line style
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -64,7 +67,7 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格下方边框
+     * Bottom line style
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -75,7 +78,7 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格左方边框
+     * Left line style
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -86,7 +89,7 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格左上到右下方边框[\]
+     * Top-left to bottom-right line style [\]
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -97,30 +100,31 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格边框适用于上下左右4个方位
+     * Bottom-left to top-right line style [/]
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
      */
-    public Border setBorder(BorderStyle style) {
-        borders[0] = new SubBorder(style, defaultColor);
-        borders[1] = borders[2] = borders[3] = borders[0];
+    public Border setDiagonalUp(BorderStyle style) {
+        borders[5] = new SubBorder(style, defaultColor);
         return this;
     }
 
     /**
-     * 使用默认颜色设置单元格左下到右上方边框[/]
+     * Setting top-right-bottom-left line style
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
      */
-    public Border setDiagonalUp(BorderStyle style) {
-        borders[5] = new SubBorder(style, defaultColor);
+    public Border setBorder(BorderStyle style) {
+        borders[0] = new SubBorder(style, defaultColor);
+        borders[1] = borders[2] = borders[3] = borders[0];
         return this;
     }
 
+
     /**
-     * 使用默认颜色设置单元格左下到右上和右下到右上方边框[X]
+     * Setting top-left to bottom-right and bottom-left to top-right line style [X]
      *
      * @param style the {@link BorderStyle}
      * @return the {@link Border}
@@ -132,10 +136,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格上方边框
+     * Top line style
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setBorderTop(BorderStyle style, Color color) {
@@ -144,10 +148,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格右方边框
+     * Right line style
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setBorderRight(BorderStyle style, Color color) {
@@ -156,10 +160,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格下方边框
+     * Bottom line style
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setBorderBottom(BorderStyle style, Color color) {
@@ -168,10 +172,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格左方边框
+     * Left line style
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setBorderLeft(BorderStyle style, Color color) {
@@ -180,10 +184,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格左上到右下方边框[\]
+     * Top-left to bottom-right line style [\]
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setDiagonalDown(BorderStyle style, Color color) {
@@ -192,10 +196,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格左下到右上方边框[/]
+     * Bottom-left to top-right line style [/]
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setDiagonalUp(BorderStyle style, Color color) {
@@ -204,10 +208,10 @@ public class Border {
     }
 
     /**
-     * 使用指定颜色设置单元格左下到右上和右下到右上方边框[X]
+     * Setting top-left to bottom-right and bottom-left to top-right line style [X]
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setDiagonal(BorderStyle style, Color color) {
@@ -217,10 +221,10 @@ public class Border {
     }
 
     /**
-     * 使用默认颜色设置单元格边框，适用于上下左右4个方位
+     * Setting top-right-bottom-left line style
      *
      * @param style the {@link BorderStyle}
-     * @param color the border color
+     * @param color the border {@link Color}
      * @return the {@link Border}
      */
     public Border setBorder(BorderStyle style, Color color) {
@@ -273,14 +277,17 @@ public class Border {
     }
 
     /**
-     * 设置顺序top-right-bottom-left，属性style name - color
-     * 如果设置不完全的话，未设置的方位无边框
-     * 如果只设置方位不设置颜色时按最后一个颜色补足
+     * The setting order is top -&gt; right -&gt; bottom -&gt; left, the
+     * attribute order is style-name + color, if the orientation setting
+     * is not complete, the unset orientation has no border. If only the
+     * orientation is not set, the last color will be complemented.
+     * <p>
+     * eq:
      * thin red
      * thin red thin dashed dashed
      * medium black thick #cccccc double black hair green
      * none none thin thin
-     *
+     * </p>
      * @param text the border value
      * @return the parse value of {@link Border}
      */
diff --git a/src/main/java/org/ttzero/excel/entity/style/BorderStyle.java b/src/main/java/org/ttzero/excel/entity/style/BorderStyle.java
index 1e1726c7..5e0f213d 100644
--- a/src/main/java/org/ttzero/excel/entity/style/BorderStyle.java
+++ b/src/main/java/org/ttzero/excel/entity/style/BorderStyle.java
@@ -17,7 +17,7 @@
 package org.ttzero.excel.entity.style;
 
 /**
- * 定义边框样式
+ * Border style
  * <p>
  * Created by guanquan.wang on 2018-02-06 08:55
  */
diff --git a/src/main/java/org/ttzero/excel/entity/style/Fill.java b/src/main/java/org/ttzero/excel/entity/style/Fill.java
index b5658ea8..3c7792f3 100644
--- a/src/main/java/org/ttzero/excel/entity/style/Fill.java
+++ b/src/main/java/org/ttzero/excel/entity/style/Fill.java
@@ -24,8 +24,6 @@ import java.awt.Color;
 import java.lang.reflect.Field;
 
 /**
- * 单元格填充
- * <p>
  * Created by guanquan.wang at 2018-02-06 08:55
  */
 public class Fill implements Cloneable {
diff --git a/src/main/java/org/ttzero/excel/processor/IntConversionProcessor.java b/src/main/java/org/ttzero/excel/processor/IntConversionProcessor.java
index e16b5992..31bd196e 100644
--- a/src/main/java/org/ttzero/excel/processor/IntConversionProcessor.java
+++ b/src/main/java/org/ttzero/excel/processor/IntConversionProcessor.java
@@ -17,18 +17,19 @@
 package org.ttzero.excel.processor;
 
 /**
- * Int值转其它有意义值
- * 一般用于将状态值，或者枚举值转换为用户感知的具有实际意义的值
+ * An Integer Conversion
+ * Typically used to convert state values or enumerated values
+ * to meaningful values
  * <p>
  * Created by guanquan.wang on 2017/10/13.
  */
 @FunctionalInterface
 public interface IntConversionProcessor {
     /**
-     * Int值包括byte, char, short, int
+     * The integer value include byte, char, short, int
      *
-     * @param n 数据库值或原对象值
-     * @return 转换后的值
+     * @param n the integer value
+     * @return the converted value
      */
     Object conversion(int n);
 }
diff --git a/src/main/java/org/ttzero/excel/processor/Watch.java b/src/main/java/org/ttzero/excel/processor/Watch.java
index ca8e13e5..1c863a4d 100644
--- a/src/main/java/org/ttzero/excel/processor/Watch.java
+++ b/src/main/java/org/ttzero/excel/processor/Watch.java
@@ -17,16 +17,16 @@
 package org.ttzero.excel.processor;
 
 /**
- * 监听操作日志
+ * Output operation logs
  * <p>
  * Create by guanquan.wang on 2018-10-13
  */
 @FunctionalInterface
 public interface Watch {
     /**
-     * 监听
+     * print operation logs
      *
-     * @param msg 输出信息
+     * @param msg the logs
      */
     void what(String msg);
 }
diff --git a/src/main/java/org/ttzero/excel/reader/HeaderRow.java b/src/main/java/org/ttzero/excel/reader/HeaderRow.java
index 249397f5..05150113 100644
--- a/src/main/java/org/ttzero/excel/reader/HeaderRow.java
+++ b/src/main/java/org/ttzero/excel/reader/HeaderRow.java
@@ -17,7 +17,7 @@
 package org.ttzero.excel.reader;
 
 import org.ttzero.excel.annotation.DisplayName;
-import org.ttzero.excel.annotation.NotImport;
+import org.ttzero.excel.annotation.IgnoreImport;
 import org.ttzero.excel.util.StringUtil;
 
 import java.lang.reflect.Field;
@@ -77,7 +77,7 @@ class HeaderRow extends Row {
         for (int i = 0, n; i < fields.length; i++) {
             Field f = fields[i];
             // skip not import fields
-            NotImport nit = f.getAnnotation(NotImport.class);
+            IgnoreImport nit = f.getAnnotation(IgnoreImport.class);
             if (nit != null) {
                 fields[i] = null;
                 continue;
diff --git a/src/main/java/org/ttzero/excel/reader/XMLRow.java b/src/main/java/org/ttzero/excel/reader/XMLRow.java
index 6928bf70..1f3cac07 100644
--- a/src/main/java/org/ttzero/excel/reader/XMLRow.java
+++ b/src/main/java/org/ttzero/excel/reader/XMLRow.java
@@ -28,11 +28,14 @@ import static org.ttzero.excel.reader.SharedStrings.toInt;
 import static org.ttzero.excel.reader.SharedStrings.unescape;
 
 /**
- * 行数据，同一个Sheet页内的Row对象内存共享。
- * 行数据开始列和结束列读取的是span值，你可以使用<code>row.isEmpty()</code>方法测试行数据是否为空节点
- * 空节点定义为: 没有任何值和样式以及格式化的行. 像这样<code><row r="x"/></code>
- * 你可以像ResultSet一样通过单元格下标获取数据eq:<code>row.getInt(1) // 获取当前行第2列的数据</code>下标从0开始。
- * 也可以使用to&amp;too方法将行数据转为对象，前者会实例化每个对象，后者内存共享只会有一个实例,在流式操作中这是一个好主意。
+ * Row data, shared by the Row object in the same Sheet page.
+ * The row data start column and the end column read the span
+ * value. You can use the {@link #isEmpty()} method to
+ * test whether the row data is an empty node. The empty node
+ * is defined as: No values and styles and formats. Line like this.
+ * <code><row r="x"/></code> You can get the data eq by cell
+ * subscript like ResultSet: {@link #getInt(int)} to get the current
+ * line The data in the second column, the subscript, starts at 0.
  * <p>
  * Create by guanquan.wang on 2018-09-22
  */
@@ -284,13 +287,6 @@ class XMLRow extends Row {
         return a == b;
     }
 
-    /**
-     * FIXME check double
-     *
-     * @param a
-     * @param b
-     * @return
-     */
     private boolean isDouble(int a, int b) {
         if (a == b) return false;
         if (cb[a] == '-') a++;
diff --git a/src/main/java/org/ttzero/excel/reader/XMLSheet.java b/src/main/java/org/ttzero/excel/reader/XMLSheet.java
index 64c516f9..14e1ab10 100644
--- a/src/main/java/org/ttzero/excel/reader/XMLSheet.java
+++ b/src/main/java/org/ttzero/excel/reader/XMLSheet.java
@@ -31,7 +31,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * 对应Excel文件各Sheet页，包含隐藏Sheet页
+ * The open-xml format Worksheet
  * <p>
  * Create by guanquan.wang on 2018-09-22
  */


Test patch:
diff --git a/src/test/java/org/ttzero/excel/entity/ListObjectPagingTest.java b/src/test/java/org/ttzero/excel/entity/ListObjectPagingTest.java
index 7993f2ca..e67f57d1 100644
--- a/src/test/java/org/ttzero/excel/entity/ListObjectPagingTest.java
+++ b/src/test/java/org/ttzero/excel/entity/ListObjectPagingTest.java
@@ -18,10 +18,11 @@ package org.ttzero.excel.entity;
 
 import org.junit.Test;
 import org.ttzero.excel.Print;
-import org.ttzero.excel.reader.ExcelReaderTest;
 
 import java.io.IOException;
 
+import static org.ttzero.excel.reader.ExcelReaderTest.testResourceRoot;
+
 /**
  * Create by guanquan.wang at 2019-04-29 11:14
  */
@@ -57,7 +58,7 @@ public class ListObjectPagingTest extends WorkbookTest {
     @Test public void testLocalPicWaterMark() throws IOException {
         new Workbook("paging local pic water mark", author)
             .watch(Print::println)
-            .setWaterMark(WaterMark.of(ExcelReaderTest.testResourceRoot().resolve("mark.png")))
+            .setWaterMark(WaterMark.of(testResourceRoot().resolve("mark.png")))
             .addSheet(ListObjectSheetTest.Item.randomTestData())
             .setWorkbookWriter(new ReLimitXMLWorkbookWriter())
             .writeTo(defaultTestPath);
diff --git a/src/test/java/org/ttzero/excel/entity/ListObjectSheetTest.java b/src/test/java/org/ttzero/excel/entity/ListObjectSheetTest.java
index 3edde38f..e96d9742 100644
--- a/src/test/java/org/ttzero/excel/entity/ListObjectSheetTest.java
+++ b/src/test/java/org/ttzero/excel/entity/ListObjectSheetTest.java
@@ -19,13 +19,12 @@ package org.ttzero.excel.entity;
 import org.junit.Test;
 import org.ttzero.excel.Print;
 import org.ttzero.excel.annotation.DisplayName;
-import org.ttzero.excel.annotation.NotExport;
+import org.ttzero.excel.annotation.IgnoreExport;
 import org.ttzero.excel.entity.style.Fill;
 import org.ttzero.excel.entity.style.PatternType;
 import org.ttzero.excel.entity.style.Styles;
 import org.ttzero.excel.processor.IntConversionProcessor;
 import org.ttzero.excel.processor.StyleProcessor;
-import org.ttzero.excel.reader.ExcelReaderTest;
 
 import java.awt.*;
 import java.io.IOException;
@@ -39,6 +38,8 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import static org.ttzero.excel.reader.ExcelReaderTest.testResourceRoot;
+
 /**
  * Create by guanquan.wang at 2019-04-28 19:17
  */
@@ -85,7 +86,7 @@ public class ListObjectSheetTest extends WorkbookTest{
     @Test public void testLocalPicWaterMark() throws IOException {
         new Workbook("object local pic water mark", author)
             .watch(Print::println)
-            .setWaterMark(WaterMark.of(ExcelReaderTest.testResourceRoot().resolve("mark.png")))
+            .setWaterMark(WaterMark.of(testResourceRoot().resolve("mark.png")))
             .addSheet(Item.randomTestData())
             .writeTo(defaultTestPath);
     }
@@ -380,7 +381,7 @@ public class ListObjectSheetTest extends WorkbookTest{
      * Annotation Object
      */
     public static class Student {
-        @NotExport
+        @IgnoreExport
         private int id;
         @DisplayName("姓名")
         private String name;
diff --git a/src/test/java/org/ttzero/excel/entity/TemplateTest.java b/src/test/java/org/ttzero/excel/entity/TemplateTest.java
index e845efdb..c24c5f0c 100644
--- a/src/test/java/org/ttzero/excel/entity/TemplateTest.java
+++ b/src/test/java/org/ttzero/excel/entity/TemplateTest.java
@@ -17,7 +17,6 @@
 package org.ttzero.excel.entity;
 
 import org.junit.Test;
-import org.ttzero.excel.reader.ExcelReaderTest;
 
 import java.io.IOException;
 import java.io.InputStream;