Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 使用coldfusion 8向excel文档中的行添加图像_Image_Excel_Coldfusion_Export To Excel - Fatal编程技术网

Image 使用coldfusion 8向excel文档中的行添加图像

Image 使用coldfusion 8向excel文档中的行添加图像,image,excel,coldfusion,export-to-excel,Image,Excel,Coldfusion,Export To Excel,使用Coldfusion 8,是否有人能够将图像嵌入excel电子表格(xlsx)或通过img src链接它们 一些背景信息:cf服务器将获取包含产品行的excel文档。基于产品id和样式等,我能够找到或创建一个图像,该图像作为第一列添加到现有excel文档中 我知道coldfusion 9有一个名为Spreadsheet AddImage的函数,不幸的是,我使用的是cf 8,没有机会升级。我不确定您当前正在使用什么操作xlsx文件。然而,CF9中的电子表格功能利用了,显然也可以从CF8中使用。

使用Coldfusion 8,是否有人能够将图像嵌入excel电子表格(xlsx)或通过img src链接它们

一些背景信息:cf服务器将获取包含产品行的excel文档。基于产品id和样式等,我能够找到或创建一个图像,该图像作为第一列添加到现有excel文档中


我知道coldfusion 9有一个名为Spreadsheet AddImage的函数,不幸的是,我使用的是cf 8,没有机会升级。

我不确定您当前正在使用什么操作xlsx文件。然而,CF9中的电子表格功能利用了,显然也可以从CF8中使用。它只需要多一点低级代码

先决条件:

虽然POI与CF8捆绑在一起,但它是一个旧版本。您需要更新的版本来操作.xlsx文件。您可以使用或替换
{cf_root}\lib
文件夹中的现有JAR。注意,我不知道更换罐子是否有任何负面影响

添加图像:

Excel实际上不支持
标记,只支持超链接。但是,您可以像SpreadsheetAddImage一样在工作簿中嵌入图像。如POI所述,基本流程为:

  • 使用WorkBookFactory加载xlsx文件
  • 抓取每个图像的二进制文件并将其添加到工作簿中
  • 将每个图像定位到所需的单元格
  • 将修改后的工作簿保存回磁盘
  • 示例:


    
    // .. 
    //使用javaLoader加载xlsx文件
    factory=loader.create(“org.apache.poi.ss.usermodel.WorkbookFactory”);
    input=loader.create(“java.io.FileInputStream”).init(“c:/path/to/someFile.xlsx”);
    工作簿=工厂。创建(输入);
    input.close();
    //获取所需的图纸并加载辅助对象(一次)
    sheet=workbook.getSheet(“您的工作表名称”);
    父权制=sheet.createDrawing父权制();
    helper=workbook.getCreationHelper();
    //将图像添加到工作簿中
    imageBytes=fileReadBinary(“c:/path/to/someImage.jpg”);
    imageIndex=workbook.addPicture(imageBytes,workbook.PICTURE\u TYPE\u JPEG);
    //将图片锚定到第一个单元格,即A1
    anchor=helper.createClientAnchor();
    setRow1(javacast(“int”,0));//第一个单元格的行(从零开始)
    setCol1(javacast(“int”,0));//第一个单元格的列(从零开始)
    picture=家长.createPicture(锚定,图像索引);
    picture.resize();//仅支持jpg和png
    //将其保存回磁盘
    outstream=loader.create(“java.io.FileOutputStream”).init(“c:/path/to/outFile.xlsx”);
    练习册。写(扩展);
    冲水;
    exptream.close();
    

    新列
    具有讽刺意味的是,插入一个新列比添加一个图像要复杂得多。上次我检查时,POI仍然缺少插入新列的内置功能。因此,在将图像插入第一列之前,您需要将所有现有单元格向右移动。棘手的部分是维护单元格格式、合并单元格等。

    您是如何做到的巧妙地操作xlsx?回答得很好!我正沿着这条道路前进,很高兴得到确认,这是将图像添加到excel pre-cf9的唯一解决方案。在我的搜索中,我在“cfsearching”的博客上看到了一些非常好的信息。谢谢Leigh!@John-还有其他选择(包括商业库和非基于java的产品)。但鉴于POI已经相当成熟,而且CF9也使用了它,我认为这是最简单的选择。无论如何,很高兴它帮助了大家:)
    <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>