Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不丢失样式/格式的情况下使用ApachePOI修改现有xlsx表_Java_Excel_Apache Poi - Fatal编程技术网

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表