我搜索得很远,但找不到合适的解决方案。我想要做的就是得到一个列的总和和数,并将该总和插入另一个工作簿。当源工作簿中没有人时,这很好。我可以通过转到文件并单击只读来轻松打开文件。我还可以点击右键>复制,然后粘贴它,但在使用它时似乎无法用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。感谢大家的回应。
答案 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可以打开已经在使用的工作表,我在这里读到: