Python 办公自动化:Excel 文件处理(上)

Python 读写 Excel 文件(基础篇)

1. Excel 简介与技术选型

Excel 作为全球商业数据处理的「通用协作工具」,承载了多少职场人重复操作?每周五合并20张子公司导出的.xls周报?每月手工筛选计算上万条传统财务数据?

Daoman Python AI 的工程和实战辅导中,这类「枯燥低效」的.xls自动化场景,恰恰是 Python 办公自动化的高频刚需——因为很多国企、中小传统企业的内部系统、旧设备导出的报表还强制使用 Excel 97-2003 标准(.xls),新出的 openpyxl 读不了,必须专门学这一套库组合拳。

工具链快速梳理

Python 生态有明确的 Excel 处理分工:

  • 读旧版 (.xls):用 xlrd (读表、定位单元格、处理特殊格式)
  • 写旧版 (.xls):用 xlwt (新建工作簿、写数据、加样式、写Excel内置指令)
  • 改旧版 (.xls):用 xlutils 配合前两个库(核心是 copy 功能,把 xlrd 的只读对象转成 xlwt 的可写对象)

环境一键安装

💡 敲黑板! xlrd 从 2.0.0 版本起彻底取消了对 .xlsx 的支持,为了适配旧系统的读写,必须严格指定安装 1.2.0

在终端/命令行执行:

pip install xlwt xlrd==1.2.0 xlutils

2. 读取 Excel 文件

旧版 Excel 的读取逻辑非常清晰,和你手动打开Excel的逻辑是一样的:打开文件(Workbook)➔ 切换/找到表格(Sheet)➔ 定位/读取单元格(Cell)➔ 处理特殊格式

实战:批量读2020年阿里某段简化.xls

我们以一份简化的「阿里股票交易日」.xls为例,里面包含了日期、开盘价、收盘价等字段,重点练习日期格式转换(这个是 xlrd 读表最大的坑,因为 Excel 把日期存成内部的**纯数字(1900年1月1日是1)。

import xlrd

# 1. 打开工作簿,formatting_info=True 是保留单元格格式(后面可能用到)
wb = xlrd.open_workbook('阿里巴巴2020年股票数据.xls', formatting_info=True)

# 2. 获取并切换到第一个工作表
# 方法1:按名称找(更稳妥)
# sheet = wb.sheet_by_name('Sheet1')
# 方法2:按索引找(从0开始)
sheet_names = wb.sheet_names()
print(f"文件里的所有工作表: {sheet_names}")
sheet = wb.sheet_by_index(0)

# 3. 先看看表格的基本信息
print(f"总行数: {sheet.nrows},总列数: {sheet.ncols}")
print("-" * 80)

# 4. 逐行逐列读取
for row_idx in range(sheet.nrows):
    # 遍历前先检查行,第一行是表头吗?对,跳过日期在第0行,遍历行>行表头,遍历列>列列列列列>列>列>列列列列>列>列>列列>列列列列列列列>列>列列>列列列列列列列>列>列列>列列列列列>列>列列>列列列列列>列列列>列>列>列列列列>列列列列列>列>列>列列列列>列>列列列列>列列列列>列>列列列列>列列列列>列>列列列列列列列>列列列>列>列列列列>列>列列列列>列列列列>列列列>列>列列列列>列列列>列>列列列列列>列列>列>列列列列>列>列列列>列>列列列列列列列>列列列>列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列>列列列列>列>列列列列>列>列列列>列>列列列列列列>列>列列列列>列列列列>列列列列列>列>列列列列>列列列>列>列列列列>列列>列>列列列列>列>列列列列>列>列列列列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列>列列列列>列>列列列>列>列列列列>列>列列列列>列列>列>列列列列>列列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列>列列列列>列>列列列列>列>列列列>列>列列列列>列列>列>列列列列>列>列列列列>列>列列列列>列列>列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列列>列>列列列列>列>列列列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列>列列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列>列列列列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列列>列>列列列列>列>列列列>列>列列列列>列列列列>列