2016-11-21 8 views
1

私はいくつかのフィールドにカンマを含むことができるExcelファイルを持っています。これはcsvに私のファイルを変換するためにcfspreadsheetを使用したい場合に問題を引き起こす可能性があります。 またはconvertのすべてのカンマが\である方法があるかどうか疑問に思っていました。すべてのコンマを置き換えたら、cfspreadsheetを使用してcsvを作成することができます。私のファイルはどのようにして読み取ったのですか?ColdFusionで.xlsxファイルのコンマを置き換える方法は?

<cfspreadsheet action = "read" format="csv" src="filePath\myFile.xlsx" name="csvvar"> 

誰でもこの問題を助けてくれたら教えてください。ありがとうございました。

+0

この状況では、cfhreadpはcfspreadsheetよりも優れたタグの選択肢です。詳細はドキュメントに記載されています。ただし、あなたのcsvファイルはデリミタとデータの一部であるカンマを判別するためにデータを二重引用符で囲む必要があります。 –

+0

@DanBracuk私はcsvファイルを作成する前にカンマを置き換えたいです。私のファイルは.xlsxにあり、私は\ cそのように置き換えて、私のCSVはすべて\をスキップします。また、cfhttpタグでどのように行うことができるかの例を提供できますか? –

+0

私はその質問を誤解しました。私はあなたがcsvファイルを読み込もうとしていると思っていました。だが、CSVファイルを作成するのであれば、すべてのデータセルを二重引用符で囲むことをお勧めします。そうすれば、データのカンマが問題になることはありません。 –

答えて

1

Excelからクエリに変換します。次に、各行のセルデータで、 "、"を "\"に置き換えます。このようなもの

<cfspreadsheet 
action = "read" 
src="filePath\myFile.xlsx" 
query="excelquery" 
sheet="1"> 

<!--- Create CSV file in current directory---> 
<cffile action="write" file="#expandpath('result.csv')#" output=""> 

<cfset columns = arraynew(1)> 
    <!--- Store the list of column names as an array ---> 
<cfset columns = listToArray(excelquery.ColumnList)> 

<cfoutput query="excelquery"> 
<cfset rowList = ""> 

<cfloop from="1" to="#arraylen(columns)#" index="n"> 
    <cfset colName = columns[n]> 
    <cfset cellData = evaluate("#colName#[currentrow]")> 

    <!--- Replace , by \ in each cell ---> 
    <cfset cellData = replace(cellData, ",", "\", "all")> 

    <!--- Comma-separated row data ---> 
    <cfset rowList = listAppend(rowList,cellData)> 
</cfloop> 

<!--- Place a carriage-return at the end of the row ---> 
<cfset rowList = rowList & '<br>'> 

<!--- Append row to CSV file ---> 
<cffile action="append" file="#expandpath('result.csv')#" output="#rowList#" > 
</cfoutput> 
関連する問題