Arhn - архитектура программирования

Добавить рабочий лист в существующий файл Excel с пандами

# Set the working folder to the same folder as the script
os.chdir(os.path.dirname(os.path.abspath(__file__)))

test = send_request().content
df = pd.read_csv(io.StringIO(test.decode('utf-8')))
writer = pd.ExcelWriter('NHL_STATS_JSB_final.xlsx', \
                        engine = 'xlsxwriter')
df.to_excel(writer, 'Player statistics', index=False)
writer.save()

Я не понимаю почему, но я пытаюсь добавить рабочий лист Player statistics в мой текущий файл NHL_STATS_JSB_final.xlsx, но это не работает. Вместо добавления рабочего листа в файл мой код использует текущий файл и стирает все предыдущие рабочие листы, чтобы добавить новый.

Как я могу добавить Player statistics в свой текущий файл Excel, удалив все остальные рабочие листы?

10.10.2017


Ответы:


1

Вот фрагмент кода из одного из моих проектов. Это должно делать именно то, что вы хотите. Вам нужно использовать openpyxl, а не xlsxwriter, чтобы вы могли обновить существующий файл.

writer = pd.ExcelWriter(file_name, engine='openpyxl')

if os.path.exists(file_name):
    book = openpyxl.load_workbook(file_name)
    writer.book = book

df.to_excel(writer, sheet_name=key)
writer.save()
writer.close()
10.10.2017
  • Я пробовал это, и это не работает. Я получил сообщение об ошибке в строке book = openpyxl.load_workbook(file_name): KeyError: в архиве нет элемента с именем «[Content_Types].xml». 17.01.2020
  • @zwornik, что обычно является признаком поврежденного файла Excel. 01.04.2021

  • 2

    Как упоминалось в OP, xlsxwriter перезапишет вашу существующую книгу. Xlsxwriter предназначен для записи оригинальных файлов .xlsx. С другой стороны, Openpyxl может изменять существующие файлы .xlsx.

    Ответ @Brad Campbell с использованием openpyxl - лучший способ сделать это. Поскольку OP использовал механизм xlsxwriter, я хотел продемонстрировать, что можно прочитать в вашем существующем файле .xlsx, а затем создать новую книгу (с тем же именем), содержащую эти данные из исходных листов и новый лист, который вы хотел бы добавить.

    import pandas as pd
    import os
    
    xl = pd.ExcelFile('NHL_STATS_JSB_final.xlsx')
    sheet_names = xl.sheet_names  # a list of existing sheet names
    
    #the next three lines are OPs original code 
    os.chdir(os.path.dirname(os.path.abspath(__file__)))
    
    test = send_request().content
    df = pd.read_csv(io.StringIO(test.decode('utf-8')))
    
    #beginning the process of creating new workbook with the same name
    writer = pd.ExcelWriter('NHL_STATS_JSB_final.xlsx', engine = 'xlsxwriter')
    
    d = {} #creating an empty dictionary 
    for i in range (0, len(sheet_names)):
        current_sheet_name = sheet_names[i]
        d[current_sheet_name] = pd.read_excel('NHL_STATS_JSB_final.xlsx', sheetname = i)
        d[current_sheet_name].to_excel(writer, '%s' % (current_sheet_name), index=False)
    
    # adding in the new worksheet
    df.to_excel(writer, 'Player statistics', index=False)
    writer.save()
    
    10.10.2017
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..