我正在编写一个打开xlsx工作表的脚本,检查第6列中是否存在特定值,如果是,则获取第2列的相应值。 得到一些问题:
import openpyxl
import os
import time
import re
ws = openpyxl.load_workbook(r'C:\Users\Desktop\All_data_sheet.xlsx')
text_file = open(r'C:\Users\Desktop\Output.txt', "w")
topo_sheet =ws.get_sheet_by_name('Rational Web')
#Getting max rows and max columns in each sheet
topo_max_rows = topo_sheet.get_highest_row()
topo_max_columns = topo_sheet.get_highest_column()
for ro in range(2,topo_max_rows+1):
match = re.search(r"acl",topo_sheet.cell(row= ro , column =6).value)
if match:
text_file.write(topo_sheet.cell(row= ro , column =1).value)
text_file.close()
我收到此错误:
Traceback (most recent call last):
File "C:\Users\Desktop\script.py", line 28, in <module>
match = re.findall(r"acl",topo_sheet.cell(row= ro , column =6).value)
File "C:\Python27\lib\re.py", line 181, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
答案 0 :(得分:1)
topo_sheet.cell(row= ro , column =6).value
不是至少一个单元格的字符串。返回的Cell().value
引用类型也可以是int
,float
或datetime
对象,请参阅openpyxl
documentation:
获取或设置单元格中保存的值。
:rtype:
取决于值(字符串,float,int或datetime.datetime
)
始终将值转换为unicode
字符串(因此即使特定单元格不保留文本也可以使用正则表达式)或测试首先生成的值的类型。
总是很容易转换为unicode:
match = re.search(r"acl", unicode(topo_sheet.cell(row=ro , column=6).value))
或首先测试类型(如果您只想在文本的一部分匹配数字或日期时,这绝对是必需的):
cell = topo_sheet.cell(row=ro , column=6)
if cell.data_type == cell.TYPE_STRING:
match = re.search(r"acl", cell.value)