python读excel

一 python读取excel(xlrd

# -*- coding:utf-8 -*-
# Author : liuqingzheng
# Data : 2018/11/27 17:26
# 导入模块
import xlrd
from datetime import datetime,date
# 打开要读的excel
tt=xlrd.open_workbook('tt.xlsx')
# 打印所有表格名字
print(tt.sheet_names())
#通过索引获取表格
sheet1 = tt.sheet_by_index(0)
print(sheet1)
#通过名字获取表格
# sheet2 = tt.sheet_by_name('个人信息')
# sheet1.nrows 该表格行数
# sheet1.ncols 该表格列数
print(sheet1.name,sheet1.nrows,sheet1.ncols)
# 根据行数,获取该行所有内容,放到列表中
rows = sheet1.row_values(2)
print(rows)
# 根据列数,获取该列所有内容,放到列表中
cols = sheet1.col_values(3)#获取列内容
print(cols)
# 获取表格里的内容,三种方式(获取第一行第二列,从0开始计算)
print(sheet1.cell(1, 2).value)
print(sheet1.cell_value(1, 2))
print(sheet1.row(1)[2].value)
# 通过列取
print(sheet1.col(2)[1].value)


# print(sheet1.row(4))

print(sheet1.cell(1,3).ctype)
# print(tt.datemode)
'''
默认情况下,Excel for Windows使用1900日期系统,而Excel for Macintosh使用1904日期系统。

找了一通资料才知道原來是为了要处理闰年问题… XD (註) 另,原來 Excel (on Windows) 內部资料也是用 1900-based 的日期 (这是为了和旧式的 Lotus 1-2-3 相容),而 Excel (on Mac) 是 1904-based
'''
#**********处理日期格式
date_value = xlrd.xldate_as_tuple(sheet1.cell_value(1,3),tt.datemode)
# 打印出数组形式的日期
print(date_value)
# 用data模块处理一下时间
# print(date(*date_value[0:3]))
print(date(*date_value[:3]))
print(date(*date_value[:3]).strftime('%Y-%m-%d'))
# *********merged_cells
# (1, 3, 4, 5)的含义是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含义是:第2到4列合并
# [(4, 5, 2, 6)]:表示第2列到第5列合并
print(sheet1.merged_cells)
print(sheet1.row_values(4,2))
# 所以要取值,要取第4行,第2列,也就是低位索引
print(sheet1.cell_value(4,2))


merge = []
print(sheet1.merged_cells)
for (rlow,rhigh,clow,chigh) in sheet1.merged_cells:
    merge.append([rlow,clow])
for index in merge:
    print(sheet1.cell_value(index[0],index[1]))

 常用函数

import xlrd

# 读取文件
work_book = xlrd.open_workbook("/Users/jerry/Desktop/公司机密数据.xlsx")
# 选取一个表

# 获取所有所有表格名称
print(work_book.sheet_names())

# 选择第2个  索引从0开始
sheet = work_book.sheet_by_index(1)

# 表格名称
print(sheet.name)

# 行数
print(sheet.nrows)
# 列数
print(sheet.ncols)


#批量读取行数据
# 取出第6行的全部内容包含数据类型
print(sheet.row(6))
# 取出第6行的内容包含数据类型 从第3列开始获取
print(sheet.row_slice(6,start_colx=3))

# 取出第6行的内容包含数据类型 从第3列开始获取
print(sheet.row_slice(6,start_colx=4,end_colx=5))

# 获取该行所有数据类型 一数字表示
# print(sheet.row_types(6))
# print(sheet.row_values(6))


# 单元格的处理
print(sheet.cell(0,0).value) # 取值
print(sheet.cell(0,0).ctype) # 取类型
print(sheet.cell_value(2,0)) # 直接取值

print(sheet.row(0)[0]) # 先取行再取单元格
print(sheet.col(0)) # 第0列所有数据
print(sheet.col(0)) # 先取列再取单元格

print(sheet.cell_type(0,0))

# 单元格位置转换
print(xlrd.cellname(2,1))
print(xlrd.cellnameabs(0,2))
print(xlrd.colname(5))


# 时间类型转换
# print(sheet.cell(6,5).value)
# print(xlrd.xldate_as_datetime(sheet.cell(6,5).value,1))

实战案例

读取一个报价单 其第二个sheet包含合并单元格

文件地址:https://share.weiyun.com/5GaLY2m

import xlrd

sheet = xlrd.open_workbook("报价单.xlsx").sheet_by_index(1)

def get_text(row,col):
    # 判断该坐标是否是被合并的单元格    合并单元格的数据都在合并区域的第一个位置 
    for ces in sheet.merged_cells:
        if (row >= ces[0] and row < ces[1]) and (col >= ces[2] and col < ces[3]):
            return sheet.cell(ces[0],ces[2]).value # 取出合并区域的第一个数据
    return sheet.cell(row,col).value #正常取出对应数据

keys = sheet.row_values(1) # 获取所有的列标题
data = []
for row in range(2,sheet.nrows):
    dic = {}
    for col in range(sheet.ncols):
        k = keys[col] #确定key
        res = get_text(row,col)
        dic[k] = res # 确定值 并存储
    data.append(dic)


print(data)
# 序列化为json
import json
json.dump(data,open("test.json","wt"),ensure_ascii=False)

二 python写excel(xlwt)

是python中一个第三方的用于写入excle数据到表格的模块 ​ 用代码来编写exlce是非常低效的 所以该模块了解即可

import xlwt
# 创建工作簿
work = xlwt.Workbook()
# 创建一个表
sheet = work.add_sheet("员工信息数据")


#创建一个字体对象
font = xlwt.Font()
font.name = "Times New Roman" # 字体名称
font.bold = True # 加粗
font.italic = True # 斜体
font.underline = True # 下划线

#创建一个样式对象
style = xlwt.XFStyle()
style.font = font


# 写入标题
for k in keys:
    sheet.write(0,keys.index(k),k,style)

# 写入数据
for i in infos:
    for k in keys:

 三 读取excel并写入数据库

import xlrd
import pymysql

# 读取文件
work_book = xlrd.open_workbook("/xxx/xxx.xlsx")
# 选取一个表
sheet = work_book.sheet_by_index(0)

# 遍历表格数据
datas = []
for row in range(1,sheet.nrows):
    temp_list =[]
    for col in range(sheet.ncols):
        value = sheet.cell_value(row,col)
        temp_list.append(value)
    datas.append(temp_list)

# 打开数据库连接
db = pymysql.connect(host='localhost', port=3306,
                     user='username', passwd='password', db='database_name', charset='utf8')

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO SHOP(shop_code, shop_name, month) VALUES (%s,%s,%s)"

 

posted @ 2018-11-27 18:41  刘清政  阅读(356)  评论(0编辑  收藏  举报