horacepython 发表于 2023-5-2 11:51:44

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

sfqxx 发表于 2023-5-2 12:31:40

isdkz 发表于 2023-5-2 12:22
给我个最佳支持一下呗

{:10_300:}

isdkz 发表于 2023-5-2 12:22:00

horacepython 发表于 2023-5-2 12:06
谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那 ...

给我个最佳支持一下呗{:5_92:}

sfqxx 发表于 2023-5-2 12:18:53

这可能是由于在 `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` 单元格。

isdkz 发表于 2023-5-2 12:07:04

horacepython 发表于 2023-5-2 12:06
谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那 ...

加上中括号的作用是将整数包装成一个列表。因为xlwings中的单元格值必须是列表或元组形式,所以需要将单个整数转换成一个列表。这样才能与单元格范围对应的多个单元格的 values 相对应。

如果直接用整数赋值,会得到 TypeError 错误。因此需要将整数用中括号包装成一个包含单个元素的列表。

如果你确信只需要赋值一个整数,并且确定它只需要赋给一个单元格,可以不用中括号:

rag3.value = 89


这行代码将89赋值给单元格 F2。

horacepython 发表于 2023-5-2 12:06:13

isdkz 发表于 2023-5-2 11:53
需要修改的是F列的数据,可以将 F2:F10 的单元格范围来指定。下面是修改后的代码:

谢谢,问题已解决。
还想问下,为什么每个数据都要加中括号,这是什么原理?
或者不加中括号,直接用那个整型数据列表赋值可行吗?

isdkz 发表于 2023-5-2 11:53:43

需要修改的是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()

陶远航 发表于 2023-5-2 11:53:26

在您的代码中,指定了范围为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]
查看完整版本: Python 改写excel内容