Я даю своему клиенту шаблон, который он должен заполнить, а затем он загружает электронную таблицу, и я читаю файл с помощью cfspreadsheet
, чтобы скопировать данные в таблицу базы данных.
Довольно легко. В шаблоне всего одна колонка. Клиент не может загрузить лист с более чем одним столбцом. Раньше это работало.
Таким образом, заголовок одного столбца равен ING_CAS
, но когда я читаю файл с cfspreadsheet
, я получаю COL_2
, COL_3
, ING_CAS
. Таким образом, не только пустые ячейки считываются, но и получают имена по умолчанию из-за этого атрибута headerrow="1"
.
Я в недоумении. Я продолжаю загружать шаблон, выбирая лишние пустые строки и столбцы и удаляя их, но я не могу контролировать файл, как только клиент его получает.
Есть ли какая-то странная настройка, которую мне не хватает, которая заставит cfspreadsheet
игнорировать пустые ячейки?
<cfspreadsheet action="read" src="#theFile#" query="SpreadSheetData" headerrow="1">
<cfdump var="#SpreadSheetData#" />
В итоге я написал вспомогательную функцию, которая вырезала столбцы COL_(n).
<cffunction name="CleanExcelQuery" access="public" returntype="query" output="false" hint="Strips out blank column headers picked up on read.">
<cfargument name="SpreadSheetQuery" type="query" required="true" />
<cfset var theColumnHeaders = SpreadSheetQuery.columnList>
<cfset var theNewColumnHeaders = "">
<cfloop list="#theColumnHeaders#" index="h">
<cfif uCase(left(h, 4)) IS NOT "COL_">
<cfset theNewColumnHeaders = ListAppend( theNewColumnHeaders, h )>
</cfif>
</cfloop>
<cfquery name="newSpreadSheetQuery" dbtype="query">
Select #theNewColumnHeaders#
From SpreadSheetQuery
</cfquery>
<cfreturn newSpreadSheetQuery />
</cffunction>
cfspreadsheet
? Я считаю, что по умолчанию он должен игнорировать пустые ячейки, иначе каждый раз будет считываться вся пустая таблица. Вы уверены, что ячейки пусты и не заполнены каким-то невидимым символом. Работает ли он должным образом, когда вы выбираете пустые строки и столбцы, а затем удаляете? - person Miguel-F   schedule 02.05.2013