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



我已经搜索了很远很远,但找不到正确的解决方案。我要做的就是获取一列的总和和计数,然后将该总和插入到另一个工作簿中。当源工作簿中没有人时,这工作正常。我可以通过转到文件并单击只读来轻松打开文件。我仍然可以右键单击>复制,然后粘贴它,但在使用 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:Python27libsite-packagesopenpyxlreaderexcel.py", line 164, in 
load_workbook
archive = _validate_archive(filename)
File "C:Python27libsite-packagesopenpyxlreaderexcel.py", line 118, in 
_validate_archive
archive = ZipFile(filename, 'r', ZIP_DEFLATED)
File "C:Python27libzipfile.py", line 778, in __init__
self.fp = io.open(file, filemode)
IOError: [Errno 13] Permission denied: 
'file location'

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

我认为您必须使用库 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 ('nnWhich sheet would you like to read? Enter it''s number.nn')
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库或代码读取已经打开的Excel文件

最新更新