如何使用 Python 写入 Excel 电子表格?
- 2024-12-16 08:35:00
- admin 原创
- 168
问题描述:
我需要将程序中的一些数据写入 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
值)格式化为科学计数法或数字?
我不想截断这些值。程序中使用的实际值小数点后大约有 10 位数字。
解决方案 1:
使用pandas中的DataFrame.to_excel。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 格式化单元格,XFStyle
请在写入工作表时定义并包含样式。这是一个包含多种数字格式的示例。请参阅下面的示例代码。
Tablib(功能强大、直观):Tablib是一个功能更强大但更直观的库,用于处理表格数据。它可以编写包含多个工作表的 Excel 工作簿以及其他格式,例如 csv、json 和 yaml。如果您不需要格式化的单元格(如背景颜色),那么使用此库将对您大有裨益,从长远来看,它将让您走得更远。
csv(简单):计算机上的文件是文本或二进制文件。文本文件只是字符,包括特殊字符,如换行符和制表符,并且可以在任何地方轻松打开(例如记事本、Web 浏览器或 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()
解决方案 5:
我调查了一些 Python 的 Excel 模块,发现openpyxl是最好的。
免费书籍《用 Python 自动化无聊的事情》有一章详细介绍了 openpyxl,或者您可以查看阅读文档网站。您无需安装 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')
解决方案 6:
CSV 代表逗号分隔值。CSV 就像一个文本文件,只需添加.CSV 扩展名即可创建
例如写下这样的代码:
f = open('example.csv','w')
f.write("display,variable x")
f.close()
您可以使用 Excel 打开此文件。
解决方案 7:
该XlsxWriter
库非常适合创建.xlsx
文件。以下代码片段.xlsx
从字典列表生成一个文件,同时说明顺序和显示的名称:
from xlsxwriter import Workbook
def create_xlsx_file(file_path: str, headers: dict, items: list):
with Workbook(file_path) as workbook:
worksheet = workbook.add_worksheet()
worksheet.write_row(row=0, col=0, data=headers.values())
header_keys = list(headers.keys())
for index, item in enumerate(items):
row = map(lambda field_id: item.get(field_id, ''), header_keys)
worksheet.write_row(row=index + 1, col=0, data=row)
headers = {
'id': 'User Id',
'name': 'Full Name',
'rating': 'Rating',
}
items = [
{'id': 1, 'name': "Ilir Meta", 'rating': 0.06},
{'id': 2, 'name': "Abdelmadjid Tebboune", 'rating': 4.0},
{'id': 3, 'name': "Alexander Lukashenko", 'rating': 3.1},
{'id': 4, 'name': "Miguel Díaz-Canel", 'rating': 0.32}
]
create_xlsx_file("my-xlsx-file.xlsx", headers, items)