【问题标题】:How can I iterate over worksheets in win32com?如何遍历 win32com 中的工作表?
【发布时间】:2016-12-31 11:17:27
【问题描述】:

我生成了一个包含很多工作表的 xlsx 文件,当我使用 Excel 手动打开它时,我想将我带到特定位置。此功能可以完成这项工作,但仅适用于一张纸。如何将其应用于工作簿中的所有工作表?

import win32com.client

def select_cell():
    xl = win32com.client.gencache.EnsureDispatch('Excel.Application')

    wb = xl.Workbooks.Open(r'H:\Files\1.xlsx')
    ws = xl.ActiveSheet
    ws.Range('B100').Select()
    wb.Close(True)
    xl.Quit()

select_cell()

我想做这样的事情:

import win32com.client

def select_cell():
    xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
    wb = xl.Workbooks.Open(r'H:\Files\1.xlsx')
    for ws in wb.Worksheets():
        ws.Range('B100').Select()

    wb.Close(True)
    xl.Quit()

select_cell()

【问题讨论】:

  • 使用第二个脚本时发生了什么?
  • 对于 wb.Worksheets() 中的 ws:文件“C:\Users\1\AppData\Local\Temp\gen_py\2.7\00020813-0000-0000-C000-000000000046x0x1x7\Sheets.py” ,第 113 行,在 call 中 ret = self._oleobj_.InvokeTypes(0, LCID, 2, (9, 0), ((12, 1),),Index pywintypes.com_error: (-2147352567 , '发生异常。', (0, None, None, None, 0, -2147352571), 1)
  • 您是否尝试将 for ws in wb.Worksheets(): 替换为 for sh in wb.Sheets: 然后 ws = wb.Worksheets(sh.Name)
  • 它确实有效,谢谢。我能够迭代并在同一个单元格中的所有值中放置一个值。不幸的是,ws.Range('B100').Select() 给出了一个错误:类 Range 中的方法 Select 未正确完成。因此,我仍然无法像在第一个示例中那样在每个工作表中设置打开点,也无法像 Excel 在您手动滚动然后关闭文档时所做的那样。
  • 您是否尝试修改 ActiveSheet 以探索所有 for sh in wb.Sheets: ? ==> 提议xl.Worksheets(sh.Name).Activate(),然后是ws = xl.ActiveSheet...

标签: python excel python-2.7 python-3.x


【解决方案1】:

为了被带到新生成的文档中的特定单元格,必须执行这两个表达式:

ws.Range('k100').Value = 1
ws.Range('k100').Select()

在工作簿的每张纸上都这样做:

def select_cell():
    xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
    wb = xl.Workbooks.Open(r'H:\Files1.xlsx')

    for sh in wb.Sheets:

        xl.Worksheets(sh.Name).Activate()
        ws = xl.ActiveSheet
        ws.Range('k100').Value = 1
        ws.Range('k100').Select()


    wb.Close(True)
    xl.Quit()

上面的代码将把你带到书中每个工作表上的 K100。

【讨论】:

    【解决方案2】:

    当我测试你的脚本时,它什么也没做。

    根据我的测试,下面的脚本运行良好。

    import xlsxwriter
    
    
    # Create an new Excel file and add a worksheet.
    workbook = xlsxwriter.Workbook('C:\\Users\\Excel\\Desktop\\book1.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Widen the first column to make the text clearer.
    worksheet.set_column('A:A', 20)
    
    # Add a bold format to use to highlight cells.
    bold = workbook.add_format({'bold': True})
    
    # Write some simple text.
    worksheet.write('A1', 'Hello')
    
    # Text with formatting.
    worksheet.write('A2', 'World', bold)
    
    # Write some numbers, with row/column notation.
    worksheet.write(2, 0, 123)
    worksheet.write(3, 0, 123.456)
    
    
    workbook.close()
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      相关资源
      最近更新 更多