Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь ввести какой-либо стиль в какую-либо конкретную ячейку, один и тот же стиль применяется ко всей книге, даже к листам, к которым у меня нет доступа (дополнительные листы представлены в конце).
например, когда я использую метод setFillForegroundColor () для headerCell, он помещает один и тот же цвет во все ячейки после той, которую я пытаюсь изменить. Та же проблема произошла и с dataCell, когда я попытался установить для них границы (код прокомментирован)
Они влияют только на ячейки, в которых ранее не было данных. Ячейки, имеющие данные до запуска моей программы (я пытаюсь добавить / изменить листы с уже существующими данными), остаются неизменными. Я все еще не могу найти проблему.
Ниже приведен весь код моего метода.
private void prepareDataForExcel() {
try {
System.out.println(dataMap);
String sheetNameMapArr[] = props.getProperty("sheetNameMap").split(",");
XSSFWorkbook workbook = new XSSFWorkbook(OPCPackage.open(new File("mydata.xlsx").getAbsolutePath()));
for (String sheetMap : sheetNameMapArr) {
String table = sheetMap.split("~")[0];
String sheetNm = sheetMap.split("~")[1];
int rowNum = 0;
String headerArr[] = null;
String opDataArr[] = dataMap.get(table).toString().split(",");
XSSFSheet sheet = workbook.getSheet(sheetNm);
XSSFRow row = sheet.getRow(rowNum);
int lstCol = row.getLastCellNum();
// Setting Headers
String headerMapArr[] = props.getProperty("tableHeaderMap").split(";");
for (String header : headerMapArr) {
if (header.split("~")[0].equalsIgnoreCase(table)) {
headerArr = header.split("~")[1].split(",");
}
}
int headerIndx = lstCol;
if (headerArr != null) {
++rowNum;
for (String header : headerArr) {
XSSFCell headerCell = row.createCell(headerIndx, Cell.CELL_TYPE_STRING);
++headerIndx;
headerCell.setCellValue(header);
headerCell.getCellStyle()
.setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 255, 204)));
headerCell.getCellStyle().setFillPattern(FillPatternType.SOLID_FOREGROUND);
}
}
// Setting Date
String dt = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
row = sheet.getRow(rowNum);
if (headerIndx > lstCol)
sheet.addMergedRegion(
new CellRangeAddress(rowNum, rowNum, lstCol, lstCol + (headerIndx - lstCol - 1)));
XSSFCell dtCell = row.createCell(lstCol, Cell.CELL_TYPE_STRING);
dtCell.setCellValue(dt);
// Populating Data
int dataRowIndx = ++rowNum;
int dataColIndx = lstCol;
for (String tableData : opDataArr) {
String dataArr[] = tableData.split("~");
for (String data : dataArr) {
row = sheet.getRow(dataRowIndx);
if (row == null)
row = sheet.createRow(dataRowIndx);
XSSFCell dataCell = row.createCell(dataColIndx, Cell.CELL_TYPE_STRING);
++dataColIndx;
if (isNumeric(data))
dataCell.setCellValue(Double.valueOf(data));
else
dataCell.setCellValue(data);
// dataCell.getCellStyle().setBorderBottom(XSSFCellStyle.BORDER_THIN);
// dataCell.getCellStyle().setBorderLeft(XSSFCellStyle.BORDER_THIN);
// dataCell.getCellStyle().setBorderRight(XSSFCellStyle.BORDER_THIN);
// dataCell.getCellStyle().setBorderTop(XSSFCellStyle.BORDER_THIN);
}
++dataRowIndx;
dataColIndx = lstCol;
}
}
FileOutputStream fileOut = new FileOutputStream(new File("mydata_res.xlsx"));
workbook.write(fileOut);
fileOut.close();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}