усекать, копировать из одного xlsx и вставлять в другой с помощью openpyxl: портит все текстовые поля, диаграммы и т. д. - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь автоматизировать некоторые шаги, которые я должен делать каждую неделю в Python 3.7.3. В основном это все о

  • усечение xlsx-1
  • копирование из xlsx-2 в усеченный xlsx-1
  • Экономия xlsx-1

Все идет хорошо, но после этих шагов мой xlsx-1 все испортил. Все формулы все еще работают, но все текстовые поля (с ссылками на ячейки и без них) пропали, и все диаграммы имеют другой формат (например, новые границы).

Почему это происходит, и что я могу сделать, чтобы избежать этих проблем?

print("Please type in the date first (format: YYMMDD) > ")

last_wk = dt.date.today().isocalendar()[1] - 1
curr_wk = last_wk + 1

prefix = f"{input()}_CW{str(last_wk)}"
prefix_final = f"{input()}_CW{str(curr_wk)}"

p_basic = 'C:\\Users\\Don_Andrej\\OneDrive - Shared Services GmbH\\Profile\\Desktop\\180816_Start\\Reports'
p_export = os.path.join(p_basic, '_process_BE_NL_BRE_exports', f"{prefix}")
p_final = os.path.join(p_basic, '_process_BE_NL_BRE_exports', f"{prefix_final}")

files = ['Offline vs Online sales week', 
        'Gefactureerd week',
        'BE_onlineshopSales_oldOrder']

def truncate():
    for file in files:
        p = p_export + f"_{file}.xlsm"

        wb = opx.load_workbook(filename = p)
        ws = wb['rawData']

        for all_row in range(1, ws.max_row + 1):
            for all_col in range(1, ws.max_column + 1):
                ws.cell(row = all_row, column = all_col).value = None

        wb.save(p)
        wb.close()
        print(f"{file} has been truncated!")

def copy_paste():
    for file in files:
        p_from = p_export + f"_EXPORT_{file}.xlsx"
        p_to = p_export + f"_{file}.xlsx"

        wb_from = opx.load_workbook(filename = p_from)
        ws_from = wb_from['Sheet1']

        wb_to = opx.load_workbook(filename = p_to)
        ws_to = wb_to['rawData']


        for all_row in range(1, ws_from.max_row + 1):
            for all_col in range(1, ws_from.max_column + 1):
                ws_to.cell(row = all_row, column = all_col).value = ws_from.cell(row = all_row, column = all_col).value

        wb_to.save(p_to)
        wb_to.close()
        wb_from.close()
        print(f"The export were copied into {file}")


truncate()
copy_paste()
...