0

我无法更新现有的 excel 单元格,这些单元格已合并并有边界。我创建了一个带有样式的 Excel 文件并用作模板。在我的代码中-> 首先读取该 Excel 文件并更新我希望的单元格。没有合并单元格是好的。但是合并的单元格不能插入数据。

它可能会产生损坏的 Excel 文件或空的数据单元格。我不想覆盖现有单元格的合并和边界。这是我的阅读和更新代码..

HashMap<String, ByteArrayOutputStream> streams = new HashMap<String, ByteArrayOutputStream>();
try {
    String appDir = System.getProperty("appDir");
    String resouceDir = appDir + System.getProperty("resourceDir");
    String templateDir = resouceDir + "/template";
    if (streams.keySet().size() <= 0) {
        XSSFSheet sheet = null;
        FileInputStream file = new FileInputStream(new File(templateDir +"/shipping_template.xlsx")); 
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        ByteArrayOutputStream baos = null;
        sheet = workbook.getSheetAt(0);
        XSSFRow shippingRow = sheet.getRow(4);
        Cell cell = shippingRow.createCell((short) 36);
        cell.setCellValue("DOOM Bringer");
        baos = new ByteArrayOutputStream();
        workbook.write(baos);
        streams.put(param, baos);
        baos.close();
        file.close();
    }
}
4

2 回答 2

1

不幸的是,不再支持 Apache POI。他们对 Office 文档的完成方式进行了 Office 2007 的一个版本更改,并且不再支持这一点。我做了同样的事情,你可能想考虑使用 docx4j。但是,无论您实际需要做什么,都可能使用文件流打开一个新文档并将其保存到临时位置并更改新文档,因为如果您尝试对其进行更改,您可能会损坏原始文档。

于 2013-05-13T17:26:54.213 回答
0

这个对我有用

CellRangeAddress region = sheet.getMergedRegion(index);   
int rowNum = region.getFirstRow(); // or region.getLastRow()
int colIndex = region.getFirstColumn(); // or region.getLastColumn()
Cell dateCell = sheet.getRow(rowNum).getCell(colIndex);
dateCell.setCellValue(today.toString("MM/dd/yyyy"));
于 2016-07-14T13:53:32.787 回答