十三、Python Excel操作
最近公司要把Excel导入到mysql数据库,查了几篇博客,这几项是非常有用的,记录下来。一、安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python环境。二、使用介绍 1、导入模块
·
最近公司要把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 list
27
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 list
43
44 def main():
45 tables = excel_table_byindex()
46 for row in tables:
47 print row
48
49 tables = excel_table_byname()
50 for row in tables:
51 print row
52
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
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)
最后还有一个就是写入excel,相对比较简单
from pyExcelerator import *
w = Workbook() #创建一个工作簿
ws = w.add_sheet('Hey, Hades') #创建一个工作表
ws.write(0,0,'bit') #在1行1列写入bit
ws.write(0,1,'huang') #在1行2列写入huang
ws.write(1,0,'xuan') #在2行1列写入xuan
w.save('mini.xls') #保存
注意,中文需要转码
txt="中文"
ws.write(1,1,txt.decode("gbk"))
贴上我写的导出excel 函数:
#-*-coding:utf8 -*-
#import xlrd
from pyExcelerator import *
def table_to_excel(user_list, file_name="result.xls"):
'''This function can output the user_list to the excel files'''
work_book = Workbook()
work_sheet = work_book.add_sheet("solution")
key_col_map = {}
for col, key in enumerate(user_list[0]):
work_sheet.write(0, col, key)
key_col_map[key] = col
for cursor, user in enumerate(user_list):
for key, value in user.items():
work_sheet.write(cursor + 1, key_col_map[key], str(value).decode("utf-8"))
work_book.save(file_name)
if __name__ == "__main__":
'''For test the function'''
test_list = []
item1 = {}
item1["test"] = "good"
item1["number"] = 10
item2 = {"test": "bad",
"number": 9
}
test_list.append(item1)
test_list.append(item2)
table_to_excel(test_list)
更多推荐
已为社区贡献7条内容
所有评论(0)