如何使用ColdFusion10将Excel电子表格上传到现有表格? 我有一个excel电子表格已经保存,我有CFQuery(“myQuery”)输出我需要的数据。如何循环查询并导入现有表?
数据库:MS SQL Server
到目前为止,据我所知,我需要循环查询包含所有数据的查询。
<cffunction name="uploadDogSheet" access="public" output="yes" returnType="void"
hint="upload the spreadSheet">
<cfset currentRowChecked = "1">
<cfset lastRow = numberOfRows> <!-- sets the number of rows that it will validate-->
<cfspreadsheet
action="read"
src="#SESSION.theExcelFile#"
headerrow= "1"
excludeHeaderRow = "true"
query = "allDoggyData"
rows = "1-#lastRow#" />
<cfscript>
allDataQuery = new Query(
sql ="SELECT * FROM allDoggyData",
dbtype = "query",
allData = allData);
allDataQueryResult = allDataQuery.execute().getResult();
</cfscript>
<cfloop query="allDoggyData">
<CFQUERY DATASOURCE="#mydatabase#" name="input_req">
insert into temp_dog_upload (dogNameColumn, dogBreedColumn, dogColor)
values
(
<cfqueryparam value="#allDoggyData.dogNameExcelColumn#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#allDoggyData.dogBreedExcelColumn#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#allDoggyData.dogColorExcelColumn#" cfsqltype="cf_sql_varchar">
)
</CFQUERY>
</cfloop>
<p>The sheet has been uploaded!<p></span>
答案 0 :(得分:4)
你要问的很简单。将电子表格上传到您的服务器,然后使用cfspreadsheet读取它。
<cfspreadsheet
action="read"
src = "filepath"
columns = "range"
columnnames = "comma-delimited list"
excludeHeaderRow = "true | false"
format = "CSV|HTML"
headerrow = "row number"
name = "text"
query = "query name"
rows = "range"
sheet = "number"
sheetname = "text">
然后简单地遍历您在cfspreadsheet
中定义的查询<cfloop query="queryname">
<cfquery name="" datasource="">
INSERT INTO ....
</cfquery
</cfloop>
P.S。这是我的答案,在您删除帖子之前,我无法再提交答案。
答案 1 :(得分:2)
有几种方法可以采取。它们都有一个非常重要的共同点。首先将电子表格数据放入临时表中。首先处理并验证,然后从临时表中写入主表。
方法1是让您的网页接受用户的文件并将其放在某处。然后,编写一个查找这些文件的SSIS包,将它们加载到临时表中,然后继续运行直到作业完成。然后编写代理程序以安排此作业以适当的间隔运行。
方法2是继续使用ColdFusion。您已经将电子表格读入查询中。遍历该查询以填充临时表并继续处理。
每种方法都需要注意几点。使用方法1,可能需要处理多个文件。你的包必须处理它。使用方法2,可能有两个用户希望同时处理文件。你必须确保这两个请求不会相互干扰。
至于您的具体问题“如何循环查询并导入现有表?”,如下所示:
<cfoutput query="yourquery">
<cfquery datasource="something">
insert into atable
(fields go here)
values
(values, using cfqueryparam go here)
</cfquery>
</cfoutput>