Могу ли я изменить конкретный лист из файла Excel и записать его обратно без изменения других листов, используя Pandas |openpyxl - PullRequest
0 голосов
/ 19 марта 2019

Я попытаюсь объяснить мою проблему на примере:

Допустим, у меня есть файл Excel test.xlsx, в котором есть пять вкладок (так называемые рабочие листы): Лист1, Лист2, Лист3, Лист4 и лист5. Мне интересно читать и изменять данные в sheet2.

В моем sheet2 есть несколько столбцов, ячейки которых являются раскрывающимися, и значения этих раскрывающихся значений определены в sheet4 и sheet5. Я не хочу трогать sheet4 и sheet5. (Я имею в виду, что на sheet4 и sheet5 есть ссылки на ячейки на Sheet2).

Я знаю, что могу прочитать все листы в файле Excel, используя pd.read_excel('test.xlsx', sheetnames=None), который в основном дает все листы в виде словаря (OrderedDict) DataFrames.

Теперь я хочу изменить свой лист2 и сохранить его, не мешая другим. Поэтому возможно ли это сделать с помощью библиотеки Python Pandas.

[ОБНОВЛЕНИЕ - 01.04.2009]

Я использую Pandas read_excel для чтения любого листа, который мне нужен, из моего файла Excel, проверки данных с данными в базе данных и обновления столбца состояния в файле Excelfile.

Так что для обратной записи столбца состояния в excel я использую openpyxl, как показано в псевдокоде ниже.

import pandas as pd
import openpyxl

df = pd.read_excel(input_file, sheetname=my_sheet_name)
df = df.where((pd.notnull(df)), None)

write_data = {}

# Doing some validations with the data and building my write_data with key 
# as (row_number, column_number) and value as actual value to put in that 
# cell.

at the end my write_data looks something like this: 
{(2,1): 'Hi', (2,2): 'Hello'}

Теперь я определил отдельный класс с именем WriteData для записи данных с использованием openpyxl

# WriteData(input_file, sheet_name, write_data)

book = openpyxl.load_workbook(input_file, data_only=True, keep_vba=True)
sheet = book.get_sheet_by_name(sheet_name)

for k, v in write_data.items():
   row_num, col_num = k
   sheet.cell(row=row_num, column=col_num).value = v

book.save(input_file)

Теперь, когда я делаю эту операцию, она удаляет все формулы и диаграммы. Я использую openpyxl 2.6.2

Пожалуйста, поправьте меня, если я делаю что-то не так! Есть ли лучший способ сделать?

Любая помощь по этому вопросу будет принята с благодарностью:)

1 Ответ

0 голосов
/ 19 марта 2019

Чтобы изменить один лист за раз, вы можете использовать Pandas Excel Writer:

sheet2 = pd.read_excel("test.xlsx", sheet = "sheet2")

##modify sheet2 as needed.. then to save it back:

with pd.ExcelWriter("test.xlsx") as writer:
        sheet2.to_excel(writer, sheet_name="sheet2")
...