我的应用程序需要一个组件,允许用户使用基于Web的Flex应用程序上传Excel文件(.xls)并将其列导入MS SQL表。
是否可以在Flex上制作它?
若然,有什么例子吗?
提前非常感谢你!
答案 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页。