xlutils.copy(xlrd.open_workbook('old.xls', formatting_info=True)).save(''new.xls')报错descriptor 'decode' for 'bytes' objects doesn't apply to a 'NoneType' object
时间: 2023-08-14 13:02:45 浏览: 101
这个错误的原因是你使用了`formatting_info=True`参数,但是你的`old.xls`文件中没有任何格式信息,所以`xlrd.open_workbook`返回了一个空的`workbook`对象,而空对象没有任何解码方法,因此会出现这个错误。
你可以通过以下两种方式解决这个问题:
1. 将`formatting_info=True`参数移除,这样`xlrd.open_workbook`函数将不会读取格式信息,而只会读取单元格的内容和公式。
2. 确保你的`old.xls`文件包含格式信息。你可以通过在Excel中手动设置一些格式,然后保存文件,并使用`formatting_info=True`参数重新读取文件来测试是否成功。如果成功,那么你可以在代码中使用相同的格式来生成新的Excel文件。
相关问题
import xlwt import xlrd import xlutils.copy workbook=xlrd.open_workbook("/Users/gml/Downloads/卫生统计学_1教学记录表的副本.xlsx",formatting_info=True) wb = xlutils.copy.copy(workbook) sheet=wb.get_sheet("课堂实操")#打开第一个sheet col_index = 1 # 第2列的索引是1,因为从0开始计数 for row_index in range(sheet.nrows): cell_value = sheet.cell_value(row_index, col_index) print(cell_value)报错:'Worksheet' object has no attribute 'nrows'
这段代码的作用是导入xlwt、xlrd和xlutils.copy三个模块,然后打开一个名为“卫生统计学_1教学记录表的副本.xlsx”的Excel文件,并将其赋值给变量workbook。接着,使用xlutils.copy模块的copy函数将workbook复制一份,并将其赋值给变量wb。最后,使用wb对象的get_sheet方法获取名为“课堂实操”的工作表,并将其赋值给变量sheet。
解释下面代码: def __init__(self, filename, sheet_name=None, sheet_index=None): self.workbook = xlrd.open_workbook(filename) # 文件对象 if not sheet_name and not sheet_index: self.sheet = self.workbook.sheet_by_index(0) elif sheet_name: self.sheet = self.workbook.sheet_by_name(sheet_name) elif sheet_index: self.sheet = self.workbook.sheet_by_index(sheet_index) self.current_row = 2 # 表示当前行号 self.keys = [] # 初始化keys 对象
这段代码定义了一个类,初始化方法包含三个参数:文件名、工作表名称和工作表索引。首先,使用xlrd库打开文件对象,然后根据给定的sheet_name或sheet_index选择工作表。如果没有给定,则默认选择第一个工作表。然后,初始化当前行号为2(因为通常第一行是标题),并将keys列表初始化为空。这个类的主要作用是读取Excel文件中的数据,并对数据进行处理。
阅读全文