Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
可以使用coldfusion读取excel工作表上单元格的背景色吗_Excel_Coldfusion_Colors_Cfspreadsheet - Fatal编程技术网

可以使用coldfusion读取excel工作表上单元格的背景色吗

可以使用coldfusion读取excel工作表上单元格的背景色吗,excel,coldfusion,colors,cfspreadsheet,Excel,Coldfusion,Colors,Cfspreadsheet,我有一张excel表格,其中添加的内容有红色背景,更改的内容有黄色背景,删除的内容是灰色的。 我希望做的是通读工作表,并根据单元格背景颜色执行相关的数据库操作 通常,我会在自己的列中创建每种类型的操作,或者添加另一列来确定操作 对于获取电子表格对象中返回的“格式”,我有哪些选项 谢谢在我看来,依赖单元格颜色听起来很脆弱。在我看来,指定一个明确的操作列将是一个更好的方法 也就是说,可以访问颜色。但是,没有内置的CF方法。你必须深入了解潜在的POI。首先在电子表格中: <cfscript>

我有一张excel表格,其中添加的内容有红色背景,更改的内容有黄色背景,删除的内容是灰色的。 我希望做的是通读工作表,并根据单元格背景颜色执行相关的数据库操作

通常,我会在自己的列中创建每种类型的操作,或者添加另一列来确定操作

对于获取电子表格对象中返回的“格式”,我有哪些选项


谢谢

在我看来,依赖单元格颜色听起来很脆弱。在我看来,指定一个明确的操作列将是一个更好的方法

也就是说,可以访问颜色。但是,没有内置的CF方法。你必须深入了解潜在的POI。首先在电子表格中:

<cfscript>
   // get the sheet you want to read
   cfSheet = SpreadSheetRead("c:/path/to/somefile.xlsx"); 
   workbook = cfSheet.getWorkBook();
   sheetIndex = workbook.getActiveSheetIndex();
   sheet = workbook.getSheetAt( sheetIndex );


   // process the rows and columns
   rows = sheet.rowIterator();
   while (rows.hasNext()) {
       currentRow = rows.next();

       // loop through populated cells in this row
       cells = currentRow.cellIterator();
       while (cells.hasNext()) { 
           currentCell = cells.next();

           // .... get color
       }
    }
</cfscript>
更新:

如评论中所述,CF9没有上述方法。不幸的是,
getFillForegroundColorColor()
getARGBHex()
在3.7左右被引入,但CF与早期版本捆绑在一起:3.5(我想)。因此,您必须改用索引颜色方法(或升级POI JAR)


您使用的是哪个版本的ColdFusion?如果您知道它是哪个单元格,则无需像这样迭代即可获取它:
ss.getWorkbook().getSheetAt(0).getRow(0).getCell(0).getCellStyle().getFillForegroundColor()
其中
ss
是您的电子表格对象,而工作表0是您需要的工作表,在本例中,您需要单元格A1(0,0). 另外,我在测试中发现,
getFillForegroundColor()
实际上是您想要的,而不是背景。YMMV.(编辑)Oops,复制粘贴错误。很好,肖恩。是的。如果您不熟悉POI的内容,只需a)注意空值b)注意从零(0)开始的索引,而不是CF中的一(1)。好吧,他想做的就是确定它是否为绿色。所以他不需要RGB代码。他只需要将它与绿色代码匹配。您可以通过运行
greenCode=createobject('java','org.apache.poi.hssf.util.HSSFColor$green').getIndex()获得“green”的代码返回17。然后,您可以在我的上述注释中检查
getFillForegroundColor()
的结果,以获取单元格的颜色索引。如果它们匹配,则单元格为绿色!您可以从这里获得各种颜色代码:只需将绿色替换为colorHmm,my style对象没有名为getXXXColorColor()的方法。在那里抛出一个错误。你确定@Leigh?我有
getFillForegroundColor()
getFillBackgroundColor()
这两个选项都返回一个短字符。但是没有这些方法的ColorColor()版本。
   cellColor = currentCell.getCellStyle().getFillForegroundColorColor();
   colorValue = cellColor.getARGBHex(); 
    // only create once
    colors = createObject("java", "org.apache.poi.ss.usermodel.IndexedColors");

    //....
    cellColor = currentCell.getCellStyle().getFillForegroundColor();
    if (cellColor == colors.RED.getIndex()) {
       WriteDump("This cell is RED. Do something...");          
    }