使用 Coldfusion 8 是否有人能够将图像嵌入到 excel 电子表格 (xlsx) 中或通过 img src 链接它们?
一些背景信息:cf 服务器将获取一个带有产品行的 excel 文档。基于产品 id 和样式等,我能够找到或创建一个图像,该图像作为第一列添加到现有的 excel 文档中。
我知道 Coldfusion 9 有一个名为 SpreadsheetAddImage 的功能,不幸的是我在 cf 8 上没有机会升级。
使用 Coldfusion 8 是否有人能够将图像嵌入到 excel 电子表格 (xlsx) 中或通过 img src 链接它们?
一些背景信息:cf 服务器将获取一个带有产品行的 excel 文档。基于产品 id 和样式等,我能够找到或创建一个图像,该图像作为第一列添加到现有的 excel 文档中。
我知道 Coldfusion 9 有一个名为 SpreadsheetAddImage 的功能,不幸的是我在 cf 8 上没有机会升级。
我不确定您当前使用什么来操作 xlsx 文件。但是,CF9 中的电子表格功能利用了POI,显然也可以从 CF8 中使用。它只需要更多的低级代码。
先决条件:
虽然 POI 与 CF8 捆绑在一起,但它是一个旧版本。您需要更新版本来操作 .xlsx 文件。您可以使用javaLoader - 或 - 替换{cf_root}\lib
文件夹中的现有 jar。请注意,我不知道更换罐子是否有任何负面影响。
添加图像:
Excel 并不真正支持<img>
标签,只支持超链接。但是,您可以像 SpreadsheetAddImage 那样在工作簿中嵌入图像。正如 POI 的Busy Developers Guide中所述,基本流程是:
例子:
<cfscript>
// ..
// load the xlsx file with the javaLoader
factory = loader.create("org.apache.poi.ss.usermodel.WorkbookFactory");
input = loader.create("java.io.FileInputStream").init( "c:/path/to/someFile.xlsx" );
workbook = factory.create( input );
input.close();
// get the desired sheet and load helper objects (once)
sheet = workbook.getSheet("Your Sheet Name");
patriarch = sheet.createDrawingPatriarch();
helper = workbook.getCreationHelper();
// add the image to the workbook
imageBytes = fileReadBinary( "c:/path/to/someImage.jpg" );
imageIndex = workbook.addPicture( imageBytes, workbook.PICTURE_TYPE_JPEG );
// anchor the picture to the first cell ie A1
anchor = helper.createClientAnchor();
anchor.setRow1( javacast("int", 0) ); // row of first cell (zero based)
anchor.setCol1( javacast("int", 0) ); // column of first cell (zero based)
picture = patriarch.createPicture( anchor, imageIndex );
picture.resize(); // only supported for jpg and png
// save it back to disk
outstream = loader.create("java.io.FileOutputStream").init( "c:/path/to/outFile.xlsx"" );
workbook.write( outstream );
outstream.flush();
outstream.close();
</cfscript>
新列 具有讽刺意味的是,插入新列比添加图像更棘手。最后我检查了一下,POI 仍然缺少用于插入新列的内置函数。因此,在将图像插入第一列之前,您需要将所有现有单元格向右移动。棘手的部分是维护单元格格式、合并单元格等。