在 excel 中创建新的 sheet 并使用 openpyxl 写入数据
Creating new sheet in excel and writing data with openpyxl
我已经存在 excel 文件,在我的代码开头,我从第一个 sheet.
导入数据
现在我无法将两个变量 (xw, yw)
中的点写入 excel 中的新 sheet 到两个列(A1-A[Q] 和 B1-B[Q])。
xw
和yw
是由浮点数组成的数组(例如:1.223、2.434等)。
Q = len(xw)
wb.create_sheet('Points')
sheet2 = wb.get_sheet_by_name('Points')
for q in range(1,Q):
sheet2["A[q]"]=xw[q]
sheet2["B[q]"]=yw[q]
wb.save('PARAMS.xlsx')
编辑:
我想用零填充第三列 (C1-CQ)。我的代码在下面,但它是从 C2 开始的,而不是 C1。我做了 sheet2[f"C{1}"]=0
但它看起来很糟糕。解决方法是什么?
Q = len(xw)
zw= np.zeros(Q)
sheet2 = wb.create_sheet('Points')
sheet2[f"A{1}"]=0
sheet2[f"B{1}"]=T_r
sheet2[f"C{1}"]=0
for i, row in enumerate(sheet2.iter_rows(min_row=2, max_col=3, max_row=Q+1)):
row[0].value = xw[i]
row[1].value = yw[i]
row[2].value = zw[i]
wb.save('PARAMS.xlsx')
您正试图按字面意思访问单元格 "A[q]"
,这当然不存在。将其更改为 f"A{q}"
(当然与 B
相同)。
此外,openpyxl
使用基于 1 的索引,因此这意味着您将跳过列表中的第一个元素。因此你应该这样做:
for q in range(Q):
sheet2[f"A{q+1}"] = xw[q]
sheet2[f"B{q+1}"] = yw[q]
或者,您可以使用 openpyxl
的 API 访问使用 iter_rows
and enumerate
:
的单元格
for i, row in enumerate(sheet2.iter_rows(min_row=1, max_col=2, max_row=Q)):
row[0].value = xw[i]
row[1].value = yw[i]
注意 create_sheet
也 returns 创建了 sheet 所以你可以简单地做:
sheet2 = wb.create_sheet('Points')
尽可能尝试并避免自己的柜台。 openpyxl 对行和列使用基于 1 的索引,因此将其与 Python 的标准基于 0 的索引混合使用可能会造成混淆。您通常可以通过直接遍历列表和数组等可迭代对象来避免这种情况。
for idx, a, b in enumerate(zip(xw, yw), 1):
ws.cell(row=idx, column=1, value=a)
ws.cell(row_idx, column=2, value=b)
我已经存在 excel 文件,在我的代码开头,我从第一个 sheet.
导入数据现在我无法将两个变量 (xw, yw)
中的点写入 excel 中的新 sheet 到两个列(A1-A[Q] 和 B1-B[Q])。
xw
和yw
是由浮点数组成的数组(例如:1.223、2.434等)。
Q = len(xw)
wb.create_sheet('Points')
sheet2 = wb.get_sheet_by_name('Points')
for q in range(1,Q):
sheet2["A[q]"]=xw[q]
sheet2["B[q]"]=yw[q]
wb.save('PARAMS.xlsx')
编辑:
我想用零填充第三列 (C1-CQ)。我的代码在下面,但它是从 C2 开始的,而不是 C1。我做了 sheet2[f"C{1}"]=0
但它看起来很糟糕。解决方法是什么?
Q = len(xw)
zw= np.zeros(Q)
sheet2 = wb.create_sheet('Points')
sheet2[f"A{1}"]=0
sheet2[f"B{1}"]=T_r
sheet2[f"C{1}"]=0
for i, row in enumerate(sheet2.iter_rows(min_row=2, max_col=3, max_row=Q+1)):
row[0].value = xw[i]
row[1].value = yw[i]
row[2].value = zw[i]
wb.save('PARAMS.xlsx')
您正试图按字面意思访问单元格 "A[q]"
,这当然不存在。将其更改为 f"A{q}"
(当然与 B
相同)。
此外,openpyxl
使用基于 1 的索引,因此这意味着您将跳过列表中的第一个元素。因此你应该这样做:
for q in range(Q):
sheet2[f"A{q+1}"] = xw[q]
sheet2[f"B{q+1}"] = yw[q]
或者,您可以使用 openpyxl
的 API 访问使用 iter_rows
and enumerate
:
for i, row in enumerate(sheet2.iter_rows(min_row=1, max_col=2, max_row=Q)):
row[0].value = xw[i]
row[1].value = yw[i]
注意 create_sheet
也 returns 创建了 sheet 所以你可以简单地做:
sheet2 = wb.create_sheet('Points')
尽可能尝试并避免自己的柜台。 openpyxl 对行和列使用基于 1 的索引,因此将其与 Python 的标准基于 0 的索引混合使用可能会造成混淆。您通常可以通过直接遍历列表和数组等可迭代对象来避免这种情况。
for idx, a, b in enumerate(zip(xw, yw), 1):
ws.cell(row=idx, column=1, value=a)
ws.cell(row_idx, column=2, value=b)