使用win32 python pywin32拒绝excel访问

时间:2013-06-18 19:47:26

标签: python excel winapi pywin32 win32com

我的代码是

#Opens template for creating final report
excel = win32.dynamic.Dispatch('Excel.Application')
template = os.path.abspath((folderpath+'\Poop.xlsx'))
wb = excel.Workbooks.Open(template)
freshws= wb.Sheets("Fresh") #Sheet names must match perfectly
secws= wb.Sheets("sec")

cur.execute("Select * from FIRALL")
freshdata=list(cur.fetchall())
#writes to the first sheet
datarowlen=0
for i,a in enumerate(freshdata):
    datarowlen = len(a)
    for j,b in enumerate(a):
        freshws.Cells(i+1,j+1).Value = a[j]

cur.execute("Select * from SECVE")
secdata=list(cur.fetchall())
#writes to the second sheet
datarowlen=0
for i,a in enumerate(secdata):
    datarowlen = len(a)
    for j,b in enumerate(a):
        secws.Cells(i+1,j+1).Value = a[j]
#saves the report
wb.SaveAs()
wb.Close()

我运行代码时遇到的错误是

Traceback (most recent call last):
  File "main.py", line 369, in <module>
    wb = excel.Workbooks.Open(template)
  File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel'
, "Microsoft Excel cannot access the file 'path to stuff------------------------
Poop Report\\Poop.xlsx'. There are several possible reasons:\n\n\u2022 The file
name or path does not exist.\n\u2022 The file is being used by another program.\
n\u2022 The workbook you are trying to save has the same name as a currently ope
n workbook.", 'xlmain11.chm', 0, -2146827284), None)

我收到一个弹出对话框,说拒绝访问。该文件不是只读的,我是它试图打开的工作簿的所有者。我试过了

win32.gencache.EnsureDispatch('Excel.Application')

我仍然得到同样的错误。有什么我想念的吗?我转向动态思考后期绑定会解决这个错误。

当我试图修复此代码时,我遇到的另一个错误是Pywins -2147418111错误。

2 个答案:

答案 0 :(得分:5)

一位同事和我正在诊断这个问题。我无法相信这是多么模糊,我们通过使用.NET等效代码搜索类似问题找到了解决方案:

要修复,请创建一个名为“桌面”的文件夹。 in&#39; C:\ Windows \ SysWOW64 \ config \ systemprofile \&#39;在64位架构或&#39; C:\ Windows \ System32 \ config \ systemprofile \&#39;在32位服务器上。

这真正解决了一个完全相同的问题。

答案 1 :(得分:2)

我最终因某种原因修复了它,如果有人可以评论为什么我会欣赏它。

我更改为打开工作簿的主要内容是路径中的/到\的斜杠。

然后,在我看到excel之前,我无法选择工作表名称。

excel.Visible = True
wb = excel.Workbooks.Open((excelreport+"\Poop.xlsx"))

奇怪的是,摆脱了pywins的错误

还更改了现在填充工作表的方式

cur.execute("Select * from FIRALL")
freshdata=list(cur.fetchall())
#writes to the first sheet
freshws.Range(freshws.Cells(2,1),freshws.Cells((len(freshdata)+1),len(freshdata[0]))).Value = freshdata

希望这可以帮助遇到同样问题的其他人。