有没有办法在Flex上将Excel文件导入MS SQL?

时间:2014-05-20 20:29:09

标签: sql excel flex actionscript coldfusion

我的应用程序需要一个组件,允许用户使用基于Web的Flex应用程序上传Excel文件(.xls)并将其列导入MS SQL表。

是否可以在Flex上制作它?

若然,有什么例子吗?

提前非常感谢你!

2 个答案:

答案 0 :(得分:1)

对于使用Excel文件,我使用Ben Nadel的POI包装器,可以在这里找到。

https://github.com/bennadel/POIUtility.cfc

要使用它,我有一个前面的uplaod页面,我计划在FTP目录中查看是否有要使用的文件。为了说明这一点,我正在简化流程并获取本地文件......

首先,我使用createObject()为POIUtility.cfc初始化函数,以便我可以访问这些方法。像这样:

<cfset importUploads = createObject("component", "cfcs.POIUtility").init()>

我有CSV文件,因此我正在使用此工具的CSV部分:

<cfset csvToArrayTemp = importUploads.csvtoarray()>

但您将改为使用importUploads.ReadExcel()

我需要将这些东西放到表中,所以我这样做:

<cfoutput>
<cfloop from="2" to="#ArrayLen(csvToArrayTemp)#" index="i">
    <cftry>

    <cfquery datasource="mhsdoctors">                
    INSERT INTO [mhsdoctors].[c3design].[profilesaaa]
               ([ID]
               ,[First]
               ,[Middle]
               ,[Last]
               ,[Title]
               ,[Gender]
               ,[Photo]
               ,[School]
               ,[Address])
         VALUES
               ('#csvToArrayTemp[i][13]#'
               ,'#csvToArrayTemp[i][2]#'
               ,'#csvToArrayTemp[i][3]#'
               ,'#csvToArrayTemp[i][1]#'
               ,'#csvToArrayTemp[i][4]#'
               ,'#csvToArrayTemp[i][12]#''
               <cfif csvToArrayTemp[i][13] eq '11111111'>
               ,'frank-tudor-2014.jpg'
               <cfelseif csvToArrayTemp[i][13] eq '11111112'>
               ,'frank.png'
               <cfelse>
               ,'#replacenocase(csvToArrayTemp[i][15],'\\picDir\people\pictures\','','all')#'
               </cfif>
               ,'#csvToArrayTemp[i][8]#'
               ,'#csvToArrayTemp[i][6]#')                
    </cfquery>                           
    <cfcatch>
    <cfmail from="frank@c3design.com" to="frank@emailEmergency.com" subject="The import failed">Check the file for crap data. #csvToArrayTemp[i][13]#</cfmail>
    </cfcatch>
    </cftry>
</cfloop>
</cfoutput>

请注意,我将表字段与csv文件中的特定列匹配。我必须为所有例外代码编写代码,我已经在图片中列出了上述示例。您也很可能也需要这样做。

要对数据进行屏幕扫描(这样你就可以看到结构和抽查问题),增加你的时间,然后在你的循环交互中添加一个cfdump ...(注意这将吸收大量资源并进行cfsetting增加在你的超时我做99999或其他什么(见下文):

(把它放在顶部)

<cfsetting requesttimeout="999999999"> 

(抓取文件后)

<cfdump var="#csvToArrayTemp#" abort>

现在进入POI CFC的东西。

我像这样设置我的文件变量。

<!--- Define the local scope. --->
<cfset var local = {} />
    <cfif FileExists('C:\someplace\important\1001.txt.csv')>
    <cfset arguments.csv = fileRead( 'C:\someplace\important\1001.txt.csv' ) />
    <cfelse>
    <cfmail from="frank@ultraEmergency.com" to="frank@ultraEmergency.com" subject="The import failed">The file wasn't there...panic!</cfmail><cfabort>
    </cfif>
<cfif arguments.trim>

下一个代码块保存了我的替换片段和一些真实的单词示例,因为我经常遇到垃圾用户导入,导致我的导入无法正常工作。

<!--- Remove trailing line breaks and carriage returns. --->
<cfset arguments.csv = reReplace(
    arguments.csv,
    "[\r\n]+$",
    "",
    "all"
    ) />
<cfset arguments.csv = replaceNoCase(
    arguments.csv,
    "Hap""""",
    "",
    "1"
    ) />     
<cfset arguments.csv = reReplace(
    arguments.csv,
    ", Suite",
    " Suite",
    "all"
    ) />  
<cfset arguments.csv = reReplace(
    arguments.csv,                
    '14SW "U" St',
    '14SW U St',
    'one'
    ) />

我让POI实用程序发挥其黑暗魔力。如果一切顺利的话,我有一张桌子,里面装满了我需要的数据,然后我继续进行一些额外的管理步骤,比如将消耗的文件存档在一个安全的地方,以防我需要它来进行现场数据检查或手册导入。

所有这些都是在Coldfusion管理中设置了一个很好的计划任务,在低流量时段每月触发两次。

我希望这有助于或者至少让你开始。

答案 1 :(得分:0)

使用xlsx文件是可能的,因为它们只是包含xml文件的zip存档。 您可以在Microsoft网站上找到规范。但请注意,它包含超过5000页。