3

こんにちは、xlsxを使用して 1 つのファイルを読み込んXSSFでいますApche POIxlsx今、セルの色を読み取り、新しいファイルに同じ色を適用したいと考えています。どうしよう。私のコードは次のとおりです。

public void readXLSXFile(String filePath) throws FileNotFoundException, IOException
    {
        XSSFRow row;
        XSSFRow new_row;
        XSSFSheet sheet;
        XSSFCell cell;
        XSSFCell new_cell;
        XSSFCellStyle cellStyle;
        XSSFDataFormat dataFormat;
        XSSFColor color;

        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream(filePath));
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet new_sheet = (XSSFSheet) workbook.createSheet();
        for(int i = 0; i < xssfWorkbook.getNumberOfSheets(); i++ )
        {
            sheet = xssfWorkbook.getSheetAt(i);
            for(int j =0; j<sheet.getLastRowNum(); j++)
            {
                row = (XSSFRow) sheet.getRow(j);
                new_row = new_sheet.createRow(j);
                for(int k = 0; k<row.getLastCellNum(); k++)
                {
                    cell = row.getCell(k);
                    new_cell = new_row.createCell(k);
                    cellStyle = workbook.createCellStyle();
                    dataFormat = workbook.createDataFormat();
                    cellStyle.setDataFormat(dataFormat.getFormat(cell.getCellStyle().getDataFormatString()));
                    color = cell.getCellStyle().getFillBackgroundColorColor();
                    cellStyle.setFillForegroundColor(color);
                    new_cell.setCellStyle(cellStyle);
                    System.out.println(cell.getCellStyle().getFillForegroundColor()+"#");
                    switch (cell.getCellType()) {
                    case 0:
                        new_cell.setCellValue(cell.getNumericCellValue());
                        break;
                    case 1:
                        new_cell.setCellValue(cell.getStringCellValue());
                        break;
                    case 2:
                        new_cell.setCellValue(cell.getNumericCellValue());
                        break;
                    case 3:
                        new_cell.setCellValue(cell.getStringCellValue());
                        break;
                    case 4:
                        new_cell.setCellValue(cell.getBooleanCellValue());
                        break;
                    case 5:
                        new_cell.setCellValue(cell.getErrorCellString());
                        break;
                    default:
                        new_cell.setCellValue(cell.getStringCellValue());
                        break;
                    }
                }
            }
        }
        workbook.write(new FileOutputStream("G:\\lalit.xlsx"));
    }

私はApche POI 3.8を使用しています。

4

2 に答える 2

7

vikiiiiの回答にコメントを投稿しました。もう少し広げてみようと思いました。彼の答えは HSSF (.xls) に固有のものですが、HSSF クラスと XSSF クラスの両方が同じインターフェイスから派生しているため、コードは同じです。HSSF の代わりに XSSF を使用するだけです。色を再利用したい場合は、次を使用することをお勧めします。

XSSFColor bgColor = xssfCell.getCellStyle().getFillBackgroundColorColor();

Javadoc については、こちらを参照してください。新しいセルをその色に設定するには、これを使用できます

secondCell.getCellStyle().setFillBackgroundColor(bgColor);

XSSF および HSSF クラスの派生元であるインターフェイスを確認し、コードで xls ファイルと xlsx ファイルの両方を処理できるようにすることを検討することをお勧めします。私が知る限り、唯一の違いは、WorkbookFactoryを使用してワークブックをセットアップする方法です。

于 2012-05-16T10:55:28.113 に答える
3

このコードを使用して、セルの色を取得できます。

cell.getCellStyle().getFillBackgroundColor();

試す

HSSFColor.getIndexHash().get(myCell.getCellStyle().getFillBackgroundColor())
于 2012-05-16T09:30:06.537 に答える