| 
                            
                                  概述
xlrd是一个用于读取Excel文件的Python库,它可以帮助用户快速提取数据并进行分析。它适合用于读取旧版Excel 文件(.xls 格式)中的数据,对于新格式的Excel文件,推荐使用其他库如openpyxl或pandas。 文档:https://xlrd.readthedocs.io/en/latest/ 安装首先,需要确保已安装xlrd 
	
		
			| 1 | pip install xlrd==1.2.0 |  注意:xlrd新版本只支持xls格式,因此这里指定安装1.2.0版本,可以支持xlsx格式。 读取Excel文件使用 xlrd 打开一个 Excel 文件 
	
		
			| 1 2 3 4 | import xlrd   # 打开 Excel 文件 workbook = xlrd.open_workbook('Test.xlsx') |  sheet操作获取sheet工作表可以通过索引或名称获取工作表 
	
		
			| 1 2 3 4 5 | # 1.通过索引查找 sheet = workbook.sheet_by_index(0)   # 2.通过sheet名查找: sheet = workbook.sheet_by_name('Sheet1') |  获取sheet的行、列数获取工作表的行数、列数 
	
		
			| 1 2 3 4 | # 获取行数和列数 num_rows = sheet.nrows num_cols = sheet.ncols print(f"行数: {num_rows}, 列数: {num_cols}") |  遍历操作sheet
	
		
			| 1 2 3 4 5 6 7 8 | # 获取sheet数量 print(workbook.nsheets) # 遍历Excel工作簿中的所有工作表 for i in range(0, workbook.nsheets):     # 根据索引获取当前工作表     sheet = workbook.sheet_by_index(i)     # 打印当前工作表左上角单元格的值 1行1列的值     print(sheet.cell_value(0, 0)) |  
	
		
			| 1 2 3 4 5 6 7 8 | # 获取所有sheet名字 print(workbook.sheet_names()) # 遍历工作簿中的所有工作表 for i in workbook.sheet_names():     # 根据工作表名称获取工作表对象     sheet = workbook.sheet_by_name(i)     # 打印该工作表第一行第一列的单元格值     print(sheet.cell_value(0, 0)) |  单元格操作读取单元格内容可以通过指定行和列的索引来读取单元格的值 
	
		
			| 1 2 3 4 5 6 7 8 | # 读取特定单元格(例如:第一行第一列) print(sheet.cell_value(0, 0)) # 获取第二行第三列的值 print(sheet.cell_value(1, 2))   # 获取第二行第三列的单元格对象 print(sheet.cell(1, 2).value) print(sheet.row(1)[2].value) |  读取单元格类型可以获取单元格的类型 
	
		
			| 1 2 3 4 | # 获取第一行第一列单元格的类型 cell_type = sheet.cell_type(0, 0) # 0: NUMERIC, 1: STRING, 2: BLANK, 3: BOOLEAN, 4: ERROR print(f"单元格类型: {cell_type}") |  遍历所有单元格遍历整个工作表的所有单元格并打印内容 
	
		
			| 1 2 3 4 5 6 7 | # 遍历Excel表格的每一行和每一列,以获取每个单元格的值 for row in range(sheet.nrows):  # sheet.nrows返回表格的总行数     for col in range(sheet.ncols):  # sheet.ncols返回表格的总列数         # 获取当前位置(row, col)的单元格值         cell_value = sheet.cell_value(row, col)         # 打印单元格的位置和值         print(f"({row}, {col}) 的值: {cell_value}") |  读取特定范围的单元格如果只想读取特定范围的单元格,可以使用以下方法 
	
		
			| 1 2 3 4 5 | # 读取第1行到第3行,第1列到第2列的单元格 for row in range(1, 4):     for col in range(1, 3):         cell_value = sheet.cell_value(row, col)         print(f"({row}, {col}) 的值: {cell_value}") |  读取不同数据类型的单元格xlrd 支持多种数据类型,包括数字、字符串、布尔值和错误。以下是如何读取不同类型单元格的示例: 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 读取特定单元格并判断类型 cell_value = sheet.cell_value(1, 1)  # 读取第二行第二列 cell_type = sheet.cell_type(1, 1)   if cell_type == 0:  # NUMERIC     print(f"数字: {cell_value}") elif cell_type == 1:  # STRING     print(f"字符串: {cell_value}") elif cell_type == 2:  # BLANK     print("空单元格") elif cell_type == 3:  # BOOLEAN     print(f"布尔值: {cell_value}") elif cell_type == 4:  # ERROR     print("错误单元格") |  行、列操作获取整行或整列数据可以获取整行或整列的数据 
	
		
			| 1 2 3 4 5 6 7 | # 获取整行 row_values = sheet.row_values(0)  # 第一行 print(f"第一行的值: {row_values}")   # 获取整列 col_values = sheet.col_values(0)  # 第一列 print(f"第一列的值: {col_values}") |  读取所有行的字典格式使用以下方法以字典的形式读取每一行 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 假设第一行为表头 header = sheet.row_values(0)   # 初始化一个列表来存储所有行的数据 data = []   # 使用循环遍历除表头外的所有行 for row in range(1, sheet.nrows):     # 初始化一个字典来存储当前行的数据     row_data = {}     # 使用循环遍历所有列     for col in range(sheet.ncols):         # 将单元格的值添加到当前行的字典中,使用表头作为键         row_data[header[col]] = sheet.cell_value(row, col)     # 将当前行的字典添加到数据列表中     data.append(row_data)   # 打印最终的数据列表 print(data) |  读取特定列的非空值
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # 初始化列索引值为0,表示第一列 col_index = 0 # 创建一个空列表,用于存储第一列中的非空值 non_empty_values = []   # 遍历Excel表格的每一行,以获取第一列的值 for row in range(sheet.nrows):     # 获取指定行列的单元格值     value = sheet.cell_value(row, col_index)     # 如果值不为空字符串,则将其添加到列表中     if value != '':         non_empty_values.append(value) # 打印第一列中的非空值 print(f"第一列的非空值: {non_empty_values}") |  其他操作处理日期类型如果单元格包含日期,xlrd会将其存储为浮点数。可以使用xlrd.xldate.xldate_as_tuple() 方法将其转换为日期元组: 
	
		
			| 1 2 3 4 5 6 | import xlrd.xldate   # 假设第三行第一列是日期 date_value = sheet.cell_value(2, 0) date_tuple = xlrd.xldate.xldate_as_tuple(date_value, workbook.datemode) print(f"日期: {date_tuple}")  # 输出格式为 (年, 月, 日, 时, 分, 秒) |  处理多种日期格式有时Excel 中的日期格式可能会不同。可以创建一个函数来处理多种日期格式 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | def parse_date(value):     """     解析日期值。       根据值的类型将表示日期的浮点数转换为可读的日期元组。       参数:         value (float): 一个表示日期的浮点数,通常从电子表格软件中读取。       返回:         tuple 或 None: 如果输入值是浮点数,则返回一个包含年、月、日、时、分、秒的元组;                        否则返回 None。     """     if isinstance(value, float):  # 日期通常是浮点数         return xlrd.xldate.xldate_as_tuple(value, workbook.datemode)     return None   # 遍历表格的每一行 for row in range(sheet.nrows):     # 假设第一列是日期,获取该行的日期值     date_value = sheet.cell_value(row, 0)     # 尝试解析日期值     parsed_date = parse_date(date_value)     # 如果解析成功,则打印该行的日期信息     if parsed_date:         print(f"行 {row} 的日期: {parsed_date}") |  处理空单元格可以检查单元格是否为空并进行相应处理 
	
		
			| 1 2 3 4 5 6 7 | for row in range(sheet.nrows):     for col in range(sheet.ncols):         cell_value = sheet.cell_value(row, col)         if cell_value == '':             print(f"({row}, {col}) 是空单元格")         else:             print(f"({row}, {col}) 的值: {cell_value}") |  处理错误单元格可以检查单元格是否是错误类型 
	
		
			| 1 2 3 4 5 6 | # 遍历Excel表格的每个单元格,查找错误类型的单元格 for row in range(sheet.nrows):     for col in range(sheet.ncols):         # 判断当前单元格的类型是否为错误类型         if sheet.cell_type(row, col) == 4:  # 错误类型             print(f"({row}, {col}) 是错误单元格") |  读取大文件时的性能优化当处理非常大的 Excel 文件时,可以考虑只读取必要的工作表或行,以减少内存使用。可以使用 xlrd 的 open_workbook 方法中的 on_demand 参数: 
	
		
			| 1 2 3 4 5 | # 只在需要时加载工作表 workbook = xlrd.open_workbook('Test.xlsx', on_demand=True)   # 访问工作表时才加载 sheet = workbook.sheet_by_index(0) |  使用xlrd和pandas结合如果需要更强大的数据处理能力,可以将xlrd与pandas结合使用。首先用xlrd读取数据,然后转换为DataFrame 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import pandas as pd import xlrd   # 打开文件 workbook = xlrd.open_workbook('Test.xlsx')   # 通过索引获取第一个工作表 sheet = workbook.sheet_by_index(0)   # 将数据转换为 DataFrame # 遍历工作表中的每一行,将数据转换为列表 data = [] for row in range(sheet.nrows):     data.append(sheet.row_values(row))   # 创建 DataFrame,将第一行作为列名,其余行作为数据 # data[1:]作为数据,data[0]作为列名:第一行为表头 df = pd.DataFrame(data[1:], columns=data[0]) # 打印 DataFrame print(df) |  自定义数据处理可以在读取单元格时自定义处理逻辑,例如将数字格式化为货币 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def format_currency(value):     """     将给定的数值格式化为货币格式。       参数:     value (int, float): 需要格式化的数值。       返回:     str: 格式化后的字符串,如果输入不是整数或浮点数,则返回原值。     """     # 格式化为货币形式,前面加上美元符号,并且保留两位小数     return f"${value:,.2f}" if isinstance(value, (int, float)) else value   # 遍历表格的每一行和每一列 for row in range(sheet.nrows):     for col in range(sheet.ncols):         # 获取当前单元格的值         cell_value = sheet.cell_value(row, col)         # 将单元格的值格式化为货币形式         formatted_value = format_currency(cell_value)         # 打印格式化后的值         print(f"({row}, {col}) 的格式化值: {formatted_value}") |  使用正则表达式提取特定数据如果需要从单元格中提取特定格式的数据,可以使用正则表达式 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import re   # 定义一个正则表达式模式,用于匹配包含关键词“Java”的字符串 pattern = r'Java'   # 假设在一个Excel工作表(sheet)中,遍历所有行来查找符合特定模式的字符串 for row in range(sheet.nrows):     # 获取当前行第二列的单元格值     cell_value = sheet.cell_value(row, 1)     # 在单元格值中搜索符合预定义模式的字符串     matches = re.findall(pattern, cell_value)     # 如果找到匹配项,则输出行号和匹配项     if matches:         print(f"行 {row} 中找到的匹配项: {matches}") |  处理条件格式虽然xlrd不支持读取条件格式,但可以根据业务规则手动处理 
	
		
			| 1 2 3 4 5 6 7 8 9 10 | # 遍历Excel工作表(sheet)的所有行,检查第四列的值是否超过2800 for row in range(sheet.nrows):     # 获取当前行第四列的单元格值     cell_value = sheet.cell_value(row, 3)       # 检查单元格值是否为数字     if isinstance(cell_value, (int, float)):         # 根据条件进行处理         if cell_value > 2800:             print(f"行 {row} 的值超出限制: {cell_value}") |  自定义类封装读取逻辑可以将读取逻辑封装在一个类中,以便于重用和扩展 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | import xlrd   class ExcelReader:     """     用于读取Excel文件的类。       Attributes:         workbook : xlrd.Book             打开的Excel工作簿。     """     def __init__(self, file_path):         """         初始化ExcelReader实例。           参数: file_path : str  Excel文件的路径。         """         self.workbook = xlrd.open_workbook(file_path)       def get_sheet(self, index):         """         根据索引获取工作表。           参数: index : int  工作表的索引。           返回: sheet : xlrd.Sheet 指定索引的工作表。         """         return self.workbook.sheet_by_index(index)       def get_row_values(self, sheet, row_index):         """         获取一行的所有值。           参数:             sheet : xlrd.Sheet 工作表。             row_index : int 行索引。           返回:             row_values : list  指定行的所有值。         """         return sheet.row_values(row_index)   # 使用自定义类读取Excel文件 reader = ExcelReader('Test.xlsx')   # 获取第一个工作表 sheet = reader.get_sheet(0) # 获取第一行的所有值 row_values = reader.get_row_values(sheet, 1) print(row_values) |  
 |