Java 当我更改标题(列标题)中任何单元格的值时,Excel文件损坏

Java 当我更改标题(列标题)中任何单元格的值时,Excel文件损坏,java,excel,apache-poi,Java,Excel,Apache Poi,我尝试使用JavaPOI读取和保存Xslx文件,编辑并保存它。但是,当我更改第0行(标题)上的任何单元格值时,输出文件就会损坏 Excel可以通过修复/xl/tables/Table.xm中的Table来恢复文件 FileInputStream file = new FileInputStream("inventorywithbin431.xlsx"); XSSFWorkbook workbook = (XSSFWorkbook) WorkbookFactory.create(f

我尝试使用JavaPOI读取和保存Xslx文件,编辑并保存它。但是,当我更改第0行(标题)上的任何单元格值时,输出文件就会损坏

Excel可以通过修复/xl/tables/Table.xm中的Table来恢复文件

    FileInputStream file = new FileInputStream("inventorywithbin431.xlsx");
    XSSFWorkbook workbook = (XSSFWorkbook) WorkbookFactory.create(file);
    XSSFSheet rawdata = workbook.getSheetAt(0);

    String[] headers = new String[] { "ItemCodeNoFRU","Company","ItemCode","ItemName","ItemGroup","PartNumber","Warehouse","Segment","Bin","WareHouseQty","OnOrder","IsCommited","BinQty","Cost","BinExtCost"};

    //Set Header
    for(int i=0;i<14;i++)
        rawdata.getRow(0).getCell(i).setCellValue(headers[i]);

    file.close();
    //write changes
    try ( 
        FileOutputStream output_file = new FileOutputStream("inventorywithbin431.xlsx")) {
        workbook.write(output_file);
        output_file.flush();
        output_file.close();
    } 
FileInputStream file=newfileinputstream(“inventorywithbin431.xlsx”);
XSSF工作簿=(XSSF工作簿)WorkbookFactory.create(文件);
XSSFSheet rawdata=workbook.getSheetAt(0);
字符串[]头=新字符串[]{“ItemCodeNoFRU”、“公司”、“ItemCode”、“ItemName”、“ItemGroup”、“PartNumber”、“Warehouse”、“Segment”、“Bin”、“WareHouseQty”、“OnOrder”、“IsCommitted”、“BinQty”、“Cost”、“BinExtCost”};
//设置标题

对于(int i=0;ii),如果存在
/xl/tables/table[n].xml
,则标题是Excel表格对象的一部分。如果是,则标题将是
/xl/worksheets/sheet[n]中的单元格内容。xml
以及
/xl/tables/table[n]中的列名.xml
,可能是.xml的一部分。因此,如果您想更改标题,您必须在那里全部更改,而不仅仅是单元格内容。这将是一项非常复杂的任务。我会重新考虑我的方法,以便不会发生这种情况necessary@AxelRichter谢谢!知道我想避免与用户进行任何手动交互,您建议采用什么方法excel文件?问题是:为什么您认为有必要更改现有表对象的标题?如前所述,这些标题也是表的列名,可能是结构化引用公式的一部分。所有这些都需要更改。@AxelRichter,谢谢您的提示。我将基于源创建一个新工作簿等一下。这应该可以解决问题了。我会让你随时更新。问候!@AxelRichter它确实有效。谢谢!