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

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

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

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

Layout sample

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

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

PS Я использую 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), как научные или числовые?

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

Ответ 1

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

Ответ 2

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

enter image description here

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

Ответ 3

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

    Чтобы форматировать ячейки с помощью xlwt, определите 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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

В бесплатной книге Automate the Boring Stuff with Python есть глава об openpyxl с более подробной информацией, или вы можете проверить сайт Read the Docs. Вам не нужно будет устанавливать Office или Excel, чтобы использовать openpyxl.

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

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

Ответ 8

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

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

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

import openpyxl

wbkName = 'New.xlsx'        #The file should be created before running the code.
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close

Ответ 9

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

print variable_example[:13]

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

Ответ 10

Вы можете попробовать hfexcel Human Friendly объектно-ориентированную библиотеку Python на основе XlsxWriter:

from hfexcel import HFExcel

hf_workbook = HFExcel.hf_workbook('example.xlsx', set_default_styles=False)

hf_workbook.add_style(
    "headline", 
    {
       "bold": 1,
        "font_size": 14,
        "font": "Arial",
        "align": "center"
    }
)

sheet1 = hf_workbook.add_sheet("sheet1", name="Example Sheet 1")

column1, _ = sheet1.add_column('headline', name='Column 1', width=2)
column1.add_row(data='Column 1 Row 1')
column1.add_row(data='Column 1 Row 2')

column2, _ = sheet1.add_column(name='Column 2')
column2.add_row(data='Column 2 Row 1')
column2.add_row(data='Column 2 Row 2')


column3, _ = sheet1.add_column(name='Column 3')
column3.add_row(data='Column 3 Row 1')
column3.add_row(data='Column 3 Row 2')

# In order to get a row with coordinates:
# sheet[column_index][row_index] => row
print(sheet1[1][1].data)
assert(sheet1[1][1].data == 'Column 2 Row 2')

hf_workbook.save()