0

我正在使用 CFSPREADSHEET 将 XLS 文件读入查询。然后根据需要重新排序列。但是,我使用的查询查询保留字母列顺序。

XLS 文件的字段顺序正确,但转换为查询时,字段按字母顺序排列。

我使用这个漂亮的 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

我阅读了有关该主题的这篇文章,但它并没有具体解决我的问题(除非我读错了)。

4

2 回答 2

3

(来自评论...)

环比实际上与问题无关。原始查询也会出现同样的问题。不幸的是,query.columnList总是按字母顺序列出列。这是许多 CF 开发者长期以来的抱怨。要获得“真实”订单,您必须使用不同的技术,例如:

  • 未记录的query.getColumnNames()方法 (OR)
  • GetMetaData(query)结果构建您自己的列表

    columns = [];
    getMetaData(qry).each(function(elem,index){
        arrayAppend(columns, elem.name);
    });
    writeDump(var=arrayToList(columns), label="Real Column Order");
    
于 2017-05-16T16:02:25.893 回答
-1

您可以使用

<cfspreadsheet action="write" query="yourqueryname" filename="yourfilename">

它将输出一个电子表格,其中包含查询选择语句的列顺序

于 2017-05-12T19:59:54.927 回答