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



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



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



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



enter image description here



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



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



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



EDIT



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 цифр после запятой.

760   9  

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

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

Comments

    Ничего не найдено.