我正在尝试使用Apache POI 3.6 (最新版本)生成Excel报告。
由于POI对页眉和页脚生成(仅文本)的支持有限,因此我决定从一个已准备好页眉的空白excel文件开始,并使用POI填充Excel单元格(参见问题714172)。
不幸的是,当使用POI打开工作簿并将其立即写入磁盘时(没有任何单元格限制),标题似乎丢失了。
下面是我用来测试这个行为的代码:
public final class ExcelWorkbookCreator {
public static void main(String[] args) {
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream(new File("dump.xls"));
InputStream inputStream = ExcelWorkbookCreator.class.getResourceAsStream("report_template.xls");
HSSFWorkbook workbook = new HSSFWorkbook(inputStream, true);
workbook.write(outputStream);
} catch (Exception exception) {
throw new RuntimeException(exception);
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException exception) {
// Nothing much to do
}
}
}
}
}发布于 2013-06-18 19:36:24
只要Excel 97-2003支持这些标头,Excel文件的标头就会一直保留。例如,支持图像(我刚刚尝试过),但不支持彩色文本。
其中棘手的部分是,您的Excel模板文件"dump.xls“必须是Excel97-2003格式。请注意:这不是文件扩展名,而是文件的实际内容。最新的Excel将很乐意将最新的格式保存在.xls文件中,这是POI无法读取的。
要测试这一点,请将您的Excel文件另存为.xls文件。重要信息-如果收到兼容性警告,则必须单击对话框中的“更正”链接以更正Excel。只需单击“继续”即可使Excel文件对POI无效。
一旦你有了一个真正的.xls文件(具有兼容的内容),你的代码就可以工作了。我刚刚自己测试了一下:
public static void main(String[] args) throws Exception {
try (FileInputStream fis = new FileInputStream("./report_template.xls");
FileOutputStream fos = new FileOutputStream("./dump.xls")) {
HSSFWorkbook wb = new HSSFWorkbook(fis);
wb.write(fos);
}
}https://stackoverflow.com/questions/2012433
复制相似问题