Запись информации в Excel из Python: от базовых до продвинутых возможностей

Раздел: Обработка данных -> Работа с Excel

Основные способы сохранения данных в Excel с помощью Python

Наиболее эффективное решение: библиотека pandas

Как быстро записать DataFrame в Excel с минимальным кодом?

Библиотека pandas предоставляет метод to_excel(), который позволяет сохранить данные в формате .xlsx с одной строкой кода. Это оптимально для табличных данных, когда не требуется тонкое управление форматированием.


import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['Moscow', 'SPb', 'Kazan']}
df = pd.DataFrame(data)
df.to_excel('people.xlsx', index=False)
  

код python в excel (код python в excel)

Пояснение: сначала создаётся словарь, затем DataFrame. Параметр index=False убирает индекс строк. Файл сохраняется в рабочую директорию.

Типичные проблемы и их решения:

  • Ошибка ModuleNotFoundError: отсутствует библиотека pandas или openpyxl (для записи .xlsx). Установка: pip install pandas openpyxl.
  • Кириллица в именах столбцов отображается иероглифами: необходимо задать кодировку, но Excel автоматически работает с Unicode. Проблема решается сохранением в .xlsx, а не в .xls.
  • Запись больших данных медленная: pandas хорошо оптимизирован, но для миллионов строк лучше использовать партиционирование или библиотеку xlsxwriter.

Как сохранить данные с помощью openpyxl, управляя каждой ячейкой?

Библиотека openpyxl даёт полный контроль над структурой книги. Позволяет создавать листы, объединять ячейки, задавать стили.


from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "Сотрудники"
ws['A1'] = 'Имя'
ws['B1'] = 'Возраст'
ws['A2'] = 'Анна'
ws['B2'] = 28
wb.save('employees.xlsx')
  

Python работа с таблицами excel (работа с таблицами excel в python)

Пояснение: создаётся рабочая книга, выбирается активный лист, задаются значения ячеек. Сохранение выполняется методом save().

Возможные ошибки:

  • Permission denied – файл уже открыт в Excel. Закрыть файл или использовать другой режим доступа.
  • Сложность при добавлении большого количества данных – циклы в Python замедляются. Рекомендуется использовать ws.append() для строк.

Как записать данные с настраиваемым форматированием (цвета, шрифты) через xlsxwriter?

Библиотека xlsxwriter специализируется на создании файлов Excel с богатыми возможностями форматирования: условное оформление, диаграммы, автоподбор ширины столбцов.


import xlsxwriter

workbook = xlsxwriter.Workbook('report.xlsx')
worksheet = workbook.add_worksheet('Продажи')
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Товар', bold)
worksheet.write('B1', 'Сумма', bold)
worksheet.write('A2', 'Монитор')
worksheet.write('B2', 15000)
workbook.close()
  

Excel скрипты python (скрипты python для excel)

Пояснение: формат создаётся отдельно (add_format) и применяется к ячейкам. Важно вызвать close() для сохранения.

Проблемы при использовании xlsxwriter:

  • Не поддерживает чтение файлов – библиотека только для записи. Для чтения нужен openpyxl или pandas.
  • Сложность с добавлением данных в существующий файл – xlsxwriter не умеет модифицировать существующие книги. Для дозаписи нужно пересоздавать файл.

Как сохранить данные в формате .xls (старый Excel) с помощью xlwt?

Для обратной совместимости с Excel 97-2003 можно использовать библиотеку xlwt. Однако она устарела и не поддерживает .xlsx.


import xlwt

book = xlwt.Workbook()
sheet = book.add_sheet('Лист1')
sheet.write(0, 0, 'Имя')
sheet.write(1, 0, 'Пётр')
book.save('old_format.xls')
  

Python сохранить в excel (сохранение данных в excel с помощью python)

Пояснение: нумерация строк и столбцов начинается с 0. Сохраняется в .xls.

Ограничения:

  • Максимальное количество строк – 65536, столбцов – 256.
  • Форматирование ограничено по сравнению с xlsxwriter.

Как сохранить данные в CSV и потом открыть в Excel?

