2016-06-13 22 views
1

MYSQLのクライアントリストをCSVファイルに出力してSalesForce.comに簡単にアップロードできるようにコールドフュージョンページを作成しました。cfspreadsheet .csvとして保存すると、Excelに「FILE.csvのファイル形式と拡張子が一致しません」というメッセージが表示されます。

すべての正しい情報でファイルを生成できます。しかし、私がExcelで開くと、エラーが表示されます: "ファイルのフォーマットと拡張子が 'SalesForceDailyLeads-20160613125138.csv'と一致しません。ファイルが破損しているか、安全でない可能性があります。とにかくそれを開きたいですか? "私はそれを開くことができます(MACのために優秀ですが)、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ファイルを作成しても、私はCSVsのように問題はありません。これはコード、CFSpreadsheet、またはexcel(for Mac)に問題がありますか?私はそれを修正することはできますか?

+0

それを修正するには、代わりにcfspreadsheetのcffileタグを使用してみてください。 –

+0

予期しない動作に遭遇した場合は、[ドキュメント](https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-r-s/cfspreadsheet.html)を再確認することをお勧めします。 CSVファイルを書き込むには、データをCSV形式の文字列変数に入れ、cffileタグを使用して変数の内容をファイルに書き込むようにしてください。」* @「cfspreadsheetタグはXLS形式のファイルのみを書き出します。 DanBracuk - 答えとして投稿する必要があります。 – Leigh

答えて

2

cfspreadsheetではなくcffileを使用してファイルを作成します。 Per the documentation

The cfspreadsheet tag writes only XLS[X] format files. To write a CSV file, put your data in a CSV formatted string variable and use the cffile tag to write the variable contents in a file.

+0

ありがとう!もちろん、私はこれを投稿した直後にドキュメントを見つけ、間違って使用しているのを見て、代わりにCFFILEを使用しました。 –

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"> 
関連する問題