最近公司要把Excel导入到mysql数据库,查了几篇博客,这几项是非常有用的,记录下来。
一、安装xlrd模块
到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python
环境。
二、使用介绍
1、导入模块
import
xlrd
2、打开Excel文件读取数据
data
= xlrd.open_workbook(‘excelFile.xls‘)
3、使用技巧
获取一个工作表
table = data.sheets()[0] #通过索引顺序获取
table = data.sheet_by_index(0) #通过索引顺序获取
table = data.sheet_by_name(u‘Sheet1‘)#通过名称获取
获取整行和整列的值(数组)
table.row_values(i)
table.col_values(i)
获取行数和列数
nrows = table.nrows
ncols = table.ncols
循环行列表数据
for i in range(nrows ):
print table.row_values(i)
单元格
cell_A1 = table.cell(0,0).value
cell_C4 = table.cell(2,3).value
使用行列索引
cell_A1 = table.row(0)[0].value
cell_A2 = table.col(1)[0].value
简单的写入
row = 0
col = 0
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
ctype = 1 value = ‘单元格的值‘
xf = 0 # 扩展的格式化
table.put_cell(row, col, ctype, value, xf)
table.cell(0,0) #单元格的值‘
table.cell(0,0).value #单元格的值‘
三、Demo代码
Demo比较简单,就是读取Excel数据。
1 # -*- coding: utf-8 -*- 2 import xdrlib ,sys 3 import xlrd 4 def open_excel(file= ‘file.xls‘): 5 try: 6 data = xlrd.open_workbook(file) 7 return data 8 except Exception,e: 9 print str(e)10 #根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引11 def excel_table_byindex(file= ‘file.xls‘,colnameindex=0,by_index=0):12 data = open_excel(file)13 table = data.sheets()[by_index]14 nrows = table.nrows #行数15 ncols = table.ncols #列数16 colnames = table.row_values(colnameindex) #某一行数据 17 list =[]18 for rownum in range(1,nrows):19 20 row = table.row_values(rownum)21 if row:22 app = {}23 for i in range(len(colnames)):24 app[colnames[i]] = row[i] 25 list.append(app)26 return list27 28 #根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_name:Sheet1名称29 def excel_table_byname(file= ‘file.xls‘,colnameindex=0,by_name=u‘Sheet1‘):30 data = open_excel(file)31 table = data.sheet_by_name(by_name)32 nrows = table.nrows #行数 33 colnames = table.row_values(colnameindex) #某一行数据 34 list =[]35 for rownum in range(1,nrows):36 row = table.row_values(rownum)37 if row:38 app = {}39 for i in range(len(colnames)):40 app[colnames[i]] = row[i]41 list.append(app)42 return list43 44 def main():45 tables = excel_table_byindex()46 for row in tables:47 print row48 49 tables = excel_table_byname()50 for row in tables:51 print row52 53 if __name__=="__main__":54 main()
然后就是日期的处理,日期类型的cell取出来是个数字,于是查询了下解决的办法。
基本的代码结构
- data = xlrd.open_workbook(EXCEL_PATH)
- table = data.sheet_by_index(0)
- lines = table.nrows
- cols = table.ncols
- print u‘The total line is %s, cols is %s‘%(lines, cols)
读取某个单元格:
- table.cell(x, y).value
x:行
y:列
行,列都是从0开始
* 时间类型的转换,把excel中时间转成python 时间(两种方式)
excel某个单元格 2014/7/8
- xlrd.xldate_as_tuple(table.cell(2,2).value, 0) #转化为元组形式
- (2014, 7, 8, 0, 0, 0)
- xlrd.xldate.xldate_as_datetime(table.cell(2,2).value, 1) #直接转化为datetime对象
- datetime.datetime(2018, 7, 9, 0, 0)
- table.cell(2,2).value #没有转化
- 41828.0
源码查看:
- # @param xldate The Excel number
- # @param datemode 0: 1900-based, 1: 1904-based.
- xldate_as_tuple(xldate, datemode)
输入一个日期类型的单元格会返回一个时间结构组成的元组,可以根据这个元组组成时间类型
datemode 有2个选项基本我们都会使用1900为基础的时间戳
- ##
- # Convert an Excel date/time number into a datetime.datetime object.
- #
- # @param xldate The Excel number
- # @param datemode 0: 1900-based, 1: 1904-based.
- #
- # @return a datetime.datetime() object.
- #
- def xldate_as_datetime(xldate, datemode)
输入参数和上面的相同,但是返回值是一个datetime类型,就不需要在自己转换了