Kaynağa Gözat

增加tools-poi组件中按String[]导出excel的方法;去掉DataMap中有歧义的valus属性;增加单对象迭代器工具

Signed-off-by: luoshi <luoshi@qmth.com.cn>
luoshi 2 yıl önce
ebeveyn
işleme
90e894d3d6

+ 39 - 0
tools-common/src/main/java/com/qmth/boot/tools/iterator/SingletonIterator.java

@@ -0,0 +1,39 @@
+package com.qmth.boot.tools.iterator;
+
+import java.util.Iterator;
+
+/**
+ * 只包含单个对象的迭代器工具
+ */
+public class SingletonIterator<E> implements Iterator<E> {
+
+    private E obj;
+
+    private boolean finish;
+
+    /**
+     * 构造单对象迭代器
+     *
+     * @param obj - 包含的单个对象
+     */
+    public SingletonIterator(E obj) {
+        this.obj = obj;
+        this.finish = false;
+    }
+
+    @Override
+    public boolean hasNext() {
+        return !finish;
+    }
+
+    @Override
+    public E next() {
+        if (finish) {
+            return null;
+        } else {
+            finish = true;
+            return obj;
+        }
+    }
+
+}

+ 31 - 1
tools-poi/src/main/java/com/qmth/boot/tools/excel/ExcelWriter.java

@@ -37,6 +37,28 @@ public abstract class ExcelWriter {
         }
     }
 
+    /**
+     * 创建sheet并写入String[]内容
+     *
+     * @param sheetName    - sheet名称
+     * @param titles       - 前置的标题,可以为空
+     * @param columnNames  - 数据列名称
+     * @param dataIterator - String[]迭代器
+     */
+    public void writeDataArrays(String sheetName, String[] titles, String[] columnNames,
+            Iterator<String[]> dataIterator) {
+        Sheet sheet = getWorkbook().createSheet(sheetName);
+        AtomicInteger rowIndex = new AtomicInteger(0);
+        //生成标题
+        writeTitle(sheet, rowIndex, titles);
+        //生成表头
+        writeColumnName(sheet, rowIndex, columnNames);
+        //生成数据
+        while (dataIterator.hasNext()) {
+            writeArray(sheet, rowIndex, columnNames, dataIterator.next());
+        }
+    }
+
     /**
      * 创建sheet并写入DataMap对象
      *
@@ -114,7 +136,15 @@ public abstract class ExcelWriter {
         int columnIndex = 0;
         for (String name : columnNames) {
             Cell cell = dataRow.createCell(columnIndex++);
-            cell.setCellValue(data.getOrDefault(name, ""));
+            cell.setCellValue(data.getOrDefault(name, StringUtils.EMPTY));
+        }
+    }
+
+    private void writeArray(Sheet sheet, AtomicInteger rowIndex, String[] columnNames, String[] data) {
+        Row dataRow = sheet.createRow(rowIndex.getAndIncrement());
+        for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) {
+            Cell cell = dataRow.createCell(columnIndex);
+            cell.setCellValue(data.length > columnIndex ? data[columnIndex] : StringUtils.EMPTY);
         }
     }
 

+ 3 - 6
tools-poi/src/main/java/com/qmth/boot/tools/excel/handler/impl/DataMapHandler.java

@@ -38,12 +38,9 @@ public class DataMapHandler implements RowDataHandler {
 
     private void convertDataMap(RowData rowData) {
         DataMap data = new DataMap();
-        data.setValues(rowData.getValues());
-        for (int i = 0; i < columnNames.length; i++) {
-            String value = data.getValue(i);
-            if (value != null) {
-                data.put(columnNames[i], value);
-            }
+        String[] values = rowData.getValues();
+        for (int i = 0; i < columnNames.length && i < values.length; i++) {
+            data.put(columnNames[i], values[i]);
         }
         listener.output(data);
     }

+ 0 - 10
tools-poi/src/main/java/com/qmth/boot/tools/excel/model/DataMap.java

@@ -6,14 +6,4 @@ public class DataMap extends HashMap<String, String> {
 
     private static final long serialVersionUID = -432649361390941243L;
 
-    private String[] values;
-
-    public void setValues(String[] values) {
-        this.values = values;
-    }
-
-    public String getValue(int column) {
-        return column < values.length ? values[column] : null;
-    }
-
 }