首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coldfusion CSV到电子表格

Coldfusion CSV到电子表格
EN

Stack Overflow用户
提问于 2019-05-20 16:58:36
回答 3查看 1.6K关注 0票数 3

我有几个进程利用CFSpreadsheet标记导入并操作Excel数据。这对于.XLS & .XLSX文件非常有用,但是,如果将数据作为.CSV文件发送,则无法工作,因为CFSpreadsheet显然从未被更新以导入.CSV文件。最后,我只想要一个简单的预处理程序,它接受一个.CSV文件并将它重写为一个.XLSX文件,这样我的其他进程就可以从那里获取它。

我的环境是Cold聚变2018的开发者版本,我已经尝试过手动导入数据(如果我知道所有的列定义-但我并不总是知道这一点),它就能工作。我最近的尝试是使用been的CSVToArray函数( https://www.bennadel.com/blog/2041-update-parsing-csv-data-files-in-coldfusion-with-csvtoarray.htm ),它可以工作--我可以很容易地将.CSV文件放到数组中--但是我想不出如何从这个数组转到类似于使用CFSpreadsheet编写电子表格的查询。

下面是一个例子:

代码语言:javascript
复制
<!--- This include is the function from Ben Nadel referenced above --->
<cfinclude template="Function_CSVtoArray.cfm"> 

<cfset result = csvToArray(file="TEST_File.csv") />

<cfdump var="#result#" label="TESTING">

<!--- *** The above WORKS up to this point ***--->

<!--- Create a new query. --->
<cfset qPartsTwo = QueryNew( "" ) />

<!--- Loop over keys in the struct. --->
<cfloop index="strKey" list="#StructKeyList(result)#" delimiters=",">

<!--- Add column to new query with default values. --->
<cfset QueryAddColumn(qPartsTwo,strKey,"VARCHAR",objParts[strKey]) />

</cfloop>

<!--- This code FAILS with a "You have attempted to dereference a scalar variable of type class coldfusion.runtime.Array as a structure with members" error message --->

我想以这样的方式结束(尽管现在“结果”是某种类型的数组,而不是查询):

代码语言:javascript
复制
<cfspreadsheet action="write" filename="<my path>\TEST.xlsx" query="result">

任何想法都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-21 18:11:29

它看起来像是您的UDF返回一个多维数组,而不是一个结构数组。不要试图将数组强制放入查询对象中,而是尝试使用电子表格功能将数组数据写入xlsx文件。

演示/示例数据

代码语言:javascript
复制
result = [ ["First Name", "Last Name", "Address"]   
           , ["John", "Doe", "123 Anywhere Ave"]    
           , ["Mary", "Smith", "456 Somewhere Street"]  
           , ["Charles", "Doe", "789 Anywhere Court"]   
];

代码:

代码语言:javascript
复制
// create spreadsheet
xlsx = SpreadSheetNew("The Results", true);
// populate with array data
SpreadSheetAddRows( xlsx, result ); 
// save to file
SpreadSheetWrite( xlsx, "c:/path/to/test.xlsx", true );

。。或者,正如詹姆斯·莫勒所建议的,您也可以使用成员函数

代码语言:javascript
复制
xlsx = SpreadSheetNew("The Results", true);
xlsx.addRows( result );
xlsx.write( "c:/path/to/test.xlsx", true );
票数 3
EN

Stack Overflow用户

发布于 2019-05-20 19:15:33

我敢打赌你一定会做这样的事

代码语言:javascript
复制
<cfinclude template="Function_CSVtoArray.cfm"> 

<cfset result = csvToArray(file="TEST_File.csv") />

<cfdump var="#result#" label="TESTING">


<!--- setup the columns that you need --->
<cfset qPartsTwo = queryNew("id,name,amount","Integer,Varchar,Integer", result) />

<cfspreadsheet action="write" filename="<my path>\TEST.xlsx" query="result">

CSVToArray()看起来像是做了一个结构数组。

票数 1
EN

Stack Overflow用户

发布于 2019-05-20 21:04:30

如果您已经拥有来自CSVToArray的结构数组。那么,您可以使用ArrayOfStructuresToQuery函数:https://cflib.org/udf/ArrayOfStructuresToQuery吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56225279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档