Вопрос-Ответ

How to write to an Excel spreadsheet using Python?

Как выполнить запись в электронную таблицу Excel с помощью Python?

Мне нужно записать некоторые данные из моей программы в электронную таблицу Excel. Я поискал в Интернете, и, похоже, доступно много пакетов (xlwt, XlsXcessive, openpyxl). Другие предлагают выполнять запись в файл .csv (никогда не использовал CSV и на самом деле не понимаю, что это такое).

Программа очень проста. У меня есть два списка (с плавающей точкой) и три переменные (строки). Я не знаю длины двух списков, и они, вероятно, не будут одинаковой длины.

Я хочу, чтобы макет был таким, как на рисунке ниже:

Пример макета

Розовый столбец будет содержать значения из первого списка, а зеленый столбец будет содержать значения из второго списка.

Итак, какой лучший способ сделать это?

Я использую Windows 7, но у меня не обязательно будет установлен Office на компьютерах, на которых запущена эта программа.

import xlwt

x=1
y=2
z=3

list1=[2.34,4.346,4.234]

book = xlwt.Workbook(encoding="utf-8")

sheet1 = book.add_sheet("Sheet 1")

sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")

sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)

sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")

i=4

for n in list1:
i = i+1
sheet1.write(i, 0, n)

book.save("trial.xls")

Я написал это, используя все ваши предложения. Работа выполнена, но ее можно немного улучшить.

Как мне отформатировать ячейки, созданные в цикле for (list1 значения), как scientific или number?

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

Переведено автоматически
Ответ 1

Используйте DataFrame.to_excel из pandas. Pandas позволяет вам представлять ваши данные в функционально насыщенных структурах данных, а также позволяет вам читать в файлах Excel.

Сначала вам нужно будет преобразовать ваши данные в DataFrame, а затем сохранить их в файл Excel следующим образом:

In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]:
Reaction Time Stimulus Time
0 1 1
1 2 2
2 3 3
3 4 4

In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)

и полученный файл Excel выглядит следующим образом:

введите описание изображения здесь

Обратите внимание, что оба списка должны быть одинаковой длины, иначе pandas будут жаловаться. Чтобы решить эту проблему, замените все пропущенные значения на None.

Ответ 2
import xlwt

def output(filename, sheet, list1, list2, x, y, z):
book = xlwt.Workbook()
sh = book.add_sheet(sheet)

variables = [x, y, z]
x_desc = 'Display'
y_desc = 'Dominance'
z_desc = 'Test'
desc = [x_desc, y_desc, z_desc]

col1_name = 'Stimulus Time'
col2_name = 'Reaction Time'

#You may need to group the variables together
#for n, (v_desc, v) in enumerate(zip(desc, variables)):
for n, v_desc, v in enumerate(zip(desc, variables)):
sh.write(n, 0, v_desc)
sh.write(n, 1, v)

n+=1

sh.write(n, 0, col1_name)
sh.write(n, 1, col2_name)

for m, e1 in enumerate(list1, n+1):
sh.write(m, 0, e1)

for m, e2 in enumerate(list2, n+1):
sh.write(m, 1, e2)

book.save(filename)

для получения дополнительных пояснений:
https://github.com/python-excel

Ответ 3

  • xlrd / xlwt (стандарт): Python не имеет такой функциональности в своей стандартной библиотеке, но я думаю о xlrd / xlwt как о "стандартном" способе чтения и записи файлов Excel. Создать рабочую книгу, добавлять листы, записывать данные / формулы и форматировать ячейки довольно просто. Если вам нужно все это, вы можете добиться наибольшего успеха с помощью этой библиотеки. Я думаю, вы могли бы выбрать вместо этого openpyxl, и это было бы очень похоже, но я им не пользовался.


    Чтобы отформатировать ячейки с помощью xlwt, определите a XFStyle и включите стиль при записи на лист. Вот пример со многими числовыми форматами. Смотрите пример кода ниже.


  • Tablib (мощный, интуитивно понятный): Tablib - это более мощная, но интуитивно понятная библиотека для работы с табличными данными. С его помощью можно создавать книги Excel с несколькими листами, а также в других форматах, таких как csv, json и yaml. Если вам не нужны форматированные ячейки (например, цвет фона), вы окажете себе услугу, воспользовавшись этой библиотекой, которая в долгосрочной перспективе продвинет вас дальше.


  • csv (легко): файлы на вашем компьютере могут быть как текстовыми, так и двоичными. Текстовые файлы - это просто символы, включая специальные, такие как перевод строки и табуляция, и их можно легко открыть где угодно (например, в блокноте, вашем веб-браузере или продуктах Office). CSV-файл - это текстовый файл, который отформатирован определенным образом: каждая строка представляет собой список значений, разделенных запятыми. Программы на Python могут легко читать и записывать текст, поэтому csv-файл - это самый простой и быстрый способ экспортировать данные из вашей программы на Python в Excel (или другую программу на python).


    Файлы Excel являются двоичными и требуют специальных библиотек, которые знают формат файла, поэтому для их чтения / записи вам понадобится дополнительная библиотека для python или специальная программа, такая как Microsoft Excel, Gnumeric или LibreOffice.



import xlwt

style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'

...

for i,n in enumerate(list1):
sheet1.write(i, 0, n, fmt)
Ответ 4
import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()
python csv