Как читать заполненные столбцы только с помощью CFSpreadsheet

Я пытаюсь использовать <cfspreadsheet> для чтения данных из электронной таблицы и вставки этих данных в таблицу базы данных. Допустим, в моей таблице 10 возможных столбцов: FName,LName,MName, Address1,Address2,Address3,city,state,zip and email. Пользователи смогут отправлять данные с помощью Excel, но им не нужно отправлять данные для всех 10 столбцов. Они могут просто отправить данные для FName,Email или FName, LName, City, Email. Мой код электронной таблицы должен иметь возможность читать только столбцы, представленные в их файле Excel, вместо чтения всех пустых столбцов.

Я думал, что с помощью атрибута «columnnames» <cfspreadsheet> я могу указать cfspreadsheet просто читать данные из этих имен столбцов, к сожалению, я был неправ ИЛИ я сделал это неправильно?

Результаты кода CFSpreadsheet

Вот мой код таблицы cfspread:

 <cfspreadsheet action="read" 
     src="#Trim(PathToExcelFile)#" 
     columnnames="#Trim(Form.UserColumnList)#" 
     excludeheaderrow="true" 
     query="FindData">
 </cfspreadsheet>

Список сопоставления и результирующий запрос


person user3779216    schedule 10.03.2017    source источник
comment
Можете ли вы привести пример того, что хранится в form.userColumnList? Сделайте ‹cfoutput›/‹cfdump› прямо перед вызовом ‹cfspreadsheet›, пожалуйста.   -  person Scott Jibben    schedule 12.03.2017
comment
Привет, Скотт, user.ColumnList — это список доступных столбцов в пользовательском файле Excel. Cfdump показывает: LName,FName,MName,HomeAddr1. Другой пользователь может отправить Excel с разными столбцами, такими как LName, FName, MName, HomeAddr1, HomeAddr2, HomeAddr3, HomeCity.HomeState, HomeZip.   -  person user3779216    schedule 13.03.2017
comment
(Изменить) columnNames не определяет, какие столбцы считывает cfspreadsheet. Он переименовывает столбцы запроса в FindData во что-то более значимое, чем col_1, col_2 и т. д. Возможно, вы имеете в виду атрибут columns?   -  person Leigh    schedule 13.03.2017
comment
После поиска атрибутов столбцов и имен столбцов я до сих пор не совсем понимаю, что они делают с запросом FindData.   -  person user3779216    schedule 13.03.2017
comment
Почему бы не прочитать электронную таблицу в переменную вместо запроса и не прочитать первую строку, чтобы увидеть, что было отправлено?   -  person Dan Bracuk    schedule 13.03.2017
comment
@user3779216 user3779216 - Сколько столбцов на самом деле содержит отправленный файл? Другими словами, содержит ли он только два (2) столбца — LName, FirstName ИЛИ содержит все десять (10) столбцов, но только некоторые из них заполнены данными? Что касается вашего вопроса, атрибут columns указывает cfspreadsheet читать данные только из определенных столбцов. columnNames не меняет того, что он читает. Он просто сообщает cfspreadsheet, какие имена вы хотите использовать для столбцов запроса.   -  person Leigh    schedule 13.03.2017
comment
Привет, Дэн, не могли бы вы уточнить, что вы подразумеваете под «Почему бы не читать электронную таблицу в переменную вместо запроса?»   -  person user3779216    schedule 13.03.2017
comment
Может я не правильно объяснил. После того, как мои коды прочитают электронную таблицу с помощью cfspreadsheet, и если в электронной таблице нет имен столбцов, запрос будет выглядеть так, как показано на снимке экрана, который я приложил к этому вопросу. С другой стороны, в моей таблице есть имена столбцов, такие как FName, LName и т. д. Как мне написать свои коды, чтобы они могли вставлять данные из Col_1 в FName в моей таблице, а значения Col_2 переходят в столбец LName в моей таблице. ? вместо Col_1 в Address,Col_2 и в City ? Я знаю, что мне нужно использовать что-то вроде отображения, но я не знаю, как это сделать.   -  person user3779216    schedule 14.03.2017


