1

我已经query使用cfspreadsheet. 现在我想知道是否可以将查询转换为制表符分隔的文本文件。这是我获取查询的代码:

<cfspreadsheet action="read" src="C:\myFiles\Records.xlsx" query="myQuery" headerrow="1">

这是我在 cfquery 中表示的 excel 记录列表:

    FIRST_NAME  LAST_NAME   DOB     GENDER  
1   FIRST_NAME  LAST_NAME   DOB     GENDER 
2   Mike    Johns   01/12/98    M   
3   Helen   Johns   2/2/01  F

如果可能的话,我希望我的文本文件看起来像这样:

FIRST_NAME  LAST_NAME   DOB     GENDER 
Mike    Johns   01/12/98    M   
Helen   Johns   2/2/01  F

值和 \n 之间的制表符分隔符以创建换行符。我已经尝试过.csv,但我无法像上面显示的那样组织文件。另外,如果有任何其他方式将.xlsx文件转换为.txt请告诉我。我正在查看xp_cmdshell命令,但对我的情况没有任何帮助。

这是我用来获取 .csv 文件的代码:

<cfspreadsheet action="read" format="csv" src="C:\myFiles\Records.xlsx" name="myCsv">

然后我用来FileWrite()获取 .txt 文件:

<cfscript> 
    FileWrite("C:\myFiles\Records.txt", "#myCsv#"); 
</cfscript>

上面的代码给了我制表符分隔的文本文件,但出现了一个问题,如果字段中的值为空,那么这些列就会消失。例如,如果我的 GENDER 列中没有值,则不会创建该列。

Mike    Johns   01/12/98
4

1 回答 1

1

您可能将其视为将查询结果集转换为制表符分隔的 CSV 文件的问题。也就是说,没有cfspreadsheet 的参与。通过稍微修改我对您的类似问题的回答,您将得到答案:

<cfspreadsheet 
action = "read" 
src="C:\myFiles\Records.xlsx" 
query="excelquery" 
sheet="1">

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

<cfset columns = arraynew(1)>
<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]")>

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

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

<!--- Append row to CSV file --->
<cffile action="append" file="#expandpath('result.csv')#" output="#rowList#" >
</cfoutput>
于 2016-11-23T06:32:30.960 回答