有没有办法在使用Python(Windows)的另一个用户使用xlsx文件时复制或打开/读取它?

时间:2017-04-12 17:18:02

标签: python excel windows python-2.7

我搜索得很远,但找不到合适的解决方案。我想要做的就是得到一个列的总和和数,并将该总和插入另一个工作簿。当源工作簿中没有人时,这很好。我可以通过转到文件并单击只读来轻松打开文件。我还可以点击右键>复制,然后粘贴它,但在使用它时似乎无法用Python做这些。

如果这是重复,我提前道歉。

这只是使用基本的打开或复制功能。

shutil.copy(src, dst) #For the copy procedure

openpyxl.load_workbook(file) #For just the open and read

当文件被其他用户使用时,这两个函数基本上都会产生类似的错误。

Traceback (most recent call last):
File "myfile.py", line 14, in <module>
sbwb = openpyxl.load_workbook(sbfile)
File "C:\Python27\lib\site-packages\openpyxl\reader\excel.py", line 164, in 
load_workbook
archive = _validate_archive(filename)
File "C:\Python27\lib\site-packages\openpyxl\reader\excel.py", line 118, in 
_validate_archive
archive = ZipFile(filename, 'r', ZIP_DEFLATED)
File "C:\Python27\lib\zipfile.py", line 778, in __init__
self.fp = io.open(file, filemode)
IOError: [Errno 13] Permission denied: 
'file location'

更新 我发现了这个问题,它根本与Python无关。发生的事情是我在搜索文件夹中的最新文件。当代码在文件夹中搜索时,它会在原始文件之前找到锁定的文件。我刚刚排除了以〜$开头的文件,它找到了正确的文件并成功加载,并使用了openpyxl。感谢大家的回应。

1 个答案:

答案 0 :(得分:0)

我认为你必须使用库xlrd打开它,这里有一些代码:

from xlrd import open_workbook

fh = open_workbook((filepath),'r')
no = 1
print ('\n')
for sheet_name in fh.sheet_names():
    print (' Sheet: ',str(no),' |  Name: ',sheet_name)
    no += 1
print ('\n\nWhich sheet would you like to read? Enter it''s number.\n\n')
while True:
    inpstr=input('    > ')
    try:
        (selected_sheet_no)=int(inpstr)
        print (('\n You have selected sheet: '),(selected_sheet_no))
        (selected_sheet_no)-=1
        break
    except:
        print ('\nInvalid input.')
        print ('\nTo go back to start enter "y".')
        continue  
s = fh.sheet_by_index(selected_sheet_no)
for row in range(s.nrows):
    col_value = []
    for col in range(s.ncols):
        value  = (s.cell(row,col).value)
        try : value = str(int(value))
        except : pass
        col_value.append(value)
    data.append(col_value)

不幸的是,我不确定如何按名称打开工作表,您必须参考xlrd文档。我的代码给出了一个列表列表,每个子列表都是整行,每个元素都是该行中的一个单元格。

我很遗憾地告诉你我不知道如何写一个excel文件,特别是如果它已经打开了。

显然xlrd可以打开已经在使用的工作表,我在这里读到:

python library or code to read already open Excel file