Ответы (1)


user3779216 написал: ... по-видимому, у каждого учреждения (их 9) будет свой макет Excel. Возможно, я смогу создать пользовательский интерфейс для пользователей, чтобы сопоставлять имена столбцов из их excel с именами столбцов из моей таблицы, например, раскрывающийся список имен столбцов из excel и раскрывающийся список имен столбцов из моей таблицы, и пусть пользователь выбирает какой столбец из excel соответствует столбцу из моей таблицы.

На самом деле это сделало бы это чертовски простым. Просто введите нумерованный список столбцов в cfspreadsheet, как вы это делали изначально, и имена столбцов запроса будут автоматически сопоставлены правильно.

Например, если пользователь загрузил макет ниже: Макет загруженного файла

.. и выбрал этот порядок столбцов:

  • Zip,Address1,LName,FName,Email,MName,Address2,City,State

Передача этого списка в cfspreadsheet создает запрос с нужными сопоставлениями столбцов, которые вы можете использовать как обычно. (При необходимости добавьте код для обнаружения и пропуска необязательных имен заголовков в первой строке.)

Результаты запроса таблицы CFSpread

<cfspreadsheet action="read" 
     src="#variables.pathToFile#"
     columnNames="#form.OrderedColumnNames#"
     query="sheetData" />

<cfdump var="#variables.sheetData#">

NB: Очевидно, что настоящий код должен включать проверку входного списка. Убедитесь, что он содержит все необходимые столбцы и не был изменен для включения недопустимых символов и т. д.

person Leigh    schedule 15.03.2017
comment
О, это то, для чего нужен атрибут columnNames?? позвольте мне поработать над этим и посмотреть. Спасибо Ли! - person user3779216; 15.03.2017
comment
Ли, я почти понял. Одна проблема в том, что я должен сделать это приложение как можно более гибким. Предполагая, что в моей таблице 20 столбцов, но пользователям разрешено загружать свои файлы excel только с 6 столбцами, например: FN (col_1) и LN (col_2), MN (col_3), addr1 (col_4), addr2 (col_5), addr3 (col_6) . После моего сопоставления я получил список имен столбцов, например: FN, LN, MN, Addr1, Addr2, Addr3. Когда я использую это в атрибуте columnNames, только заголовки FN, LN и MN располагаются в нужном месте, но не по адресу 1,2,3. Есть ли способ показать вам, что я сделал? это поле для комментариев ограничивает меня от этого. - person user3779216; 15.03.2017
comment
(Редактировать) Пока столбцы данных являются смежными и начинаются в столбце электронной таблицы A, он должен работать правильно. Чтобы убедиться, что я правильно понимаю, можете ли вы отредактировать свой вопрос, включив в него 1) снимок экрана фактической электронной таблицы (только первая строка) И 2) результирующий объект запроса после того, как вы примените сопоставления выше? - person Leigh; 15.03.2017
comment
Ли, я могу добавить только одно изображение за раз? Я заменил свое первое изображение на excel. Я не могу добавить больше изображений - person user3779216; 15.03.2017
comment
Я добавил еще 1 изображение. Это изображение, но мне не разрешено добавлять более двух изображений. - person user3779216; 15.03.2017
comment
На самом деле, присмотревшись, представляют ли пустые столбцы J, K, L и M допустимые столбцы данных, которые они решили не заполнять (т.е. таблица допускает 14 возможных столбцов, но пользователь заполнил только 6 из них)? Если да, они должны указывать порядок всех возможных столбцов в форме пользовательского интерфейса (независимо от того, заполнены они или нет). Именно для этого предназначен приведенный выше код. Если вы это сделаете, код должен работать так, как ожидалось. - person Leigh; 15.03.2017
comment
они должны указывать порядок всех возможных столбцов в форме пользовательского интерфейса IMO, это то, что пользователь ожидает при загрузке файла с пустыми (т.е. заполнителями) столбцами. - person Leigh; 30.03.2017
comment
Что ты в итоге сделал? - person Leigh; 01.05.2017