使用Coldfusion 8有人可以將圖像嵌入到Excel電子表格(xlsx)中或通過img src鏈接它們?使用ColdFusion 8將圖像添加到Excel文檔中的行
一些背景信息:cf服務器將從產品行中獲取一個excel文檔。基於產品ID和樣式等,我能夠找到或創建一個圖像,作爲第一列添加到現有的Excel文檔中。
我知道coldfusion 9有一個叫做SpreadsheetAddImage的函數,不幸的是我在cf 8上沒有機會升級。
使用Coldfusion 8有人可以將圖像嵌入到Excel電子表格(xlsx)中或通過img src鏈接它們?使用ColdFusion 8將圖像添加到Excel文檔中的行
一些背景信息:cf服務器將從產品行中獲取一個excel文檔。基於產品ID和樣式等,我能夠找到或創建一個圖像,作爲第一列添加到現有的Excel文檔中。
我知道coldfusion 9有一個叫做SpreadsheetAddImage的函數,不幸的是我在cf 8上沒有機會升級。
我不確定你當前用什麼來操作xlsx文件。但是,CF9中的電子表格功能使用POI,顯然也可以在CF8中使用。它只需要更多的低級代碼。
先決條件:
雖然POI捆綁CF8,這是一種古老的版本。您需要更新的版本才能操作.xlsx文件。您可以使用javaLoader - 或 - 替換{cf_root}\lib
文件夾中的現有罐子。 請注意,我不知道更換罐子是否有任何負面影響。
添加圖片:
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仍然缺乏內置函數來插入新列。因此,在將圖像插入第一列之前,您需要將所有現有單元格移到右側。棘手的部分是維護單元格格式,合併單元格等等。
+1令人驚歎的答案。 – Tomalak 2012-04-20 06:26:32
偉大的答案!我朝着這條道路前進,並且很高興得到證實,它是唯一一個將圖像添加到excel pre-cf9中的解決方案。在我的搜索中,我通過'cfsearching'碰到了一個博客,這也得到了一些真正的好消息。 http://cfsearching.blogspot.com/2008/08/adding-image-to-worksheet-with-poi.html。謝謝Leigh! – 2012-04-20 06:54:14
@John - 那麼還有其他選擇(商業庫和非基於Java的產品)。但鑑於POI非常成熟,並且CF9也使用了它,我認爲它是最簡單的選擇。無論如何,很高興它幫助球員:) – Leigh 2012-04-20 14:44:06
你目前如何操縱xlsx? – 2012-04-19 07:31:37