1. 程式人生 > >poi 讀寫Excel小工具 部分原始碼

poi 讀寫Excel小工具 部分原始碼




功能  如果匹配條件相同 則把路徑2 的值賦值到路徑一


部分原始碼

  //獲取表名
    public static String[] getSheetNames(String filePath) {
        String[] s = null;
        Workbook wb1 = null;
        InputStream in = null;
        try {
            in = new FileInputStream(filePath);
            wb1 = WorkbookFactory.create(in);
            s = new String[wb1.getNumberOfSheets()];
            for (int i = 0; i < wb1.getNumberOfSheets(); i++) {
                s[i] = wb1.getSheetName(i);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "當前excel表不能解析~" + filePath,
                    "錯誤", JOptionPane.ERROR_MESSAGE);
        } finally {
            try {
                wb1.close();
                in.close();
            } catch (Exception e2) {
            }
        }
        return s;

    }


    public boolean transferSimple(String path1, String path2,
            String sheetname1, String sheetname2, List<String> mates,
            String[] values, String follow) {
        // 記錄空行
        List<Integer> nullRow = new ArrayList<Integer>();
        POIExcelUtil a = new POIExcelUtil(path1.trim());
        POIExcelUtil b = new POIExcelUtil(path2.trim());

        // 獲取表民
        Sheet s1 = a.wb.getSheet(sheetname1.trim());
        Sheet s2 = b.wb.getSheet(sheetname2.trim());
        isSheetNull(s1, s2);

        // 匹配條件 mate A:B C:D 匹配賦值必須有: 沒有則程式提前結束
        if (!mateString(mates, values)) {
            return false;
        }

        // map 存資料 使存入的資料有序
        Map<String, LinkedList<String>> map = new LinkedHashMap<String, LinkedList<String>>();

        // 左表和元資料進行匹配 相同存入map
        for (int i = 0; i <= s1.getLastRowNum(); i++) {
            Row row1 = s1.getRow(i);
            // 獲取 aindex1的系列值 aindex2 aindex3
            String cellvalue1 = "";

            boolean isNull = false;
            // 根據匹配條件去拼接
            for (int k = 0; k < mates.size(); k++) {
                String p = mates.get(k).split(":")[0];
                int index1 = columnNumber(p);
                // 出現空指標異常
                Cell cell1 = null;
                try {
                    cell1 = row1.getCell(index1);
                } catch (NullPointerException e) {
                    // TODO: handle exception 如果 getCell如果為空行 解決問題
                    System.out.println("出現空行問題");
                    isNull = true;

                }
                // 先設定Cell的型別,然後就可以把純數字作為String型別讀進來了

                if (null != cell1) {
                    setCellType(cell1);
                    if (null == cell1.getStringCellValue()
                            || "".equals(cell1.getStringCellValue())) {
                        cellvalue1 += " ||";
                    } else {
                        cellvalue1 += cell1.getStringCellValue() + "||";
                    }
                } else {
                    cellvalue1 += " ||";
                }

            }
            // 如果出現空指標異常 也就是空行
            if (isNull) {
                // 記錄空行 迴圈結束
                nullRow.add(i);
                continue;
            }
            // 如果匹配成功 mateId++ 如果一直匹配不到 mateId=0 ->map+
            matesALl(mates, values, s2, map, cellvalue1, follow, row1);
            // 遍歷 row2把 row2這一行存入linkedList H I
        }

        if (isString(follow)) {
            transferPOIwritee(a, sheetname1, map, mates, values, nullRow,
                    follow);
        } else {
            transferPOIwritee(a, sheetname1, map, mates, values, nullRow);
        }
        return true;
    }