Python2.7.11: TypeError: expected string or buffer

Python2.7.11: TypeError: expected string or buffer

我正在编写一个打开 xlsx sheet 的脚本,检查第 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

topo_sheet.cell(row= ro , column =6).value 不是 至少一个 单元格的字符串。 Cell().value 引用的返回类型也可以是 intfloatdatetime 对象,请参阅 openpyxl documentation:

Get or set the value held in the cell. :rtype: depends on the value (string, float, int or 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)