How can I iterate over worksheets in win32com?

天涯浪子 提交于 2021-02-18 18:58:28

问题


I generate an xlsx file with lots of sheets and I want to take me at specific position when I open it manually with Excel. This function does the job but for one sheet only. How can I apply it to all of the sheets in workbook?

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()

I want to make something like this:

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()

回答1:


In order to be taken to specific cell in newly generated document it is necessary to have both of these expressions executed:

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

To do it in every sheet of the workbook:

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()

The code above will take you to K100 on every worksheet in the book.




回答2:


Your script did nothing at all when I tested it.

The script below worked fine, based on my test.

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()


来源:https://stackoverflow.com/questions/41407824/how-can-i-iterate-over-worksheets-in-win32com

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!