2012-06-20 64 views
0

獲取文件後的只讀從第三方站點下載excel文件並相應地更新數據庫的計劃任務。在ColdFusion中使用cfhttp

我可以通過url成功下載該文件(即http://www.example.com/myExcel.xls)。但是當我嘗試閱讀後,使用Ben Nadel的POIUtility.cfc,我得到各種錯誤。這似乎是由於當我下載帶有CFHTTP的文件時,它以只讀格式保存。

這種行爲聽起來是否對任何人都熟悉,或者是否有人知道如何保存文件,使其不是隻讀?

在此先感謝。代碼

部分:六月

<cfhttp method="get" 
    url="http://www.example.com/myExcel.xls" 
    path="#expandpath('xls')#" file="stocks.xls" /> 
<cfset objPOI = CreateObject("component", "POIUtility").Init()/> 
<cfset arrSheets = objPOI.ReadExcel(FilePath = ExpandPath("xls/stocks.xls") 
            , HasHeaderRow = true) /> 

UPDATE月22日: 我收到的錯誤是:

Object instantiation exception. 
An exception occurred while instantiating a Java object. The class must not be an interface or an abstract class. Error: ''. 
The error occurred in /Volumes/RAID/DATA/ColdFusion9/wwwroot/website/POIUtility.cfc: line 883 
Called from /Volumes/RAID/DATA/ColdFusion9/wwwroot/website/autoUpdateStock.cfm: line 36 
Called from /Volumes/RAID/DATA/ColdFusion9/wwwroot/website/POIUtility.cfc: line 883 
Called from /Volumes/RAID/DATA/ColdFusion9/wwwroot/website/autoUpdateStock.cfm: line 36 
881 :    "org.apache.poi.hssf.usermodel.HSSFWorkbook" 
882 :    ).Init(
883 :     LOCAL.ExcelFileSystem 
884 :     ); 
885 :     

如果我直接從我的操作系統中打開下載的文件excel中的狀態欄也會顯示「(只讀)」。如果我將文件另存爲一個不同的文件名,然後在POI代碼中使用該新文件名,它可以毫無問題地工作。

我有一個類似的錯誤,前一段時間問題不支持excel文件導致POI給出相同的錯誤。但是這個excel文件不包含像graph等特殊的東西,只是沒有datafilters的普通數據。

我在想也許源文件保存在POI工具不支持的excel格式中,但是當我查看文件的信息窗口時,它說「Kind:Microsoft Excel 97-2004 workbook」,它是相同的就像我嘗試過的其他文件一樣(那些工作)。

+0

代碼: Juggala

+3

您是否通過下載文件,使其可寫,然後執行POI內容(如果這樣做,沒有錯誤,從而證明您的理論是正確的),測試了您的理論?這對你的情況非常重要。 –

+2

請給出一個實際的錯誤或兩個。通常,當您使用cfhttp提取文件時,該文件將被保存爲只讀文件。但是,您可能需要授予執行權限才能真正讀取文件。再一次,實際的錯誤信息會有所幫助。你能用FileOpen(ExpandPath(「xls/stocks.xls」))來打開文件嗎? –

回答

2

該錯誤可能引用「只讀」,但我嚴重懷疑這是否是問題。畢竟CF實際上是寫入的文件到磁盤 - 所以它將能夠讀取那個文件。

問題更可能是語法。你有沒有試過ExpandPath('./xls')?我也在你的cfhttp調用中看到一個分號 - 我認爲這是一個錯字。

也可能是您在操作系統發佈文件句柄之前使用POI命中文件。嘗試增加一點睡眠時間 - 大約10秒鐘 - 以消除這種可能性。

+0

你可以通過打電話入睡。 'CreateObject(「java」,「java.lang.Thread」).sleep(9000);'9000是毫秒睡覺。 –

+1

@BradleyMoore,或者如果使用CF8以後版本的CF,只需使用'sleep()'函數... –

+0

感謝您的幫助。 Mark:語法看起來不是問題,如果我將源文件更改爲不同的excel文件,代碼將毫無問題地執行。布拉德利:睡眠很好,但沒有什麼區別。 – Juggala

相關問題