shatian_excel/sort_time.py

61 lines
2.0 KiB
Python
Raw Permalink Normal View History

2025-04-04 16:48:59 +08:00
import xlrd
import xlwt
import re
from datetime import datetime
# 读取 .xls 文件
input_file = "全国统计系统会议接送表.xls"
workbook = xlrd.open_workbook(input_file)
sheet = workbook.sheet_by_index(0)
# 创建新的 .xls 文件
output_workbook = xlwt.Workbook()
output_sheet = output_workbook.add_sheet("Sheet1")
# 复制表头
for col in range(sheet.ncols):
output_sheet.write(0, col, sheet.cell_value(0, col))
output_sheet.write(1, col, sheet.cell_value(1, col))
output_sheet.write(2, col, sheet.cell_value(2, col))
# 添加新列标题"到达时间"到M列
output_sheet.write(2, 12, "到达时间")
# 准备数据行并提取时间
data_rows = []
for row in range(3, sheet.nrows):
row_data = [sheet.cell_value(row, col) for col in range(sheet.ncols)]
cell_value = sheet.cell_value(row, 5) # F列是第6列xlrd列索引从0开始
extracted_time = None
if cell_value:
time_match = re.search(r'(\d{1,2}[:]\d{2})', str(cell_value))
if time_match:
extracted_time = time_match.group(1).replace('', ':')
# 转换为时间对象便于排序
try:
time_obj = datetime.strptime(extracted_time, "%H:%M").time()
except ValueError:
time_obj = None
else:
time_obj = None
else:
time_obj = None
row_data.append(extracted_time) # 添加提取的时间字符串到行数据
data_rows.append((time_obj, row, row_data)) # 存储时间对象、原行号和行数据
# 排序:先按时间排序,没有时间的放在最后
data_rows.sort(key=lambda x: (x[0] is not None, x[0] or datetime.min.time()))
# 写入排序后的数据
output_row = 3
for time_obj, original_row, row_data in data_rows:
for col in range(len(row_data)):
output_sheet.write(output_row, col, row_data[col])
output_row += 1
# 保存
output_file = "全国统计系统会议接送表_排序.xls"
output_workbook.save(output_file)
print(f"处理完成,结果已保存至: {output_file}")