1

更新:见帖子底部

我在设计用于在 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”,那么一切正常......但这并不能真正解决我的问题,它只是诊断它更多清楚地。为什么传递 python 变量时 COM 函数调用会失败?我该如何解决这个问题?

4

0 回答 0