我正在使用CFSPREADSHEET将XLS文件读入查询。然后根据需要重新排序列。但是,我使用的查询查询保留按字母顺序排列的列。
XLS文件的字段顺序正确,但在转换为查询时,字段按字母顺序排列。
我使用this nifty UDF将结果输出到CSV,并且字段仍然按字母顺序排列,以证明q-of-q不符合我的请求。
为了纠正这个问题,我正在尝试使用q-of-q以正确的顺序重新格式化列。
<cfspreadsheet action="read" src="#local.tmpPath##local.tmpFile#" excludeheaderrow="true" headerrow="1" sheet="1" query="local.qTemp" />
<!--- Change column order around as necessary --->
<cfquery name="local.qTemp" dbtype="query">
SELECT
Name, Address, City
FROM
[local].qTemp
</cfquery>
<cfset local.newCSV = QueryToCSV(
query = local.qTemp,
fields = local.qTemp.columnlist,
createHeaderRow = true,
delimiter = '|'
) />
<cffile action="write" charset="windows-1252" file="#local.tmpPath#foo.csv" output="#replace(local.newCSV, """", "", "ALL")#" nameconflict="overwrite" />
输出时的列顺序为:
Address,City,Name
而不是查询顺序:
Name,Address,City
关于这个主题,我读了这篇post,但它没有具体解决我的问题(除非我读错了)。
答案 0 :(得分:2)
(来自评论......)
QoQ实际上与问题无关。原始查询会出现同样的问题。不幸的是,query.columnList
总是按字母顺序列出列。这是许多CF开发人员的长期抱怨。要获得“真实”订单,您必须使用不同的技术,例如:
query.getColumnNames()
方法(OR)columns = [];
getMetaData(qry).each(function(elem,index){
arrayAppend(columns, elem.name);
});
writeDump(var=arrayToList(columns), label="Real Column Order");
答案 1 :(得分:-1)
您可以使用
<cfspreadsheet action="write" query="yourqueryname" filename="yourfilename">
它将输出一个电子表格,其中包含查询选择语句的列顺序