经典ASP读取Excel(xlsx)文件报800a0046权限错误问题咨询
经典ASP读取Excel报
CreateObject权限拒绝问题解决方案 错误根因
报错Microsoft VBScript runtime error '800a0046' Permission denied: 'Createobject'出现在Set Objexcel = Createobject("Excel.Application")行,核心原因是IIS运行经典ASP的默认账号没有启动Excel COM组件的权限。同时微软官方明确不支持在服务器端无人值守场景下通过Office Interop(即直接调用Excel.Application对象)的方式操作Office文件,该方案存在内存泄漏、进程僵死、权限配置复杂等固有问题,尤其不适合生产环境使用。
推荐方案:通过ADO驱动读取Excel(支持xls/xlsx,无COM权限问题)
该方案不需要在服务器安装完整Office,仅需安装对应的数据驱动即可,稳定性高、配置简单,是经典ASP环境下读取Excel的通用方案。
前置配置
- 在服务器安装和系统位数一致的Microsoft Access Database Engine驱动,用于提供xlsx格式的读取能力
- 找到存放Excel文件的目录,给IIS运行账号(通常为
IUSR、IIS_IUSRS用户组)分配读取、写入、修改权限,因为ADO读取时会在同目录生成临时锁文件,无写入权限会报错。
实现代码
<% Dim conn, rs, sql Dim knownColumnName, fieldValue ' 替换为实际需要匹配的列名 knownColumnName = "目标列名" ' 初始化ADO对象 Set conn = Server.CreateObject("ADODB.Connection") Set rs = Server.CreateObject("ADODB.Recordset") ' 连接字符串说明: ' 读xlsx用当前Extended Properties配置,读xls将其替换为"Excel 8.0;HDR=Yes;IMEX=1;" ' HDR=Yes表示第一行是列名,第一行是数据则改为HDR=No ' IMEX=1表示将混合类型列按文本读取,避免类型不匹配导致的空值、截断问题 conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\MyExcelDB2.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"";" ' 查询Sheet1的所有数据 sql = "SELECT * FROM [Sheet1$]" rs.Open sql, conn, 1, 1 ' 遍历字段定位目标列 Dim targetColIndex targetColIndex = -1 For i = 0 To rs.Fields.Count - 1 If Trim(rs.Fields(i).Name) = Trim(knownColumnName) Then targetColIndex = i Exit For End If Next ' 遍历行读取目标列的值 If targetColIndex <> -1 Then Do While Not rs.EOF fieldValue = rs.Fields(targetColIndex).Value ' 此处编写自定义的值处理逻辑 Response.Write "行值:" & fieldValue & "<br>" rs.MoveNext Loop End If ' 释放资源,避免内存占用 rs.Close Set rs = Nothing conn.Close Set conn = Nothing %>
临时方案:修复原有Excel COM调用的权限问题(不推荐生产环境使用)
如果必须使用原有的Excel.Application调用方式,按以下步骤配置DCOM权限:
- 在服务器安装2007及以上版本的完整Microsoft Office Excel,确保支持xlsx格式读取
- 命令行运行
dcomcnfg打开组件服务,依次展开「组件服务-计算机-我的电脑-DCOM配置」 - 在列表中找到「Microsoft Excel Application」,右键打开属性面板,切换到「安全」标签
- 启动和激活权限选择自定义,添加
IUSR、IIS_IUSRS账号,授予本地启动、本地激活权限 - 访问权限选择自定义,添加上述账号,授予本地访问权限
- 切换到「标识」标签,选择「交互式用户」(若服务器无登录会话会调用失败,可临时指定高权限账号,存在安全风险)
- 给Excel文件所在目录添加上述IIS账号的读写权限
注意:该方案并发场景下极易出现Excel进程无法退出、内存泄漏、服务挂死问题,仅适合低频次调用的内部测试场景。另外原代码存在变量拼写问题:
Colunmcount拼写错误、单元格对象名大小写/拼写不一致,VBScript虽不区分变量大小写,但拼写错误会导致逻辑运行异常,需要修正。
内容的提问来源于stack exchange,提问作者Nithin Varghese
相关产品推荐
相关产品推荐

