我正在进行以下查询查询。查询的第一个转储显示整个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>
答案 0 :(得分:2)
这不是你可以用cfspreadsheet做的事情。 CFSpreadsheet仅返回单元格值。它不提供电子表格中包含这些值的物理行号。
另外,要记住的其他事情是CFSpreadsheet只返回“逻辑”(即填充的)行/单元格。这与您在Excel中看到的“实际”行号1,2,3,...
和列标题A,B.C....
不同。由于用户可以在电子表格中的任何位置输入值,因此逻辑和物理并不总是相同的。
例如,创建一个空白电子表格。然后在单元格中输入值
A2
和A25
。现在运行上面的代码。虽然你可能会期待
结果查询包含二十五(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,老实说......似乎很多工作,收益很少。