Python 改写excel内容
我要改写F2~F10的数据,为何写到了F2~N2?import xlwings as xw
app = xw.App(visible =True, add_book = False)
workbook = app.books.add()
sheet = workbook.sheets.add ("1月份考核表")
str1 = [
["序号","姓名","性别","年龄","职业","业绩"],
,
,
,
,
,
,
,
,
]
rag = sheet.range ("A1:F10")
rag.value = str1
rag3 = sheet.range("F2:F10")
rag3.value =
workbook.save("业绩考核表.xls")
workbook.close()
isdkz 发表于 2023-5-2 12:22
给我个最佳支持一下呗
{:10_300:} horacepython 发表于 2023-5-2 12:06
谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那 ...
给我个最佳支持一下呗{:5_92:} 这可能是由于在 `rag3` 的赋值语句中,提供了一个带有9个条目的单行列表。当指定范围时,它实际上是试图将其放置在F2到N2上,从而导致了数据溢出。
要解决这个问题,请确保 `rag3.value` 中提供的列表与 `rag3` 相应的行/列数量匹配,即只包含`F2`到`F10`的9个条目,并且可以通过以下方式修改代码:
rag3 = sheet.range("F2:F10")
new_values =
rag3.value = [ for x in new_values] # 将传递的列表转换为二维列表以匹配range,每个元素都由单个值组
这将创建带有 9 行和1列的二维列表,其中每个值都在对应的单元格中存储。现在修改后的代码应该可以完美运行,并将所需的数据写入只覆盖 `F2` 到 `F10` 单元格。 horacepython 发表于 2023-5-2 12:06
谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那 ...
加上中括号的作用是将整数包装成一个列表。因为xlwings中的单元格值必须是列表或元组形式,所以需要将单个整数转换成一个列表。这样才能与单元格范围对应的多个单元格的 values 相对应。
如果直接用整数赋值,会得到 TypeError 错误。因此需要将整数用中括号包装成一个包含单个元素的列表。
如果你确信只需要赋值一个整数,并且确定它只需要赋给一个单元格,可以不用中括号:
rag3.value = 89
这行代码将89赋值给单元格 F2。 isdkz 发表于 2023-5-2 11:53
需要修改的是F列的数据,可以将 F2:F10 的单元格范围来指定。下面是修改后的代码:
谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那个整型数据列表赋值可行吗? 需要修改的是F列的数据,可以将 F2:F10 的单元格范围来指定。下面是修改后的代码:
import xlwings as xw
app = xw.App(visible=True, add_book=False)
workbook = app.books.add()
sheet = workbook.sheets.add("1月份考核表")
str1 = [
["序号", "姓名", "性别", "年龄", "职业", "业绩"],
,
,
,
,
,
,
,
,
]
rag = sheet.range("A1:F10")
rag.value = str1
rag3 = sheet.range("F2:F10")
rag3.value = [, , , , , , , , ]
workbook.save("业绩考核表.xls")
workbook.close() 在您的代码中,指定了范围为F2:F10,因此会在这个范围内填充数据。如果您想要改写F2~F10的数据而不包括N2,可以将指定范围改为F2:N2,或者将赋值语句改为只包含F列的范围:
rag3 = sheet.range("F2:F10")
rag3.value =
改为:
rag3 = sheet.range("F2:F10")
rag3.value = [, , , , , , , , ]
这样只会修改F2到F10的数据,而不会涉及到N2。
页:
[1]