Lucee cfquery к файлу CSV неправильно форматирует

Я пытаюсь получить результат запроса и поместить его в файл CSV, чтобы затем отправить его по электронной почте пользователю. Все данные в файле CSV верны, но по какой-то причине я также получаю элементы HTML. Вот мой код:

<cffunction name="ledgerTest" access="remote" >

    <cfquery name="ledgerCheck" datasource="RBDMS_UPDATE">
     SELECT * FROM dbo.OOGNS_Schedules 
    </cfquery>
     <cfoutput>  
                <cfsavecontent variable="myCSV">

                    <div>
                        <table border="1"> 
                            <thead align="center">
                                <th>Job Key</th>
                                <th>INSPECTOR</th>
                                <th>PERMIT USER</th>
                                <th>START DATE</th>
                                <th>END DATE</th>
                            </thead>
                            <cfloop query="ledgerCheck">
                                <tr align="left">
                                    <td>#JobKey#</td>
                                    <td>#Inspector#</td>
                                    <td>#permitUser#</td>
                                    <td>#StartDate#</td>
                                    <td>#EndDate#</td>
                                </tr> 
                            </cfloop>
                        </table>
                    </div>

            </cfsavecontent>
          </cfoutput>  
                <cffile action="write" file="temp/ok.csv" output="#myCSV#" />

</cffunction>

И вот полученный CSV-файл (я зачернил адреса электронной почты людей):

введите здесь описание изображения

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


person Cole Perry    schedule 05.03.2020    source источник
comment
Есть ли причина не использовать <cfspreadsheet>?   -  person James A Mohler    schedule 06.03.2020


Ответы (2)


Вы пишете таблицу HTML в файл, который вы называете .csv. Это кажется очень неправильным. Вы можете записать это в файл с расширением .html и открыть его в Excel. Это может работать, поскольку Excel интерпретирует HTML-таблицы. Если вам нужен CSV-файл, вы должны записывать свои данные по мере необходимости. Каждый столбец разделен ; (точкой с запятой) и разрывом строки #chr(13)##chr(10)# после каждой строки.

<cfsavecontent variable="myCSV">                 
    <cfloop query="ledgerCheck">#JobKey#;#Inspector#;#permitUser#;#StartDate#;#EndDate##chr(13)##chr(10)#</cfloop>
</cfsavecontent>
person Bernhard Döbler    schedule 05.03.2020
comment
Ваш ответ привел меня к моему ответу, так что спасибо. Единственная проблема заключалась в использовании .csv вместо .xls. Я буду иметь это в виду на будущее. - person Cole Perry; 05.03.2020
comment
Столбцы разделены точкой с запятой? - person Dan Bracuk; 05.03.2020
comment
Как указал @DanBracuk, CSV означает значения, разделенные запятыми. Хотя можно использовать и другие разделители, по умолчанию используются запятые. Однако, если в ваших данных есть запятые, вы можете разделить каждый столбец двойными кавычками. " - person user12031119; 05.03.2020
comment
Зависит от. Иногда точка с запятой, иногда запятая, иногда TAB. Недавно клиент хотел использовать решетку в качестве разделителя. - person Bernhard Döbler; 05.03.2020
comment
В качестве теста я использовал блокнот для создания файла, состоящего из двух строк. Первый был a;b;c, а второй был d;e;f. Я сохранил его с расширением .csv. Когда я открыл его с помощью excel, там не было разделителей. Точки с запятой были частью данных. Если вы создаете файлы с разделителями в виде точек с запятой, табуляции или восьмигранника, вы, вероятно, даете им расширения .txt. Я отрицаю этот ответ. - person Dan Bracuk; 06.03.2020
comment
Большое спасибо! - person Bernhard Döbler; 06.03.2020
comment
Я перечислил некоторые разделители, которые я использовал на протяжении многих лет. Каждый волен использовать разделители по своему вкусу! Я считаю, что в моем коде ясно, что заменить! - person Bernhard Döbler; 06.03.2020

Единственная проблема заключалась в том, что я использовал .csv. Я изменил его с ok.csv на ok.xls, и он отлично работает.

person Cole Perry    schedule 05.03.2020
comment
Это все еще плохой подход. Если вам нужен файл .xls, в ColdFusion есть функции работы с электронными таблицами, которые намного надежнее, чем вывод html. - person Dan Bracuk; 05.03.2020