Python-запись в электронную таблицу Excel

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

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

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

enter image description here

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

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

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

редактировать

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), как научные или числовые? Я не хочу усекать значения. Фактические значения, используемые в программе, будут иметь около 10 цифр после десятичного знака.

9 ответов


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


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

сначала вам нужно преобразовать данные в фрейм данных, а затем сохранить их в файл 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, который выходит выглядит так:

enter image description here

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


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

    формат ячеек с xlwt, определить XFStyle и включить стиль при записи на лист. вот пример со многими форматами номером. См. пример кода ниже.

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

  • CSV-файла (easy): файлы на вашем компьютере либо текст или бинарные. Текстовые файлы - это просто символы, в том числе специальные, такие как новые строки и вкладки, и их можно легко открыть в любом месте (например, блокнот, веб-браузер или офисные продукты). Файл 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)

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()

CSV означает значения, разделенные запятыми. CSV-файл как текстовый файл и может быть создан просто путем добавления .Расширением CSV

например, напишите этот код:

f = open('example.csv','w')
f.write("display,variable x")
f.close()

вы можете открыть этот файл с помощью Excel.


попробуйте взглянуть на следующие библиотеки:

xlwings - для получения данных в электронную таблицу и из нее с Python, а также для управления книгами и диаграммами

ExcelPython - надстройка Excel для написания пользовательских функций (UDFs) и макросов в Python вместо VBA


я обследовал несколько модулей Excel для Python и нашел openpyxl быть лучшим.

Бесплатная книга автоматизировать скучные вещи с Python имеет главу на openpyxl С более подробной информации или вы можете проверить читать документы сайт. Для использования openpyxl не потребуется устанавливать Office или Excel.

ваша программа будет выглядеть примерно так:

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]

for i in range(len(stimulusTimes)):
    sheet['A' + str(i + 6)].value = stimulusTimes[i]
    sheet['B' + str(i + 6)].value = reactionTimes[i]

wb.save('example.xlsx')

OpenPyxl довольно хорошая библиотека, построенная для чтения / записи файлов Excel 2010 xlsx / xlsm:

https://openpyxl.readthedocs.io/en/stable

другого ответа, ссылаясь на него, использует функцию deperciated (get_sheet_by_name). Вот как это делается без него:

import openpyxl

wbkName = 'New.xlsx'
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close

самый простой способ импортировать точные числа-добавить десятичное число после чисел в вашем l1 и l2. Python интерпретирует эту десятичную точку как инструкции от вас, чтобы включить точное число. Если вам нужно ограничить его некоторым десятичным знаком, вы должны иметь возможность создать команду печати, которая ограничивает вывод, что-то простое, как:

print variable_example[:13]

ограничил бы его десятым десятичным знаком, предполагая, что ваши данные имеют два целых числа слева от десятичного знака.