我有一个使用 ODBC 驱动程序读取的 excel 文件,代码如下:
filePath = "folder\myExcelFile.xlsx"
odbcPath = "DRIVER={Microsoft Excel Driver (*.xls)}; IMEX=1; HDR=YES; "&_
"Excel 8.0; DBQ=" & Server.MapPath(filePath) & ";"
'xlsx driver 2007+
if InStr( lcase(filePath),".xlsx" ) > 0 then
odbcPath= "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; "&_
"DBQ=" & Server.MapPath(filePath) & ";"
end if
'Excel processing
Dim objConn
Dim objRs
set objConn = Server.CreateObject("ADODB.Connection")
set objRs = Server.CreateObject("ADODB.Recordset")
objConn.Open odbcPath
strSQL = "SELECT * FROM A1:Q50000"
objRs.LockType = 1
set objRs = objConn.Execute(strSQL)
Do Until objRs.EOF
''Do stuff
myfield = objRs.Fields("fieldName")
''...other code...
Loop
objRs.Close
objRs.ActiveConnection = Nothing
set objRs = Nothing
objConn.Close
set objConn = Nothing
在此之后,当我尝试使用以下内容删除文件时:
Dim objFSO_Del
Set objFSO_Del = CreateObject("Scripting.FileSystemObject")
objFSO_Del.DeleteFile Server.MapPath(filePath), True
我收到一个permission denied
错误,这不应该发生,因为我的 IUSR 帐户拥有执行此操作的文件夹的所有权限(完全控制)。其实当我评论上面贴的代码并尝试删除文件时,操作是成功的
我正在考虑使用以下方法获取 excel 记录:
set objExcel = CreateObject("Excel.Application")
set objWorkbook = objExcel.Workbooks.Open(Server.MapPath(filePath))
因为这将使我能够精确控制关闭文件并退出 Excel 进程。
有没有一种方法可以使用 ODBC 技术有效地释放和删除 excel 文件?我已经进行了大量研究,目前还没有找到解决方案。
非常感谢您的洞察力。
****更新****
我再次测试了我的原始代码,它实际上适用于 xls 但不适用于 xlsx 文件。
当我按照oracle 认证专业人士的建议使用 ACE.OLEDB 引擎时,我没有收到权限被拒绝错误:
odbcPath = "Provider=Microsoft.ACE.OLEDB.12.0;" &_
"Data Source=""" & Server.MapPath(filePath) & """;" &_
"Extended Properties=Excel 8.0;"
但是我认为应该是一种使用原始引擎进行此操作的方法,以使其在 xlsx 文件上工作。