传递给函数的Pywin32 COM对象导致pywintypes.com_error

时间:2013-07-17 18:00:18

标签: python excel pywin32 win32com

更新:见帖子底部

我遇到一个小问题,设计用于在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变量时会失败?我该如何解决这个问题?

0 个答案:

没有答案