Apache POI XSSF header 未创建
Apache POI XSSF header not created
在尝试创建 xlsx 时,我一直坚持创建 headers。我能够创建一个包含行和合并单元格的文件,但 headers 似乎永远无法工作。这是我拥有的:
var WorkBook = CreateObject(
"java",
"org.apache.poi.xssf.usermodel.XSSFWorkbook"
).Init();
var Sheet = WorkBook.CreateSheet(
JavaCast( "string", 'my sheetname' )
);
// create the default header if it doesn't exist
var header = sheet.getHeader(); // have also tried getEvenHeader() and getOddHeader()
header.setText('&LLeft Section');
// have also tried the following:
//header.setLeft('left header');
//header.setCenter('CENTER');
//header.setRight('right header');
// open the file stream
var FileOutputStream = CreateObject(
"java",
"java.io.FileOutputStream"
).Init(
JavaCast( "string", filename )
);
// Write the workbook data to the file stream.
WorkBook.Write(
FileOutputStream
);
// Close the file output stream.
FileOutputStream.Close();
当我运行这段代码时,没有抛出任何错误。该文件已创建并且可以打开而不会引发任何错误,但没有出现 header。就像我说的那样,如果我创建 rows/cells 而不是 header,那么它们就会正确创建。我错过了什么?
编辑:
正如 Leigh 在下面指出的那样,headers/footers 在 Excel 中的含义与我对它们的看法(如在 PDF 中)不同。我被在 Excel 中添加 header 显示在第一行上方的方式所抛弃,并认为通过 POI 添加一个会做同样的事情。
(从评论中提升,以防答案对下一个人有帮助)
愚蠢的问题,但是您如何验证 headers 不存在?在Excel、headers and footers should only be visible when printing (or in print preview mode)。
...Headers and footers are not displayed on the worksheet in Normal
view — they are displayed only in Page Layout view and on the printed
pages.
FWIW,代码在 CF10 和 11 下对我来说工作正常,在我填充至少一个单元格后(所以有东西要打印)。
<cfscript>
workBook = CreateObject( "java", "org.apache.poi.xssf.usermodel.XSSFWorkbook").Init();
sheet = WorkBook.CreateSheet( JavaCast( "string", 'my sheetname' ) );
header = sheet.getHeader(); // have also tried getEvenHeader() and getOddHeader()
header.setText('&LLeft Section');
// add some data so there is something to print
sheet.createRow(0).createCell(0).setCellValue("sample value");
// Using binary stream because trycf.com does not support files for security reasons
baos = createObject("java", "java.io.ByteArrayOutputStream").init();
// Write the workbook data to the binary stream
workBook.write( baos );
baos.close();
</cfscript>
<!--- CF10 lacks support for script version of cfcontent --->
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
variable="#baos.toByteArray()#">
在尝试创建 xlsx 时,我一直坚持创建 headers。我能够创建一个包含行和合并单元格的文件,但 headers 似乎永远无法工作。这是我拥有的:
var WorkBook = CreateObject(
"java",
"org.apache.poi.xssf.usermodel.XSSFWorkbook"
).Init();
var Sheet = WorkBook.CreateSheet(
JavaCast( "string", 'my sheetname' )
);
// create the default header if it doesn't exist
var header = sheet.getHeader(); // have also tried getEvenHeader() and getOddHeader()
header.setText('&LLeft Section');
// have also tried the following:
//header.setLeft('left header');
//header.setCenter('CENTER');
//header.setRight('right header');
// open the file stream
var FileOutputStream = CreateObject(
"java",
"java.io.FileOutputStream"
).Init(
JavaCast( "string", filename )
);
// Write the workbook data to the file stream.
WorkBook.Write(
FileOutputStream
);
// Close the file output stream.
FileOutputStream.Close();
当我运行这段代码时,没有抛出任何错误。该文件已创建并且可以打开而不会引发任何错误,但没有出现 header。就像我说的那样,如果我创建 rows/cells 而不是 header,那么它们就会正确创建。我错过了什么?
编辑: 正如 Leigh 在下面指出的那样,headers/footers 在 Excel 中的含义与我对它们的看法(如在 PDF 中)不同。我被在 Excel 中添加 header 显示在第一行上方的方式所抛弃,并认为通过 POI 添加一个会做同样的事情。
(从评论中提升,以防答案对下一个人有帮助)
愚蠢的问题,但是您如何验证 headers 不存在?在Excel、headers and footers should only be visible when printing (or in print preview mode)。
...Headers and footers are not displayed on the worksheet in Normal view — they are displayed only in Page Layout view and on the printed pages.
FWIW,代码在 CF10 和 11 下对我来说工作正常,在我填充至少一个单元格后(所以有东西要打印)。
<cfscript>
workBook = CreateObject( "java", "org.apache.poi.xssf.usermodel.XSSFWorkbook").Init();
sheet = WorkBook.CreateSheet( JavaCast( "string", 'my sheetname' ) );
header = sheet.getHeader(); // have also tried getEvenHeader() and getOddHeader()
header.setText('&LLeft Section');
// add some data so there is something to print
sheet.createRow(0).createCell(0).setCellValue("sample value");
// Using binary stream because trycf.com does not support files for security reasons
baos = createObject("java", "java.io.ByteArrayOutputStream").init();
// Write the workbook data to the binary stream
workBook.write( baos );
baos.close();
</cfscript>
<!--- CF10 lacks support for script version of cfcontent --->
<cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
variable="#baos.toByteArray()#">