Python - слишком медленное форматирование листа Excel (строка за строкой) - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь отформатировать лист Excel, используя python, используя такую ​​функцию, как

def highlight_myrow_cells(sheetnumber, Sheetname ,dataFrame):
    Pre_Out_df_ncol = dataFrame.shape[1]
    RequiredCol_let = colnum_num_string(Pre_Out_df_ncol)

    #identifying the rows that needs to be highlighted
    arr = (dataFrame.select_dtypes(include=[bool])).eq(False).any(axis=1).values
    ReqRows = np.arange(1, len(dataFrame) + 1)[arr].tolist()
    #The ReqRows are a list of values something like [1,2,3,5,6,8,10]
    print("Highlighting the Sheet " + Sheetname + " in the output workbook")

    # Program is too slow over here---
    for i in range(len(ReqRows)):
        j = ReqRows[i] + 1
        xlwb1.sheets(sheetnumber).Range('A' + str(j) + ":" + RequiredCol_let + str(j)).Interior.ColorIndex = 6
    xlwb1.sheets(sheetnumber).Columns.AutoFit()

    for i in range(1, Emergency_df.shape[1]):
        j = i - 1
        RequiredCol_let = colnum_num_string(i)
        Required_Column_Name = (Emergency_df.columns[j])
        DateChecker1 = contains_word(Required_Column_Name, "Date", "of Death", "Day of Work")
        ResultChecker = Required_Column_Name.startswith("Result")
        if ResultChecker == False:
            if (DateChecker1 == True):
                xlwb1.sheets(sheetnumber).Range(Required_Column_Name + ":" + Required_Column_Name).NumberFormat = "m/d/yyyy"

Программа работает слишком медленно, выделяя строки на основе логики,

Из того, что яИз Excel следует понимать, что скорость очень хорошая, если вы выделяете диапазон строк, а не один ряд за другим.

Я не собираюсь делать это с внешней библиотекой, такой как stylewriter и т. Д.,

1 Ответ

0 голосов
/ 26 февраля 2019

Поскольку вы не можете использовать многопоточность, я бы просто сократил время, необходимое для выполнения каждого цикла.Методы, которые я знаю, выглядят примерно так:

    ReqRows += 1
    for i in range(len(ReqRows)):
        xlwb1.sheets(sheetnumber).Range('A{0}:{1}{0}'.format(i, RequiredCol_let)).Interior.ColorIndex = 6
    xlwb1.sheets(sheetnumber).Columns.AutoFit()

Это должно ускорить ваш цикл (хотя, вероятно, не так сильно, как многопоточность).Надеюсь, это поможет решить вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...