Экспорт в Excel в ColdFusion

Я отправляю несколько входных данных в URL-адрес, используя cfhttp, и ожидаю загрузки некоторых данных в файле xls. Я пытаюсь получить данные, используя cffile = "write", который не работает. Может ли кто-нибудь предложить, как мы можем пойти с этим. Вот код ниже

<cfhttp url="#Baseurl#" method="post" result="ExportToExcelresult" redirect="no" resolveurl="true">
    <cfhttpparam type="header" name="REFERER" value="#Baseurl#" >
    <cfhttpparam type="header" name="Cache-Control" value="no-cache">
    <cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded">
    <cfhttpparam type="header" name="Connection" value="keep-alive" >
    <cfhttpparam type="header" name="User-Agent" value="Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36">
    <cfhttpparam type="header" name="cookie" value="TestCookie=;" encoded="yes">

    <cfloop collection="#CookieList#" item="i">
            <cfhttpparam type="header" name="cookie" value="#CookieList[i]#" encoded="yes">
    </cfloop>
    <cfloop collection="#PostCookieList#" item="i">
            <cfhttpparam type="header" name="cookie" value="#PostCookieList[i]#" encoded="yes">
    </cfloop>

    <cfloop collection="#PostDefaultCookieList#" item="i">
            <cfhttpparam type="header" name="cookie" value="#PostDefaultCookieList[i]#" encoded="yes">
    </cfloop>


    <cfhttpparam name="ToolkitScriptManager1_HiddenField" value="" type="formfield">
    <cfhttpparam name="LeftNav1_LoginView1_treeView1_ExpandState" value="#EXPANDSTATE#" type="formfield">
    <cfhttpparam name="LeftNav1_LoginView1_treeView1_SelectedNode" value="#SELECTNODE#" type="formfield">
    <cfhttpparam name="__EVENTTARGET"  value="" type="formfield">
    <cfhttpparam name="__EVENTARGUMENT"  value="" type="formfield">
    <cfhttpparam name="LeftNav1_LoginView1_treeView1_PopulateLog" value="" type="formfield">
    <cfhttpparam name="__VIEWSTATE"  value="#VIEWSTATE#" type="formfield">
    <cfhttpparam name="__VIEWSTATEGENERATOR"  value="#VIEWSTATEGENERATOR#" type="formfield">
    <cfhttpparam name="__EVENTVALIDATION"  value="#EVENTVALIDATION#" type="formfield">
    <cfhttpparam name="ctl00$MainContent$repMUData$ctl00$btnExport"  value="Export to Excel" type="formfield">
</cfhttp>

Когда я делаю cfdump вот результат

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

Когда я делаю cfdump, он дает некоторые двоичные данные. Конечно, я получаю некоторые данные, но не знаю, как извлечь данные в файл xls.


person user3440782    schedule 21.03.2019    source источник
comment
Фразы типа не работает очень двусмысленны. Как выглядит ваш код cffile? Что происходит, когда вы запускаете его? Чем результат отличается от того, что вы ожидали?   -  person SOS    schedule 21.03.2019
comment
Это не позволяет мне вставить код. Сначала я пытаюсь сделать ‹cfdirectory action=list directory=#szBaseDir#/response recurse=false name=myList›   -  person user3440782    schedule 21.03.2019
comment
Не уверен, как это связано с вызовом cfhttp. Если по какой-то причине вы не можете разместить код здесь, попробуйте использовать gist или pastebin и разместите здесь ссылку. Кто-то может отредактировать его для вас, если это необходимо.   -  person SOS    schedule 21.03.2019
comment
Извините, я не могу этого сделать. У меня нет доступа к обоим сайтам. Могу ли я получить пример кода, как случайно извлечь штраф?   -  person user3440782    schedule 21.03.2019
comment
Итак, вы смогли сохранить файл после загрузки через cfhttp? Я не уверен, как и почему вы используете cffile в данный момент. Я предполагаю, что вы сбрасываете переменную результата ExportToExcelresult в свой образ. В настоящее время файл xls должен содержать двоичные данные в ExportToExcelresult.filecontent.   -  person Twillen    schedule 21.03.2019
comment
Да, когда я делаю ExportToExcelrsult.filecontent, я получаю двоичные данные. Не знаю, что делать после этого шага.   -  person user3440782    schedule 21.03.2019
comment
Я не могу сохранить файл, хотя..   -  person user3440782    schedule 21.03.2019
comment
Похоже, данные файла Excel находятся в ExportToExcelresult.filecontent. Просто запишите это значение в файл.   -  person SOS    schedule 21.03.2019
comment
Да, значение находится в содержимом файла. Как записать значение в файл? Он пишет, что между всеми специальными символами есть какие-то данные.   -  person user3440782    schedule 21.03.2019
comment
Я собираюсь написать вам ответ. Была ли ваша конечная цель использовать данные в электронной таблице или просто записать их в файловую систему вашего сервера?   -  person Twillen    schedule 21.03.2019
comment
Конечная цель - записать его в файлы сервера.   -  person user3440782    schedule 21.03.2019


