Java 在不丢失样式/格式的情况下使用ApachePOI修改现有xlsx表
我需要将数据写入现有模板,其中存储格式,但样式(字体、颜色、边框)会消失。 我做了什么? 加载表格并在其中获取图纸:Java 在不丢失样式/格式的情况下使用ApachePOI修改现有xlsx表,java,excel,apache-poi,Java,Excel,Apache Poi,我需要将数据写入现有模板,其中存储格式,但样式(字体、颜色、边框)会消失。 我做了什么? 加载表格并在其中获取图纸: Workbook xlsxWorkbook = WorkbookFactory.create(new File(filename)); xlsxWorkbook.getSheet(sheetname); 修改如下: while (condition) { Row dataRow = xlsxSheet.getRow(rowIndex); if (dataRow
Workbook xlsxWorkbook = WorkbookFactory.create(new File(filename));
xlsxWorkbook.getSheet(sheetname);
修改如下:
while (condition) {
Row dataRow = xlsxSheet.getRow(rowIndex);
if (dataRow == null) {
dataRow = xlsxSheet.createRow(rowIndex);
}
rowIndex++;
int colIndex = 0;
for (String colName : colNames) {
Cell tmp = dataRow.getCell(colIndex);
if (tmp == null)
tmp = dataRow.createCell(colIndex);
tmp.setCellValue(value);
colIndex++;
}
}
写回文件:
write(params.getProperty("xlsx-filename"), xlsxSheet.getWorkbook());
我对这件事了解多少?
之前我使用了相同的方法,没有空检查,在这种情况下,所有样式都会消失。
现在,若单元格和行不为null(不在java代码中重新创建),则会保存格式,但它们预初始化时的情况会非常不同。有时数据初始化它,有时不初始化,有时具有特定已建立样式的单元格被预先初始化
p、 就我所知,无论是添加新行还是修改现有行,您都希望保护单元格样式。为了实现两者,您可以获取每个单元格或完整行的样式,并设置新的或修改的样式
Row dataRow = xlsxSheet.getRow(rowIndex);
CellStyle currentRowStyle = dataRow .getRowStyle()
Cell tmp = dataRow.getCell(colIndex);
CellStyle currentStyle = tmp.getCellStyle();
如果要添加新行,可以使用此选项获取最后一行号,而不是检查null
值:
int rowCount = sheet.getLastRowNum();
行索引的值是多少。该代码在哪里定义?您想在现有工作表中添加行还是更改行?行索引只是行迭代器,在前面一行“int rowIndex=0;”中定义。我想在clear template上写入数据想在clear template上写入数据,还想修改?那么风格在哪里呢?对不起,我很困惑,根据您发布的代码,您想实现什么?模板只包含样式(所有颜色均为黄色,用于ex),仅适用于将成为结果样式数据的样式的模板如果使用Excel
设置单元格样式,则这可以是一个现有单元格的样式,也可以是该行中所有单元格的行样式,也可以是该列中所有单元格的列样式。在中,我提供了一种方法来获取工作表中单元格的首选样式。这将获取给定单元格的当前样式、行样式或列样式。在实际代码中,我还检查了null check triggered及其在模板上的触发器,因此getRowStyle()和getCellStyle()只需抛出NPE。数据也是未知大小的sql表