【问题标题】:copy entire excel worksheet to a new worksheet using Python win32com使用 Python win32com 将整个 Excel 工作表复制到新工作表
【发布时间】:2015-10-19 15:24:26
【问题描述】:

我尝试打开一个名为“N11 Result.xlsx”的现有工作簿。复制整个工作表“Sheet1”(首先将其重命名为“使用 Python 构建”...)并粘贴到同一工作簿中的新工作表(名为“Annual”)。我认为我的代码的最后一行不起作用......任何帮助都会有所帮助。

import os,sys
sys.path.append(r"""U:\Programming\Python\Python Manipulate Excel""")
work_dir=r"""U:\Programming\Python\Python Manipulate Excel"""
file_name='N11 Result.xlsx'

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = True

wb = excel.Workbooks.Open(work_dir+'\\'+file_name)
ws = wb.Worksheets('Sheet1')
ws.Name = 'Built with Python'
wb.Worksheets("Built with Python").Copy(before=wb.Worksheets("Annual"))
excel.Application.Quit()

出现的错误信息将是

Traceback(最近一次通话最后一次): 文件“U:\Programming\Python\Python Manipulate Excel\Test_createExcel_01.py”,第 17 行,在 wb.Worksheets("用 Python 构建").Copy(before=wb.Worksheets("Annual")) 调用中的文件“C:\Temp\gen_py\2.7\00020813-0000-0000-C000-000000000046x0x1x7\Sheets.py”,第 113 行 ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index com_error: (-2147352567, '发生异常。', (0, None, None, None, 0, -2147352565), None)

【问题讨论】:

  • 也许可以看看其中一个 Python 库来执行此操作:xlwt/xlrd openpyxl、xlsxwriter 等。根据我的经验,这比使用 win32com 简单得多
  • @SiHa 你绝对是对的。我开始使用 openpyxl,您知道我应该查看任何书籍或网站以了解有关 openpyxl 的更多信息吗?谢谢!
  • 官方文档怎么样? openpyxl.readthedocs.io/en/stable很彻底。

标签: python excel python-2.7 win32com


【解决方案1】:
    import win32com.client as win32
    from copy import copy
    excel = win32.gencache.EnsureDispatch('Excel.Application')
    #excel.Visible = False
    excel.DisplayAlerts = False
    wb0 = excel.Workbooks.Open(dirname + '\\' + 'original.xlsx')
    ws0 = wb0.Worksheets('Original_sheet')
    wb2 = excel.Workbooks.Open(dirname + '\\' + writer.path)
    ws2 = wb2.Worksheets.Add()
    ws2.Name = 'Copy_original'
    ws2 = wb2.Worksheets('Copy_original')
    ws0.Range("A1:AF100").Copy(ws2.Range("A%s:AF%s" % (row, col)))
    wb2.Save()
    excel.Application.Quit()

【讨论】:

    【解决方案2】:

    这就是你如何使用 pywin32 将整个工作表复制到新工作表中的方法:

    # old_sheet: sheet that you want to copy
    old_sheet.Copy(pythoncom.Empty, workbook.Sheets(workbook.Sheets.Count))
    new_sheet = workbook.Sheets(workbook.Sheets.Count)
    new_sheet.Name = 'Annual'
    

    【讨论】:

    • 在我将pythoncom.Empty 更改为None 后,它起作用了。万分感谢。 :)
    【解决方案3】:

    尝试使用以下代码切换出wb.Worksheets("Built with Python").Copy(before=wb.Worksheets("Annual"))

    wb.Worksheets("Built with Python").Cells.Select()
    excel.Selection.Copy(Destination=wb.Worksheets("Annual").Range("A1"))
    

    让我知道这是否有效。如果它不起作用,则可能是您尝试构建的目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多