Coldfusion 未创建Apache POI XSSF头

Coldfusion 未创建Apache POI XSSF头,coldfusion,apache-poi,coldfusion-10,Coldfusion,Apache Poi,Coldfusion 10,在我尝试创建xlsx时,我一直在创建头文件。我可以创建一个包含行和合并单元格的文件,但标题似乎从来都不起作用。以下是我所拥有的: var WorkBook = CreateObject( "java", "org.apache.poi.xssf.usermodel.XSSFWorkbook" ).Init(); var Sheet = WorkBook.CreateSheet( JavaCast( "string", 'my sheetname' ) ); // c

在我尝试创建xlsx时,我一直在创建头文件。我可以创建一个包含行和合并单元格的文件,但标题似乎从来都不起作用。以下是我所拥有的:

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();
当我运行此代码时,不会抛出任何错误。该文件已创建,可以在不引发任何错误的情况下打开,但不会显示任何标题。正如我所说,如果我创建行/单元格而不是标题,那么这些行/单元格的创建是正确的。我错过了什么

编辑: 正如Leigh在下面指出的,页眉/页脚在Excel中的含义与我在PDF中的想法不同。在Excel中添加一个标题会在第一行上方显示,这让我很反感,我认为通过POI添加一个标题也会做同样的事情。

(从评论中升级,以防答案对下一个家伙有用)


愚蠢的问题,但是您如何验证标题不存在?在Excel中

…正常情况下,工作表上不显示页眉和页脚 视图-它们仅显示在页面布局视图和打印页面上 页数

FWIW,在我填充了至少一个单元格(所以有东西要打印)之后,在CF10和CF11下,代码对我来说运行良好


工作簿=CreateObject(“java”,“org.apache.poi.xssf.usermodel.XSSFWorkbook”).Init();
sheet=WorkBook.CreateSheet(JavaCast(“字符串”,“我的sheetname”);
header=sheet.getHeader();//还尝试了getEvenHeader()和getOddHeader()
header.setText(“&LLeft节”);
//添加一些数据以便打印
sheet.createRow(0).createCell(0).setCellValue(“样本值”);
//使用二进制流,因为trycf.com出于安全原因不支持文件
baos=createObject(“java”,“java.io.ByteArrayOutputStream”).init();
//将工作簿数据写入二进制流
练习册。书写(BAS);
baos.close();

这是个愚蠢的问题,但您如何验证标题是否不存在?它们只应在打印(或打印预览)时出现。FWIW,在填充了至少一个单元格后,上面的代码对我来说工作得很好(即有东西要打印)。你说的“头”是什么意思?表格的第一行?打印头?还有别的吗?@Leigh-hmmm。。。。。我认为它们应该显示出来,因为当我在Excel中插入标题时,它确实出现在第一行的上方。我有一个(显然是错误的)假设,即如果我以编程方式创建一个标题,它将以相同的方式显示。那么在Excel中,页眉/页脚是严格用于打印的吗?我想现在想想,这是有道理的。把它归档在D'oh下!!!我想,由于我花了大量时间研究PDF导出,其中页眉和页脚的含义完全不同,所以我开始关注这个模型。是的,;-)“…页眉和页脚不以正常视图显示在工作表上-它们仅在页面布局视图和打印页面上显示。”
<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()#">