for row in ws.iter_rows(min_row=2, max_row=10): print(row) #3.准备sql语句 sql = "INSERT INTO user_info VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"输出的是execl的位置,为什么?
时间: 2025-05-23 11:12:54 浏览: 27
### 原因分析
当使用 `ws.iter_rows()` 方法时,默认情况下它会返回每一行的单元格对象列表,而不会直接返回单元格的实际值。这是因为默认参数 `values_only` 被设置为 `False`[^3]。因此,在这种模式下,输出的内容实际上是单元格对象的内存地址或其位置信息。
如果希望直接获取单元格内的实际数据,则需要将 `values_only` 参数设置为 `True`。这样,`ws.iter_rows()` 将不再返回单元格对象本身,而是返回这些单元格所存储的具体值[^4]。
```python
from openpyxl import load_workbook
wb = load_workbook('your_file.xlsx')
ws = wb['Sheet1']
# 默认行为:返回单元格对象
for row in ws.iter_rows():
print(row)
# 修改行为:返回单元格值
for row in ws.iter_rows(values_only=True):
print(row)
```
### 解决方法
为了获得实际的数据而不是单元格对象的位置信息,可以通过以下两种方式实现:
#### 方式一:启用 `values_only` 参数
通过将 `values_only` 设置为 `True`,可以直接让 `iter_rows()` 返回单元格中的具体值,而不返回单元格对象[^4]。
```python
from openpyxl import load_workbook
wb = load_workbook('your_file.xlsx')
ws = wb['Sheet1']
# 使用 values_only 参数获取单元格值
for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3, values_only=True):
print(row)
```
#### 方式二:手动提取值
如果不修改 `values_only` 参数,也可以通过对每个单元格调用 `.value` 属性来获取具体的值[^3]。
```python
from openpyxl import load_workbook
wb = load_workbook('your_file.xlsx')
ws = wb['Sheet1']
# 手动提取单元格值
for row in ws.iter_rows(min_row=1, max_row=5, min_col=1, max_col=3):
row_values = [cell.value for cell in row]
print(row_values)
```
这两种方法都可以有效解决问题,推荐优先考虑第一种方式,因为它更加简洁高效。
---
### 总结
`ws.iter_rows()` 默认返回的是单元格对象而非它们的值,这是由于未开启 `values_only` 参数所致。要解决此问题,可以选择启用该参数或将单元格对象转换为其对应的值属性 `.value` 来完成目标。
---
阅读全文
相关推荐


















