Coldfusion запрос запросов с номерами строк, переданных во второй запрос

Я делаю следующий запрос запросов. Первый дамп запроса показывает весь лист 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 ответ

Решение

Это не то, что вы можете сделать с помощью cfspreadsheet. CFSpreadsheet возвращает только значения ячеек. Он не предоставляет физические номера строк в электронной таблице, которые содержали эти значения.


Кроме того, следует помнить, что CFSpreadsheet возвращает только "логические" (то есть заполненные) строки / ячейки. Это не то же самое, что "физические" номера строк 1,2,3,... и заголовки столбцов A,B.C.... что вы видите в Excel. Поскольку пользователи могут вводить значения в любом месте электронной таблицы, логическое и физическое не всегда одно и то же.

Например, создайте пустую электронную таблицу. Затем введите значения в ячейках 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, Если заполненные данные всегда начинаются с первых нескольких строк, этого может быть достаточно для ваших целей. Если нет, это может немного запутать...

Тем не менее, технически вы можете получить реальные физические номера строк. Тем не менее, он требует гораздо более низкого уровня кода, который, честно говоря... кажется, много работы, для очень небольшой выгоды.

Другие вопросы по тегам