更新:见帖子底部
我遇到一个小问题,设计用于在Excel中创建新工作簿,将传入工作表中的所有数据复制到单独的工作簿,然后保存工作簿。
所以,我在下面编写了函数,由于某种原因,这行:
sheet.Range(sheet.Cells(1, 1), sheet.Cells(row_count, max_col)).Copy()
抛出错误:
Traceback (most recent call last):
File "reports-script.py", line 191, in <module>
format(workbook_filename, query_list, data, colu
mn_orderings)
File "reports-script.py", line 168, in format
excel.save_all_in_workbook_as_mht()
File ".....\excel.py", line 381, in save_all
_as_mht
filename = self.save_copy_as_mht(sheet, sheet.Name, self.folde
r_name)
File ".....\excel_class.py", line 359, in save_cop
y_as_mht
self.excel.Workbooks(1).Sheets(sheet.Name).Cells(row_count, max_col)
File ".....\win32com\client\dynamic.py",
line 172, in __call__
return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.
defaultDispatchName,None)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None,
0, -2147352571), 2)
我打印了传入的工作表对象,它显示为:
<COMObject <unknown>>
但我只需访问Name属性
就可以检索工作表的名称sheet.Name
所以,我不确定这是否是我所看到的问题的一部分。
这是完整的功能体。
def save_copy_as_mht(self, sheet, the_filename, max_col):
self.excel.workbooks.Add()
num_workbooks = self.excel.Workbooks.Count
#Count occupied rows
row_count = self.__count_used_rows(sheet, cutoff_number = -1)
#copy and paste the rows into the new sheet
sheet.Range(sheet.Cells(1, 1), sheet.Cells(row_count, max_col)).Copy()
self.excel.Workbooks(num_workbooks).Sheets(1).PasteSpecial()
self.excel.Workbooks(num_workbooks).Sheets(1).PasteSpecial(XL_PASTE_COLUMN_WIDTHS)
#Saves the new worksheet using the Query Name, overwrites any existing copies
self.save_workbook_as_mht(self.excel.Workbooks(num_workbooks), the_filename, self.folder_name)
#Close workbook
self.excel.Workbooks(num_workbooks).Close()
我意识到上面有两个函数调用我的代码我没有发布,但执行在其中一个函数的函数中甚至没有达到那么远,而另一个函数只返回一个整数。
谢谢!
更新:好吧,如果我用硬编码的整数替换变量引用“row_count”和“max_col”,那么一切都运行得很好.....但这并没有真正解决我的问题它只是更清楚地诊断它。为什么COM函数调用在传递python变量时会失败?我该如何解决这个问题?