2012-04-19 90 views
3

使用Coldfusion 8有人可以將圖像嵌入到Excel電子表格(xlsx)中或通過img src鏈接它們?使用ColdFusion 8將圖像添加到Excel文檔中的行

一些背景信息:cf服務器將從產品行中獲取一個excel文檔。基於產品ID和樣式等,我能夠找到或創建一個圖像,作爲第一列添加到現有的Excel文檔中。

我知道coldfusion 9有一個叫做SpreadsheetAddImage的函數,不幸的是我在cf 8上沒有機會升級。

+1

你目前如何操縱xlsx? – 2012-04-19 07:31:37

回答

1

我不確定你當前用什麼來操作xlsx文件。但是,CF9中的電子表格功能使用POI,顯然也可以在CF8中使用。它只需要更多的低級代碼。

先決條件:

雖然POI捆綁CF8,這是一種古老的版本。您需要更新的版本才能操作.xlsx文件。您可以使用javaLoader - 或 - 替換{cf_root}\lib文件夾中的現有罐子。 請注意,我不知道更換罐子是否有任何負面影響。

添加圖片:

Excel不真正支持<img>標籤,只有超鏈接。但是,您可以像SpreadsheetAddImage那樣在工作簿中嵌入圖像。正如POI的Busy Developers Guide概述,基本過程是:

  1. 負載與WorkBookFactory
  2. 抓住每個圖像的二進制文件,並將其添加到工作簿
  3. 定位每個圖像所需的細胞XLSX文件
  4. 保存修改後的工作簿回到磁盤

實施例:


<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仍然缺乏內置函數來插入新列。因此,在將圖像插入第一列之前,您需要將所有現有單元格移到右側。棘手的部分是維護單元格格式,合併單元格等等。

+0

+1令人驚歎的答案。 – Tomalak 2012-04-20 06:26:32

+0

偉大的答案!我朝着這條道路前進,並且很高興得到證實,它是唯一一個將圖像添加到excel pre-cf9中的解決方案。在我的搜索中,我通過'cfsearching'碰到了一個博客,這也得到了一些真正的好消息。 http://cfsearching.blogspot.com/2008/08/adding-image-to-worksheet-with-poi.html。謝謝Leigh! – 2012-04-20 06:54:14

+0

@John - 那麼還有其他選擇(商業庫和非基於Java的產品)。但鑑於POI非常成熟,並且CF9也使用了它,我認爲它是最簡單的選擇。無論如何,很高興它幫助球員:) – Leigh 2012-04-20 14:44:06

相關問題