Ответы (1)


Чтобы записать двоичные данные в файл, просто используйте функцию filewrite. В следующем фрагменте я пишу во временный файл, но вы бы написали, если хотите сохранить файл на постоянной основе. Затем я читаю файл обратно в объект электронной таблицы, чтобы убедиться, что запись работает так, как предполагалось.

<cfhttp url="http://example.com/test.cfm" result="ExportToExcelresult">
</cfhttp>
<cfscript>
    //Replace with the file path where you want to permanently store the file
    yourFileLocation = getTempFile(getTempDirectory() ,"xls");

    //Save to file system
    filewrite(yourFileLocation, ExportToExcelresult.filecontent.toByteArray());

    //Not needed. Only verifying there is a spreadsheet written to the file location
    writeOutput("Is spreadsheet: " & isSpreadsheetFile(yourFileLocation));

    //You will not be working with a temp file. Do not delete it.
    fileDelete(yourFileLocation);
</cfscript>
person Twillen    schedule 21.03.2019
comment
Это выдает мне ошибку: нет содержимого файла suchfieldException - person user3440782; 21.03.2019
comment
IsSpreadSheetFile() может быть легче, чем SpreadSheetRead для проверки. - person SOS; 21.03.2019
comment
@user3440782 user3440782 с каким вызовом вы получаете сообщение об ошибке? Это во время filewrite звонка? Лучшее предположение, которое я получил с помощью быстрого поиска в Google, это то, что вы можете писать в ExportToExcelresult.filecontent, ведь это значение только для чтения. - person Twillen; 21.03.2019
comment
Итак, вот что я сделал.. ‹cfset testing = ExportToExcelresult.filecontent.toByteArray()›, а затем я использую это тестирование вместо ExportToExcelresult.filecontent. Итак, я получил дамп только с тестовым листом. - person user3440782; 21.03.2019
comment
@user3440782 user3440782 Мой код не готов для вас. Как выглядит ваш обновленный код? Моя первая строка в примере не будет включена в ваше программное обеспечение. Если вы сбрасываете мой тестовый лист в свой код, вы используете большую часть примера. - person Twillen; 21.03.2019
comment
‹cfset testing = ExportToExcelresult.filecontent.toByteArray()›‹cfscript› // Генерация данных, аналогичных вашему http-ответу testing = spreadsheetreadbinary(spreadSheetNew(testing, false)); //Создаем строку пути к одноразовому файлу. tempFile = getTempFile (szBaseDir, xls); //Запись файла на диск filewrite(tempFile,testing); xlsSheet = чтение электронной таблицы (tempFile, 1); файлУдалить(ВременныйФайл); написатьДамп([xlsSheet]); ‹/cfscript› - person user3440782; 21.03.2019
comment
@user3440782 user3440782 Теоретически все, что вам нужно добавить, это что-то вроде <cfset filewrite(yourFileLocation, ExportToExcelresult.filecontent.toByteArray()) /> в ваш код. - person Twillen; 21.03.2019
comment
Я понял, что вы говорите, но когда я открываю штраф, он имеет специальные символы как .. mm/dd/yyyyï¿ï¿½3f3�f333�3�3f33�333��Sheet1ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½¿½½ Accountry82011-46025Customerkaelin Jeffriesmeter Bill Group MultiLier1Manufacturersiemensrelative Bill Made Action От deateraging На сегодняшний день Общая кчт¿¿½at½½ï¿½¿¿½ï¿½ï¿½¿¿½¿¿½ï¿½¿¿½ d¿½ï¿½ï¿½¿¿½ d¿½ï¿½m¿½½¿¿½m¿½½ï¿¿½¿¿½ï¿½b½½½m¿½½mm½½¿¿½½m¿¿½¿¿¿½¿¿½¿¿½½m¿½½¿¿½m¿½½½½½¿¿½½¿¿¿½¿¿½ï¿½½½½¿¿½¿¿½ï¿½b½½¿¿½½¿¿½mbp? - person user3440782; 21.03.2019
comment
Давайте продолжим это обсуждение в чате. - person Twillen; 21.03.2019
comment
‹cfset fileName = reReplace(listlast(ExportToExcelresult[responseHeader][content-disposition],;=),'','','All')› ‹cfheader name=content-disposition value=attachment; filename=#fileName#› ‹cfcontent type=application/msexcel file=#testing#/#ExportToExcelresult.filecontent.toByteArray()# reset=true› - person user3440782; 21.03.2019