1

SalesForce.com に簡単にアップロードできるように、MYSQL から CSV ファイルにクライアント リストを出力するコールド フュージョン ページを作成しました。

すべての正しい情報を含むファイルを生成できます。ただし、Excel で開こうとすると、次のエラーが表示されます。開けないでください。それでも開けますか?」私はそれを開くことができます(MACのExcel)が、CFSpreadsheetが正当な.csvファイルを作成しておらず、代わりにxlsxを作成しているように見えます。

    <cfset FileCSV = "SalesForceDailyLeads-#dateformat(getBatch.BATCH,"yyyymmdd")##timeformat(getBatch.BATCH,"HHmmss")#.csv" >
    <cfset filename = "/SF/#fileCSV#">



    <cfset s = spreadsheetNew() >
    <cfset spreadsheetAddRow(s, "FIRST, LAST, MIDDLE, STREET, CITY, ZIP, STATE")>

    <cfinclude template="SFgetList.cfm">

    <cfset spreadsheetAddRows(s, getList)>

    <cfspreadsheet
        action="write"
        overwrite = "true"
        format ="csv"
        name ="s"
        filename ="#filename#"
        >

XLS ファイルを作成すれば、CSV の場合のような問題はありません。これはコード、CFSpreadsheet、または Excel (Mac 用) の問題ですか? 直せますか?

4

2 に答える 2

3

ファイルの作成には、cfspreadsheet ではなく、cffile を使用します。ドキュメントごと:

cfspreadsheet タグは、XLS[X] 形式のファイルのみを書き込みます。CSV ファイルを書き込むには、データを CSV 形式の文字列変数に入れ、cffile タグを使用して変数の内容をファイルに書き込みます。

于 2016-06-13T19:32:58.397 に答える
0

ありがとう!もちろん、これを投稿した直後にドキュメントを見つけて、それを間違って使用していることに気付き、代わりに CFFILE を使用しました。これを行うために見つけたスクリプト/関数を使用しました。ただし、クエリを CSV に変換するには少し作業が必要でした。幸いなことに、他の誰かが既にそれを行っています。誰かがそれを見たいと思っている場合: ここで querytoCSV スクリプトを取得しました: https://gist.github.com/CreativeNotice/2775372

<cfscript>
        /**
         * queryToCsv
         * Allows us to pass in a query object and returns that data as a CSV.
         * This is a refactor of Ben Nadel's method, http://www.bennadel.com/blog/1239-Updated-Converting-A-ColdFusion-Query-To-CSV-Using-QueryToCSV-.htm
         * @param  {Query}      q               {required}  The cf query object to convert. E.g. pass in: qry.execute().getResult();
         * @param  {Boolean}    hr              {required}  True if we should include a header row in our CSV, defaults to TRUE
         * @param  {String}     d               {required}  Delimiter to use in CSV, defaults to a comma (,)
         * @return {String}                                         CSV content
         */
    public string function queryToCsv(required query q, required boolean hr = true, required string d = ","){



var colNames    = listToArray( lCase(arguments.q.columnlist) );
        var newLine     = (chr(13) & chr(10));
        var buffer      = CreateObject('java','java.lang.StringBuffer').Init();
        // Check if we should include a header row
        if(arguments.hr){
            // append our header row
            buffer.append(
              ArrayToList(colNames,arguments.d) & newLine
            );
        }
        // Loop over query and build csv rows
        for(var i=1; i <= arguments.q.recordcount; i=i+1){
            // this individual row
            var thisRow = [];
            // loop over column list
            for(var j=1; j <= arrayLen(colNames); j=j+1){
                // create our row
                thisRow[j] = replace( replace( arguments.q[colNames[j]][i],',','','all'),'""','""""','all' );
            }
            // Append new row to csv output
            buffer.append(
                JavaCast( 'string', ( ArrayToList( thisRow, arguments.d ) & iif(i < arguments.q.recordcount, "newLine","") ) )
            );
        }
        return buffer.toString();
    };
</cfscript>
<cfinclude template="getDups.cfm">
<cfinclude template="SFgetList.cfm">
<cfset FileCSV = "SalesForceDailyLeads-#dateformat(getBatch.BATCH,"yyyymmdd")##timeformat(getBatch.BATCH,"HHmmss")#.CSV" >
<cfset filename = "/mnt/nas-share/data/feed/SF/#fileCSV#">

<cfset qc = #queryToCsv(getList, false, ",")# >
<cfoutput>#qc#</cfoutput>
<cfset heads= "FIRST, LAST, MIDDLE, STREET, CITY, ZIP, STATE">
>
<cffile
    action = "write"
    file = #filename#
    output = #heads#
    addNewLine = "yes"
    fixnewline = "no">

<cffile
    action = "append"
    file = #filename#
    output = #qc#
    addNewLine = "yes"
    fixnewline = "no">
于 2016-06-15T14:31:12.863 に答える