【问题标题】:How do I upload a excel spreadsheet into existing table using coldfusion?如何使用coldfusion将excel电子表格上传到现有表中?
【发布时间】:2014-02-20 16:21:59
【问题描述】:

如何使用 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>

【问题讨论】:

  • 您使用的是什么数据库? MSSQL、MYSQL 还是?
  • 数据库:MS SQL Server
  • 为什么不直接使用 Management Studio 中的“导入数据”任务?
  • 我有一个来自网站的上传界面,用户可以上传他们的电子表格。我正在使用 CFSPREADSHEET 阅读该电子表格,并且还有一个包含所有数据的 CFQUERY。
  • 您假设您必须循环,但情况可能并非如此。首先搜索“sql server 导入电子表格”。有许多选项,其中大多数不涉及循环。例如,五秒钟的搜索出现了support.microsoft.com/kb/321686

标签: sql-server coldfusion coldfusion-10


【解决方案1】:

你问的很简单。将电子表格上传到您的服务器,然后使用 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>

附:这是我在您删除帖子之前的答案,我无法再提交答案。

【讨论】:

  • 这是我目前所拥有的,但我收到一个“执行数据库查询错误”错误: 插入 temp_dog_upload (dogNameColumn, dogBreedColumn)值(
  • 你能用确切的错误和你正在使用的确切代码编辑你的问题吗?包括循环和cfspreadsheet?
【解决方案2】:

有几种方法可供选择。他们都有一个非常重要的共同点。首先将电子表格数据放入临时表。首先根据需要处理和验证,然后从临时表写入主表。

方法 1 是让您的网页接受来自用户的文件并将它们放在某个地方。然后,编写一个查找这些文件的 SSIS 包,将它们加载到您的临时表中,并继续执行直到工作完成。然后编写一个代理来安排这个作业以适当的时间间隔运行。

方法 2 是与 ColdFusion 一起使用 continue。您已经将电子表格读入查询。遍历该查询以填充您的临时表并继续处理。

每种方法都需要注意一些事项。使用方法 1,可能需要处理多个文件。您的包裹将不得不处理这个问题。使用方法 2,可能有两个用户希望同时处理文件。您必须确保这两个请求不会相互干扰。

就您“如何循环查询并导入现有表?”的具体问题而言,如下所示:

<cfoutput query="yourquery">
<cfquery datasource="something">
insert into atable
(fields go here)
values
(values, using cfqueryparam go here)
</cfquery>
</cfoutput>

【讨论】:

  • 这是我目前所拥有的,但我收到一个“执行数据库查询错误”错误: 插入 temp_dog_upload (dogNameColumn, dogBreedColumn)值(
  • 我没有回答你的问题,因为我需要 才能工作。
  • 不回答很好,但您的理由无效。带有查询属性的 cfoutput 实际上与带有查询属性的 cfloop 相同。如果您使用 cfloop,您仍然需要一个 cfoutput 标记来访问该查询中的值。如果您采用这种方法,请将您的 cfloop 块放在 cfoutput 块中。否则,您将在循环中做额外的工作。
  • 如果您所做的只是插入记录,那么您不需要cfoutput。也就是说,cfloop 与 cfoutput 没有区别。您的原始插入查询有一个您很可能已修复的语法错误(额外的逗号)。
  • 我修正了逗号。这就是解决语法错误的原因。该问题与使用cfoutput无关,除非页面中还有其他代码您没有显示给我们。
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 2020-01-06
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多