使用Apache Poi时设置单元格的颜色和格式不起作用

时间:2015-03-23 02:56:16

标签: java apache

我一直在考虑解决问题的日子。无论如何,我正在做一个程序,其中apache将整个工作表复制到工作簿中的另一个工作表。目前,我的代码可以复制内容,但不能复制工作表的颜色和格式。请帮忙,因为我真的不确定如何继续。谢谢。

 int rowReadIndent = 0;
            int columnReadIndent = 0;
            int rowWriteIndent = 0;
            int columnWriteIndent = 0;

            ArrayList<ArrayList<ArrayList<Object>>> lists = new ArrayList<ArrayList<ArrayList<Object>>>();
            ArrayList<ArrayList<ArrayList<Short>>> cellColorLists = new ArrayList<ArrayList<ArrayList<Short>>>();
            //ArrayList<ArrayList<ArrayList<XSSFCellStyle>>> cellStyleLists = new ArrayList<ArrayList<ArrayList<XSSFCellStyle>>>();
            ArrayList<String> sheetNameList = new ArrayList<String>();

            for(int i = 0; i < fileArrayList.size(); i++) {

                OPCPackage pkg = OPCPackage.open(new FileInputStream(desktop + "/test/" + fileArrayList.get(i)));
                XSSFWorkbook wb = new XSSFWorkbook(pkg);

                Sheet sheet1 = wb.getSheetAt(0);
                lists.add(new ArrayList<>());
                //cellStyleLists.add(new ArrayList<ArrayList<XSSFCellStyle>>());
                cellColorLists.add(new ArrayList<>());
                sheetNameList.add(sheet1.getSheetName());

                for(int j = 0; j < 50; j++) {
                    Row row1 = sheet1.getRow(j + rowReadIndent);
                    lists.get(i).add(new ArrayList<>());
                    //cellStyleLists.get(i).add(new ArrayList<XSSFCellStyle>());
                    cellColorLists.get(i).add(new ArrayList<>());
                    if(row1 != null) {
                        for(int k = 0; k < 50; k++) {
                            Cell cell1 = row1.getCell(k + columnReadIndent, Row.RETURN_BLANK_AS_NULL);
                            if(cell1 != null){
                                Object o = null;

                                int type = cell1.getCellType();
                                if(type == Cell.CELL_TYPE_FORMULA) {
                                    type = cell1.getCachedFormulaResultType();
                                }

                                switch (type) {
                                    case Cell.CELL_TYPE_STRING:
                                        o = cell1.getRichStringCellValue().getString();
                                        break;
                                    case Cell.CELL_TYPE_NUMERIC:
                                        if (DateUtil.isCellDateFormatted(cell1)) {
                                            o = cell1.getDateCellValue();
                                        } else {
                                            o = cell1.getNumericCellValue();
                                        }
                                        break;
                                    case Cell.CELL_TYPE_BOOLEAN:
                                        o = cell1.getBooleanCellValue();
                                        break;
                                }
                                //XSSFCellStyle cellStyle = new XSSFCellStyle(new StylesTable());
                                //cellStyle.cloneStyleFrom(cell1.getCellStyle());
                                //cellStyleLists.get(i).get(j).add(cellStyle);
                                XSSFCellStyle cellStyle = new XSSFCellStyle(new StylesTable());
                                cellStyle = (XSSFCellStyle) cell1.getCellStyle();
                                cellColorLists.get(i).get(j).add(cellStyle.getFillBackgroundColor());
                                lists.get(i).get(j).add(o);
                            }
                            else {
                                lists.get(i).get(j).add(null);
                            }
                        }
                    }
                }
                pkg.close();
            }

            OPCPackage pkg1 = OPCPackage.open(new FileInputStream(desktop + "/test/Output Graph.xlsx"));
            XSSFWorkbook wb1 = new XSSFWorkbook(pkg1);

            FileOutputStream stream = new FileOutputStream(desktop + "/Output Graph4.xlsx" /*+ name + ".xlsx"*/);

            for(int i = 0; i < lists.size(); i++) {
                Sheet sheet1 = wb1.createSheet();
                wb1.setSheetName(wb1.getSheetIndex(sheet1), sheetNameList.get(i));

                for(int j = 0; j < lists.get(i).size(); j++) {
                    Row row1 = sheet1.createRow(j + rowWriteIndent);

                    for(int k = 0; k < lists.get(i).get(j).size(); k++) {
                        Cell cell1 = row1.createCell(k + columnWriteIndent);
                        //cell1.setCellStyle(cellStyleLists.get(i).get(j).get(k));
                        //XSSFCellStyle cellStyle = new XSSFCellStyle(new StylesTable());
                        //cellStyle = (XSSFCellStyle) cell1.getCellStyle();
                        //cellStyle.setFillBackgroundColor(cellColorLists.get(i).get(j).get(k));
                        if(lists.get(i).get(j).get(k) != null) {
                            switch (lists.get(i).get(j).get(k).getClass().getSimpleName()) {
                                case "String":
                                    cell1.setCellValue((String)lists.get(i).get(j).get(k));
                                    break;
                                case "Date":
                                    cell1.setCellValue((Date)lists.get(i).get(j).get(k));
                                    break;
                                case "Double":
                                    cell1.setCellValue((Double)lists.get(i).get(j).get(k));
                                    break;
                                case "Boolean":
                                    cell1.setCellValue((Boolean)lists.get(i).get(j).get(k));
                                    break;
                            }
                        }
                    }
                }
            }


           /* Sheet sheet1;
            Row row1;
            Row row2;
            Cell cell1;

            for(int j = 0; j < lists.size(); j++) {
                wb1.cloneSheet(0);
                sheet1 = wb1.getSheetAt(j+1);

                row1 = sheet1.createRow(1);
                row2 = sheet1.createRow(0);
                for(int i = 0; i < lists.get(j).size(); i++) {
                    cell1 = row1.createCell(i);
                    cell1.setCellType(Cell.CELL_TYPE_NUMERIC);
                    //cell1.setCellValue(lists.get(j).get(i));
                    System.out.println("Stored: "+lists.get(j).get(i));
                }
                  for(int i = 0; i < lists1.get(j).size(); i++) {
                    cell1 = row2.createCell(i);
                    cell1.setCellType(Cell.CELL_TYPE_NUMERIC);
                    cell1.setCellValue(lists1.get(j).get(i));
                    System.out.println("Stored: "+lists1.get(j).get(i));
                }
            }*/

            wb1.write(stream);
            stream.close();
            pkg1.close();

            Desktop.getDesktop().open(new File(desktop + "/Output Graph4.xlsx"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(status.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(status.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvalidFormatException ex) {
            Logger.getLogger(status.class.getName()).log(Level.SEVERE, null, ex);
        }

    }                                        

0 个答案:

没有答案