CSV – текстовый формат, который Excel открывает как таблицу. Это быстрый способ без зависимостей от библиотек Excel.


import csv

data = [['Имя', 'Оценка'], ['Анна', 5], ['Иван', 4]]
with open('scores.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerows(data)
  

Пояснение: кодировка utf-8-sig добавляет BOM, что корректно отображает кириллицу в Excel.

Проблемы с CSV:

  • Не сохраняется форматирование, формулы, несколько листов.
  • Excel может разделять столбцы по-своему, если разделитель не соответствует региональным настройкам.
- Python excel openpyxl (работа с excel в python через openpyxl)

Расширенные примеры сохранения данных в Excel

Пример 1: Запись нескольких DataFrame на разные листы с помощью pandas

Пример

import pandas as pd

sales = {'Month': ['Янв', 'Фев'], 'Revenue': [1000, 1500]}
expenses = {'Month': ['Янв', 'Фев'], 'Cost': [800, 900]}
df_sales = pd.DataFrame(sales)
df_expenses = pd.DataFrame(expenses)

with pd.ExcelWriter('finance.xlsx') as writer:
    df_sales.to_excel(writer, sheet_name='Продажи', index=False)
    df_expenses.to_excel(writer, sheet_name='Расходы', index=False)
# Результат: файл finance.xlsx с двумя листами 'Продажи' и 'Расходы'.

Пример 2: Добавление формул и условного форматирования через openpyxl

Пример

from openpyxl import Workbook
from openpyxl.styles import PatternFill
from openpyxl.utils import get_column_letter

wb = Workbook()
ws = wb.active
ws['A1'] = 'Товар'
ws['B1'] = 'Количество'
ws['C1'] = 'Цена'
ws['D1'] = 'Сумма'
ws['A2'] = 'Ручка'
ws['B2'] = 10
ws['C2'] = 20
ws['D2'] = '=B2*C2'  # формула
# Условное форматирование: если сумма > 200, заливка зелёным
from openpyxl.formatting.rule import CellIsRule
fill = PatternFill(start_color='92D050', end_color='92D050', fill_type='solid')
ws.conditional_formatting.add('D2:D10',
                              CellIsRule(operator='greaterThan', formula=['200'], fill=fill))
wb.save('formulas.xlsx')
# Результат: файл с формулой в D2, ячейка со значением >200 окрашивается зелёным.

Пример 3: Создание диаграммы с помощью xlsxwriter

Пример

import xlsxwriter

workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()

data = [10, 25, 30, 15]
worksheet.write_column('A1', data)

chart = workbook.add_chart({'type': 'column'})
chart.add_series({'values': '=Sheet1!$A$1:$A$4', 'name': 'Продажи'})
worksheet.insert_chart('C1', chart)
workbook.close()
# Результат: файл с гистограммой по данным из столбца A.

Пример 4: Дозапись в существующий файл с помощью openpyxl (чтение + модификация)

Пример

from openpyxl import load_workbook

wb = load_workbook('people.xlsx')  # предполагается, что файл существует
ws = wb.active
# Добавляем новую строку
ws.append(['Давид', 40, 'Новосибирск'])
wb.save('people.xlsx')
# Результат: в исходный файл добавлена строка с новыми данными.

Пример 5: Эффективная запись больших данных с использованием модуля csv и временного файла

Пример

import csv
import pandas as pd

# генерация 100000 строк
large_data = [{'id': i, 'value': i * 2} for i in range(100000)]
df = pd.DataFrame(large_data)
# Сохранение через pandas в CSV, затем конвертация в XLSX (но можно напрямую)
df.to_csv('big.csv', index=False, encoding='utf-8-sig')
# Чтение обратно и сохранение в xlsx (как альтернатива)
df2 = pd.read_csv('big.csv')
df2.to_excel('big.xlsx', index=False, engine='xlsxwriter')
# Результат: файл big.xlsx с 100000 строк, создан через промежуточный CSV для ускорения.

Сохранение данных в Excel с помощью Python - comments

En
Python сохранить в excel (python)