将行号传递给第二个查询的查询的冷融合查询



我正在执行以下查询查询。查询的第一个转储显示整个 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>

这不是你可以用 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。如果填充的数据始终从前几行开始,这可能足以满足您的目的。如果没有,它可能会有点混乱...

也就是说,从技术上讲,您可以获得真实的物理行号。但是,它需要低得多的代码,老实说...似乎工作量很大,收获甚微。

最新更新