Я пытаюсь написать скрипт для загрузки листа Excel в базу данных, но я застрял на небольшой проблеме. Сценарий должен быть динамическим, чтобы его не нужно было изменять для загрузки другого листа Excel, просто лист должен соответствовать тому же соглашению, что и раньше.
Итак, выполнив:
<cfloop from="2" to="#sheet.rowcount#" index="row">
Это будет петля до конца строк, нет?
Поворот сюжета: мне нужно преобразовать пустые ячейки в «Н/Д»
Достаточно легко:
<cfif SpreadsheetGetCellValue(sheet,row,col) EQ "">
<cfset SpreadsheetSetCellValue(sheet,"N/A",row,col) />
</cfif>
Проблема: из-за этого в моем фиктивном выводе появляются десятки строк (в конце, после того, как строки перестали содержать что-либо)
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
Очень много повторений. Лист имеет длину 56 строк, но это должно превышать 100. Я боюсь, что виновником является изменение пустых ячеек на «Н/Д», но я не уверен, как это исправить. Вот полный файл, и, к сожалению, я не могу показать таблицу Excel. Однако это 56 строк и 17 столбцов.
<cfspreadsheet action="read" src="derp.xlsx" name="sheet"> <!--- edit src --->
<!--- 17 columns wide 56 rows --->
<cfoutput>
<cfloop from="2" to="#sheet.rowcount#" index="row">
<cfloop from="1" to="17" index="col"> <!--- multi row selection (edit based on excel sheet) --->
<cfif SpreadsheetGetCellValue(sheet,row,col) EQ "">
<cfset SpreadsheetSetCellValue(sheet,"N/A",row,col) />
</cfif>
<cfoutput>#SpreadSheetGetCellValue(sheet,row,col)#</cfoutput><br />
</cfloop>
<br />
</cfloop>
</cfoutput>
Как я могу преобразовать пустые ячейки в «Н/Д», чтобы сценарий не превосходил rowcount
?
sheet.rowcount
не делает то, что я думаю? - person Sterling Archer   schedule 06.01.2014sheet.rowcount
и проверить каждую ячейку, если она пуста, и как только вы найдете строку со значением, вы можете использовать ее как новуюsheet.rowcount
. Не отличное решение, но сработает. - person Matt Busche   schedule 06.01.2014<cfspreadsheet src="c:/path/to/file.xls" query="qData" sheet="1" />
прочитает значения на листе 1 и заполнит запрос значениями листа. - person Leigh   schedule 07.01.2014SpreadsheetSetCellValue
, которые изменяют количество строк по мере того, как вы зацикливались, приводит к неожиданным результатам. - person Leigh   schedule 07.01.2014states [id, statename, stateabbr]
,questions [id, questiontext]
,responses [id, responsetext]
иQandA [id, sid, rid, qid, group]
(есть еще столбцы, но сейчас они не имеют значения. В основном первый столбец — это список имен состояний, первая строка — это вопрос, и все смешанные строки - это ответы. Вопросы, ответы и идентификаторы состояний уникальны. Мой запрос гарантирует это. Таким образом, этот скрипт предназначен для загрузки новых вопросов без необходимости удаления всей базы данных и запуска заново каждый раз, когда необходимо загрузить новые данные. - person Sterling Archer   schedule 07.01.2014SpreadsheetGetCellValue
. Просто прочитайте значения в запросе, затем прокрутите его и примените ту же логику. Единственная разница в том, что у вас есть все необработанные данные заранее, в одном запросе, вместо того, чтобы захватывать их по одной ячейке за раз. - person Leigh   schedule 07.01.2014