我正在创建一个计划任务,从第三方网站下载excel文件,然后相应地更新数据库。
我可以通过网址(即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) />
6月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文件不包含图形等特殊内容,只包含没有数据过滤器的普通数据。
我想也许源文件以不受支持的excel格式保存为POI实用程序,但当我查看文件的信息窗口时,它显示“种类:Microsoft Excel 97-2004工作簿”,它与与我尝试的其他文件(工作)。
答案 0 :(得分:2)
该错误可能引用“只读”但我严重怀疑这是否是问题。毕竟CF实际上将文件写入磁盘 - 因此它将能够读取该文件。
问题更可能是语法问题。你试过ExpandPath('。/ xls')吗?我在你的cfhttp调用中也看到了一个分号 - 我认为这是一个错字。
也可能是您在操作系统发布文件句柄之前使用POI命中文件。尝试添加一点睡眠时间 - 大约10秒 - 以消除这种可能性。