具有行号的查询的Coldfusion查询传递给第二个查询

时间:2014-02-16 23:46:42

标签: coldfusion coldfusion-10 cfspreadsheet

我正在进行以下查询查询。查询的第一个转储显示整个Excel工作表,第二个转储显示第二个查询的结果。

我正在对excel表进行验证检查,以确保没有更多的斗牛犬品种带入系统,我需要能够告诉用户excel表上的哪一行有坑。

如何让第一行的行号显示在第二行?因此用户可以在Excel工作表上进行更改。 首次上传到服务器并为其添加行号列时,是否必须编辑excel文档?可能有更好的方法来实现这一目标。

  <cffunction name="validateExcelSheet" access="public" output="yes" returnType="void" 
hint="check dogs">

    <cfspreadsheet
    action="read"
    src="#SESSION.theFile#"
    headerrow= "1"
    excludeHeaderRow = "true"
    query = "allData"
    rows = "1-#lastRow#" />


<cfscript>    
 pitBullcheck = new Query(
        sql ="SELECT * FROM allData where breed like 'Pit%' ",
        dbtype = "query",
        allData = allData);
        pitBullresult = pitBullcheck.execute().getResult();
   </cfscript>

</cffunction>

以下是基于标签的cfquery

版本
<cfquery name="pitBullresult" dbtype="query">
SELECT *
FROM allData
WHERE breed LIKE 'Pit'
</cfquery>

1 个答案:

答案 0 :(得分:2)

这不是你可以用cfspreadsheet做的事情。 CFSpreadsheet仅返回单元格值。它不提供电子表格中包含这些值的物理行号。


另外,要记住的其他事情是CFSpreadsheet只返回“逻辑”(即填充的)行/单元格。这与您在Excel中看到的“实际”行号1,2,3,...和列标题A,B.C....不同。由于用户可以在电子表格中的任何位置输入值,因此逻辑和物理并不总是相同的。

例如,创建一个空白电子表格。然后在单元格中输入值    A2A25。现在运行上面的代码。虽然你可能会期待    结果查询包含二十五(25)条记录,它只会    包含两个(2),因为只填充了两个单元格。

   query
   Row  | COL_1
    1   | Value in cell A2 (physical row 2)
    2   | Value in cell 25 (physical row 25)

我认为使用cfspreadsheet可以做的最好是遍历查询并显示结果中的相对行号,即query.currentRow。如果填充的数据始终在前几行内开始,则可能足以满足您的需要。如果没有,它可能会有点令人困惑......

那就是说,从技术上讲,你可以得到真实的物理行数。但是,它需要much lower level code,老实说......似乎很多工作,收益很少。