0

次のコードで 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 Certified Professional の提案に従って ACE.OLEDB エンジンを使用すると、許可拒否エラーが発生しません。

odbcPath = "Provider=Microsoft.ACE.OLEDB.12.0;" &_
"Data Source=""" & Server.MapPath(filePath) & """;" &_
"Extended Properties=Excel 8.0;"    

ただし、元のエンジンを使用してこれを xlsx ファイルで機能させる方法が必要だと思います。

4

1 に答える 1