Запись в существующий файл Excel с использованием Python

У меня есть файл.xlsx, в котором есть несколько рабочих листов (с некоторым содержанием). Я хочу записать некоторые данные на конкретные листы, скажем, sheet1 и sheet5. Прямо сейчас я делаю это, используя функции xlrd, xlwt и xlutils copy(). Но есть ли способ сделать это, открыв файл в режиме добавления, добавив данные и сохранив их (например, как мы делаем это для файлов text/csv)?

Вот мой код:

rb = open_workbook("C:\text.xlsx",formatting_info='True')
wb = copy(rb)
Sheet1 = wb.get_sheet(8)
Sheet2 = wb.get_sheet(7)
Sheet1.write(0,8,'Obtained_Value')
Sheet2.write(0,8,'Obtained_Value')
value1 = [1,2,3,4]  
value2 = [5,6,7,8]
for i in range(len(value1)):
 Sheet1.write(i+1,8,value1[i])
for j in range(len(value2)):
 Sheet2.write(j+1,8,value2[j])
wb.save("C:\text.xlsx")

Спасибо

2 ответа

Вы можете сделать это с помощью модуля openpyxl или с помощью модуля xlwings

  1. Использование openpyxl

    from openpyxl import workbook #pip install openpyxl
    from openpyxl import load_workbook
    
    wb = load_workbook("C:\text.xlsx")
    sheets = wb.sheetnames
    Sheet1 = wb[sheets[8]]
    Sheet2 = wb[sheets[7]]
    #Then update as you want it
    Sheet1 .cell(row = 2, column = 4).value = 5 #This will change the cell(2,4) to 4
    wb.save("HERE PUT THE NEW EXCEL PATH") 
    

    файл text.xlsx будет использоваться в качестве шаблона, все значения из файла text.xlsx вместе с обновленными значениями будут сохранены в новом файле

  2. Использование xlwings

     import xlwings 
     wb = xlwings.Book("C:\text.xlsx")  
     Sheet1 = wb.sheets[8]
     Sheet2 = wb.sheets[7]
     #Then update as you want it
     Sheet1.range(2, 4).value = 4 #This will change the cell(2,4) to 4
     wb.save()
     wb.close()
    

    Здесь файл будет обновлен в файле text.xlsx, но если вы хотите получить копию файла, вы можете использовать код ниже

    shutil.copy("C:\text.xlsx", "C:\newFile.xlsx") #copies text.xslx file to newFile.xslx
    

    и использовать

    wb = xlwings.Book("C:\newFile.xlsx") instead of wb = xlwings.Book("C:\text.xlsx")
    

    Как пользователь обоих модулей, я предпочитаю второй, а не первый.

Для работы с существующими файлами Excel вы должны использовать openpyxl. Другие распространенные библиотеки, например, те, которые вы используете, не поддерживают манипулирование существующими файлами Excel. Обходной путь должен

  • сохраните выходной файл под другим именем - text_temp.xlsx
  • удалите свой оригинальный файл - text.xlsx
  • переименуйте ваш выходной файл - text_temp.xlsx в text.xlsx
Другие вопросы по тегам