Using OpenPyxl_ValueError: Row or column values must be at least 1

import openpyxl as oxl
wb = oxl.Workbook()
ws = wb.create_sheet(index=0, title='oxl_sheet')
print(data)

for r in range(data.shape[0]):
    for c in range(data.shape[1]):
        ws.cell(row=r, column=c).value =data[r,c]

wb.save(path + 'oxl_book.xlsx')

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-139-e9d8583c2e2d> in <module>
      1 for r in range(data.shape[0]):
      2     for c in range(data.shape[1]):
----> 3         ws.cell(row=r, column=c).value =data[r,c]

d:\Anaconda3\lib\site-packages\openpyxl\worksheet\worksheet.py in cell(self, coordinate, row, column, value)
    305 
    306         if row < 1 or column < 1:
--> 307             raise ValueError("Row or column values must be at least 1")
    308 
    309         cell = self._get_cell(row, column)

ValueError: Row or column values must be at least 1

solution:

for r in range(data.shape[0]):
    for c in range(data.shape[1]):
        ws.cell(row=r+1, column=c+1).value =data[r,c]

wb.save(path + 'oxl_book.xlsx')

### openpyxl 中 `ValueError: Row or column values must be at least 1` 错误的解决方案 在使用 `openpyxl` 操作 Excel 文件时,开发者可能会遇到如下错误: ```python ValueError: Row or column values must be at least 1 ``` 该错误的原因是 `openpyxl` 的行列索引从 **1** 开始,而不是从 **0** 开始。因此,如果尝试访问 `row=0` 或 `column=0`,会抛出此异常[^1]。 #### 常见错误场景 1. **直接使用零索引访问单元格**: 如果使用类似 `ws.cell(row=0, column=0)` 的方式访问单元格,会直接触发该错误[^1]。 2. **在循环中未调整索引**: 当使用 `for` 循环遍历数据时,若未对索引进行偏移(例如 `row = i + 1`),则会访问到 `row=0` 或 `column=0` 的无效值[^3]。 #### 解决方案 1. **确保行列索引从 1 开始**: 在访问单元格时,确保 `row` 和 `column` 的值不小于 1。例如: ```python ws.cell(row=1, column=1).value = "Header" ``` 2. **在循环中调整索引偏移**: 当遍历列表或数组时,应将循环变量加 1 来匹配 `openpyxl` 的索引规则。例如: ```python tableTitle = ['userName', 'Phone', 'age', 'Remark'] for col in range(len(tableTitle)): c = col + 1 # 列索引从 1 开始 ws.cell(row=1, column=c).value = tableTitle[col] ``` 3. **检查数据遍历逻辑**: 如果从 NumPy 数组或其他数据结构中读取数据并写入 Excel,应确保行和列的索引正确。例如: ```python for r in range(data.shape[0]): for c in range(data.shape[1]): ws.cell(row=r + 1, column=c + 1).value = data[r, c] ``` 这样可以避免直接使用 `r=0` 或 `c=0` 时触发异常[^3]。 4. **异常处理机制**: 在开发过程中,可以通过捕获异常来调试行列值是否正确: ```python try: ws.cell(row=row, column=col).value = value except ValueError as e: print(f"Invalid row or column value: row={row}, column={col}") raise e ``` #### 示例代码:正确写入表头 ```python from openpyxl import Workbook wb = Workbook() ws = wb.active tableTitle = ['userName', 'Phone', 'age', 'Remark'] for col in range(len(tableTitle)): c = col + 1 ws.cell(row=1, column=c).value = tableTitle[col] wb.save("example.xlsx") ``` #### 小结 - `openpyxl` 的行列索引从 **1** 开始,不能使用 **0**。 - 在循环中应使用 `+1` 偏移确保行列值合法。 - 合理使用异常捕获机制有助于排查错误。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LIQING LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值