如何在打开Excel应用程序时使Python更改xlsx文件?

时间:2016-06-17 19:56:49

标签: python excel python-2.7 excel-vba openpyxl vba

很抱歉,如果我提出之前可能会提出的问题,但我无法在Google和Stack Overflow论坛中找到答案。

问题与openpyxl用法有关,因为它是与xlsx文件一起使用的最方便的库。

    import openpyxl

    wb = openpyxl.load_workbook("D:/Python.xlsx")
    sheet = wb.active

    i = 0

    sheet["A1"] = i

    wb.save("D:/Python.xlsx")

但是,它不适用于打开的Excel文件。我收到错误

    [Errno 13] Permission denied: 'D:/Python.xlsx'

我也发现了类似的问题:

PermissionError [errno 13] when running openpyxl python script in Komodo

write to an open exceldocument

如何解决此错误并使Python在Excel中使用已打开的文件?我目前的版本是Python 2.7。另外,如果可能的话,在xlsm文件中制作相同魔法的解决方案是什么?

UPD:

如果第一个问题没有解决方案(可能是Google Docs除外,感谢@Alex),是否可以编写一个代码来执行以下算法: 1.关闭Excel应用程序并保存 2.在python中执行人员,并将结果保存在Excel中的某个目标位置 3.在Excel应用程序中打开Excel文件?

我知道怎么做2.对1和3有什么看法?

UPD2:

xlwings确实做得很棒!正是我需要的!谢谢!

我想提供一个适合我的代码(只有其他用户可以在Google中找到并使用):

   import xlwings as xl
   import time

   wb = xl.Workbook.active()
   sheet = wb.active

   iter = 10
   i = 0

   while True:
    i += 1
    if i <= iter:
     xl.Range("A1").value = i
     time.sleep(1)
     print(i)
    else:
     break

  wb.save()
  print("Done!")

1 个答案:

答案 0 :(得分:2)

OpenPyXL直接对文件进行操作;它与Excel程序无关,无法控制Excel程序。因此,如果它试图修改的文件被Excel锁定,OpenPyXL就无法做到这一点。

此问题标有,这当然是控制Excel程序的一种合适方式(因此您可以在Excel中打开数据或关闭Excel时修改数据)。如果你想使用Python的Excel接口,那么现在最好的包是xlwings