如何使用openpyxl获取单元格的实际值?
How to get the actual value of a cell with openpyxl?
我是 Python 的初学者,我需要帮助。我正在使用 Python 2.7,我正在尝试检索 excel 文件的单元格值并将其存储到 csv 文件中。我的代码如下:
import os, openpyxl, csv
aggname = "deu"
wb_source = openpyxl.load_workbook(filename, data_only = True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
data = calib_sheet['B78:C88']
data = list(data)
print(data)
for i in range(len(data)):
dest_file.writerow(data[i])
app_file.close()
在我的 csv 文件中,我得到了这个,而不是实际值(例如在我的例子中:SFCG,99103)。
<Cell Calibration.B78>,<Cell Calibration.C78>
<Cell Calibration.B79>,<Cell Calibration.C79>
<Cell Calibration.B80>,<Cell Calibration.C80>
<Cell Calibration.B81>,<Cell Calibration.C81>
<Cell Calibration.B82>,<Cell Calibration.C82>
<Cell Calibration.B83>,<Cell Calibration.C83>
<Cell Calibration.B84>,<Cell Calibration.C84>
<Cell Calibration.B85>,<Cell Calibration.C85>
<Cell Calibration.B86>,<Cell Calibration.C86>
<Cell Calibration.B87>,<Cell Calibration.C87>
<Cell Calibration.B88>,<Cell Calibration.C88>
我试图在打开 excel 文件时设置 data_only = True,正如类似问题的答案中所建议的那样,但这并没有解决我的问题。
----------------编辑------------
考虑到我得到的前两个答案(谢谢!),我尝试了几种方法:
for i in range(len(data)):
dest_file.writerows(data[i].value)
我收到此错误消息:
for i in range(len(data)):
dest_file.writerows(data[i].values)
Traceback (most recent call last):
File "<ipython-input-78-27828c989b39>", line 2, in <module>
dest_file.writerows(data[i].values)
AttributeError: 'tuple' object has no attribute 'values'
然后我尝试了这个:
for i in range(len(data)):
for j in range(2):
dest_file.writerow(data[i][j].value)
然后我收到以下错误消息:
for i in range(len(data)):
for j in range(2):
dest_file.writerow(data[i][j].value)
Traceback (most recent call last):
File "<ipython-input-80-c571abd7c3ec>", line 3, in <module>
dest_file.writerow(data[i][j].value)
Error: sequence expected
那么,我尝试了这个:
import os, openpyxl, csv
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
list(calib_sheet.iter_rows('B78:C88'))
for row in calib_sheet.iter_rows('B78:C88'):
for cell in row:
dest_file.writerow(cell.value)
只得到这个错误信息:
Traceback (most recent call last):
File "<ipython-input-81-5bed62b45985>", line 12, in <module>
dest_file.writerow(cell.value)
Error: sequence expected
对于 "sequence expected" 错误,我支持 ose python 需要一个列表而不是单个单元格,所以我这样做了:
导入os、openpyxl、csv
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
list(calib_sheet.iter_rows('B78:C88'))
for row in calib_sheet.iter_rows('B78:C88'):
dest_file.writerow(row)
没有错误消息,但我只得到 csv 文件中单元格的引用并将其更改为 dest_file.writerow(row.value) 使我回到元组错误。
我显然还需要你的帮助!
您忘记获取单元格的值了!参见 the documentation
尝试使用 data.values 而不是 data打印时。
希望对您有所帮助!!
**
***An example :
import openpyxl
import re
import os
wc=openpyxl.load_workbook('<path of the file>') wcsheet=wc.get_sheet_by_name('test')
store=[]
for data in wcsheet.columns[0]:
store=data
print(store.value)***
=======================
============================================= ====
**
真人佛像尺寸
我找到了一种使用 numpy 解决它的方法,它允许我将我的值存储为列表列表而不是元组列表。
import os, openpyxl, csv
import numpy as np
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
store = list(calib_sheet.iter_rows('B78:C88'))
print store
truc = np.array(store)
print truc
for i in range(11):
for j in range(1):
dest_file.writerow([truc[i][j].value, truc[i][j+1].value])
app_file.close()
实际上我在 "writerow()" 中有一个序列作为我的参数,并且对于列表对象,我还可以使用双索引和值方法来检索我的单元格的值。
我是 Python 的初学者,我需要帮助。我正在使用 Python 2.7,我正在尝试检索 excel 文件的单元格值并将其存储到 csv 文件中。我的代码如下:
import os, openpyxl, csv
aggname = "deu"
wb_source = openpyxl.load_workbook(filename, data_only = True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
data = calib_sheet['B78:C88']
data = list(data)
print(data)
for i in range(len(data)):
dest_file.writerow(data[i])
app_file.close()
在我的 csv 文件中,我得到了这个,而不是实际值(例如在我的例子中:SFCG,99103)。
<Cell Calibration.B78>,<Cell Calibration.C78>
<Cell Calibration.B79>,<Cell Calibration.C79>
<Cell Calibration.B80>,<Cell Calibration.C80>
<Cell Calibration.B81>,<Cell Calibration.C81>
<Cell Calibration.B82>,<Cell Calibration.C82>
<Cell Calibration.B83>,<Cell Calibration.C83>
<Cell Calibration.B84>,<Cell Calibration.C84>
<Cell Calibration.B85>,<Cell Calibration.C85>
<Cell Calibration.B86>,<Cell Calibration.C86>
<Cell Calibration.B87>,<Cell Calibration.C87>
<Cell Calibration.B88>,<Cell Calibration.C88>
我试图在打开 excel 文件时设置 data_only = True,正如类似问题的答案中所建议的那样,但这并没有解决我的问题。
----------------编辑------------
考虑到我得到的前两个答案(谢谢!),我尝试了几种方法:
for i in range(len(data)):
dest_file.writerows(data[i].value)
我收到此错误消息:
for i in range(len(data)):
dest_file.writerows(data[i].values)
Traceback (most recent call last):
File "<ipython-input-78-27828c989b39>", line 2, in <module>
dest_file.writerows(data[i].values)
AttributeError: 'tuple' object has no attribute 'values'
然后我尝试了这个:
for i in range(len(data)):
for j in range(2):
dest_file.writerow(data[i][j].value)
然后我收到以下错误消息:
for i in range(len(data)):
for j in range(2):
dest_file.writerow(data[i][j].value)
Traceback (most recent call last):
File "<ipython-input-80-c571abd7c3ec>", line 3, in <module>
dest_file.writerow(data[i][j].value)
Error: sequence expected
那么,我尝试了这个:
import os, openpyxl, csv
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
list(calib_sheet.iter_rows('B78:C88'))
for row in calib_sheet.iter_rows('B78:C88'):
for cell in row:
dest_file.writerow(cell.value)
只得到这个错误信息:
Traceback (most recent call last):
File "<ipython-input-81-5bed62b45985>", line 12, in <module>
dest_file.writerow(cell.value)
Error: sequence expected
对于 "sequence expected" 错误,我支持 ose python 需要一个列表而不是单个单元格,所以我这样做了:
导入os、openpyxl、csv
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
list(calib_sheet.iter_rows('B78:C88'))
for row in calib_sheet.iter_rows('B78:C88'):
dest_file.writerow(row)
没有错误消息,但我只得到 csv 文件中单元格的引用并将其更改为 dest_file.writerow(row.value) 使我回到元组错误。
我显然还需要你的帮助!
您忘记获取单元格的值了!参见 the documentation
尝试使用 data.values 而不是 data打印时。
希望对您有所帮助!!
**
***An example :
import openpyxl
import re
import os
wc=openpyxl.load_workbook('<path of the file>') wcsheet=wc.get_sheet_by_name('test')
store=[]
for data in wcsheet.columns[0]:
store=data
print(store.value)***
=======================
============================================= ====
**
真人佛像尺寸
我找到了一种使用 numpy 解决它的方法,它允许我将我的值存储为列表列表而不是元组列表。
import os, openpyxl, csv
import numpy as np
wb_source = openpyxl.load_workbook(filename, data_only=True)
app_file = open(filename,'a')
dest_file = csv.writer(app_file, delimiter=',', lineterminator='\n')
calib_sheet = wb_source.get_sheet_by_name('Calibration')
store = list(calib_sheet.iter_rows('B78:C88'))
print store
truc = np.array(store)
print truc
for i in range(11):
for j in range(1):
dest_file.writerow([truc[i][j].value, truc[i][j+1].value])
app_file.close()
实际上我在 "writerow()" 中有一个序列作为我的参数,并且对于列表对象,我还可以使用双索引和值方法来检索我的单元格的值。