python对excel进行读写操作

  • 欢迎使用Markdown编辑器
    • 一、安装库
      • 1.安装xlrd模块
      • 2.安装xlwt模块
      • 2.安装openpyxl模块
      • 补充(多个python版本)
    • 二、使用介绍
      • 1、常用单元格中的数据类型
      • 2、导入模块
      • 3、Excel文件基础操作(读取excel数据)
        • 3.1 打开Excel文件读取数据(所有工作簿sheet)
        • 3.2获取工作簿sheet名称
        • 3.3获取指定工作簿的行和列值
        • 3.4获取指定单元格的内容
        • 3.5获取单元内容为日期类型的方式
        • 3.6获取合并单元格的内容
        • 3.7函数
      • 4、Excel文件基础操作(写入excel数据)
        • 4.1创建Excel文件和sheeet工作簿
        • 4.2对指定excel写入数据
        • 4.3保存文件
        • 4.4自定义字体样式设置
        • 4.5设置单元格的宽度
        • 4.6
        • 4.7
        • 4.8
    • 三、

python操作excel主要用到xlrd和xlwt这两个库,xlrd是读excel,xlwt是写excel的库。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

一、安装库

想要实现对excel文件的读写功能,需要安装一些库。下面三个库对excel进行读写操作必不可少。
1.xlwt:对xls等excel文件的写入
2.xlrd:对xls等excel文件的读取
3.openpyxl:对xlsm、xlsx等excel文件进行读写操作
4.xlutils结合xlrd可以达到修改excel文件目的
5.xlsxwriter可以写excel文件并加上图表

1.安装xlrd模块

到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境。
或者在cmd窗口 pip install xlrd

#查看版本
pip list
#安装指定版本
pip install xlrd == 1.2.0
#卸载
pip uninstall xlrd

2.安装xlwt模块

到python官网下载http://pypi.python.org/pypi/xlwt模块安装,前提是已经安装了python 环境。
或者在cmd窗口 pip install xlwt

2.安装openpyxl模块

或者在cmd窗口 pip install openpyxl

补充(多个python版本)

使用pip安装第三方模块
  1.python2.x: cmd窗口输入python -m pip install 模块名
    如 python -m pip install requests
  2.python3.x: cmd窗口输入python3 -m pip install 模块名
    如 python3 -m pip install requests

二、使用介绍



1、常用单元格中的数据类型

0 - empty(空的) 1 - string(text) 2 - number 3 - date 4 - boolea 5 - error 6 - blank(空白表格)

2、导入模块

import xlrd
import xlwt

3、Excel文件基础操作(读取excel数据)

#判断文件是否存在
print os.path.exists([路径/文件名]);

3.1 打开Excel文件读取数据(所有工作簿sheet)

data = xlrd.open_workbook(filename)

import xlrd;#对excel数据进行读取的库
workbook= xlrd.open_workbook(r'C:\Users\Administrator\Desktop\999.xls')

#文件名以及路径,如果路径或者文件名有中文给前面加一个r拜师原生字符。
#使用r就防止了\n的转义。

3.2获取工作簿sheet名称

print workbook.sheet_names()#输出sheet名[u'Sheet1', u'test', u'Sheet3']

#根据下标获取sheet名称
sheet_name=workbook.sheet_names()[0]
print sheet_name
#根据sheet索引获取sheet内容,同时获取sheet名称、行数nrows、列数ncols
sheet1 = workbook.sheet_by_index(0)
print sheet1.name,sheet1.nrows,sheet1.ncols
#根据sheet名称获取sheet内容,同时获取sheet名称、行数nrows、列数ncols
sheet1 = workbook.sheet_by_name('999')
print sheet1.name,sheet1.nrows,sheet1.ncols

3.3获取指定工作簿的行和列值

#根据sheet名称获取整行和整列的值

sheetData= workbook.sheet_by_name('test')
rows = sheetData.row_values(3)#第四行
cols = sheetData.col_values(0)#第一列
print rows
print cols
print workbook.sheet_names()

3.4获取指定单元格的内容

#sheetData= workbook.sheet_by_name('test')
print sheetData.cell(0,0).value#第一行第列
print sheetData.cell(9,0).value
print sheetData.cell_value(8,3)
print sheetData.row(7)[3].value


中文转码,在python文件首行加(#--coding:UTF-8-sig --)字符.首行首行注意。

如果不行的话,可加。encode(‘UTF-8’)进行转码例如:
sheet2.cell(0,0).value.encode(‘UTF-8’)

#获取单元格内容的数据类型
#(说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error)

print sheetData.cell(3,0).ctype #4行1列: 2 为number类型
print sheetData.cell(3,1).ctype #4行2列: 3 为date类型
print sheetData.cell(3,2).ctype #4行3列: 1 为string类型

3.5获取单元内容为日期类型的方式

#获取单元内容为日期类型的方式
#使用xlrd的xldate_as_tuple处理为date格式,先判断表格的ctype=3时xlrd才能执行操作
先导入日期时间类型的库

from datetime import datetime,date
print sheetData.cell(9,1).ctype#第四行第三列的类型
print sheetData.cell(9,1).value#第四行第三列的值
#使用xlrd的xldate_as_tuple处理为date格式,先判断表格的ctype=3时xlrd才能执行操作
print xlrd.xldate_as_tuple(sheetData.cell_value(9,1),workbook.datemode)date_value = xlrd.xldate_as_tuple(sheetData.cell_value(9,1),workbook.datemode)
print date(*date_value[:3])
print date(*date_value[:3]).strftime('%Y/%m/%d')

#如果是在脚本中需要获取并显示单元格内容为日期类型的,可以先做一个判断。
#判断ctype是否等于3,如果等于3,则用时间格式处理:
#if (sheetData.cell(row,col).ctype == 3):
#date_value = xlrd.xldate_as_tuple(sheetData.cell_value(row,col),book.datemode)
#date_tmp = date(*date_value[:3]).strftime(’%Y/%m/%d’)

if (sheetData.cell(8,1).ctype == 3):date_value = xlrd.xldate_as_tuple(sheetData.cell_value(8,1),workbook.datemode)date_tmp = date(*date_value[:3]).strftime('%Y.%m.%d')print date_valueprint date_tmp

3.6获取合并单元格的内容

#获取合并单元格的内容
print sheetData.cell(11,0).value #第12行1,2,3列是合并单元格
print sheetData.cell(11,1).value #第12行1,2,3列是合并单元格
print sheetData.cell(11,2).value #第12行1,2,3列是合并单元格
print sheetData.cell(2,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(3,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(4,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(5,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(6,2).value #第5,6,7行的第3列是合并单元格

print sheetData.row_values(11)#输出第12行所有数据


#在这里有个问题,合并单元格例如第12行1,2,3列只能获取
#第12行的第1列的值而第2,3列获取的内容为空,
#而第3,4行的第3列是合并单元格则只能获取
#第3行的第3列的值而第4列获取的内容为空,
#那么该如何处理呢

#可以利用merged_cells方法进行处理,处理的方法是只能获取合并单元格的
#第一个cell的行列索引,才能读到值,读错了就是空值。即合并行单元格读取
#行的第一个索引,合并列单元格读取列的第一个索引。
#这里,需要在读取文件的时候添加个参数,将formatting_info参数设置为True,
#默认是False,否则可能调用merged_cells方法获取到的是空值。

workbook = xlrd.open_workbook(r'C:\Users\Administrator\Desktop\999.xls',formatting_info=True)
sheetData = workbook.sheet_by_name('test')
print sheetData.merged_cells


#merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),
#merged_cells 返回的是一个列表,每一个元素是合并单元格的位置信息的数组,
#merged_cells返回的是一个数组,数组包含四个元素(起始行索引,结束行索引,起始列索引,结束列索引)
#其中[row,row_range)包括row,不包括row_range,col也是一样,下标从0开始。
#即(11, 12, 0, 3),的含义是:第12行,1到3列合并,
#(2, 4, 2, 3),的含义是:第3到4行合并,
#(4, 7, 2, 3),的含义是:第5到7行合并,
#(7, 11, 2, 3)的含义是:第8到11行合并,
#利用这个,可以分别获取合并的四个单元格的内容:
#[(11, 12, 0, 3), (2, 4, 2, 3), (4, 7, 2, 3), (7, 11, 2, 3)]

print sheetData.cell(11,0).value #(11, 12, 0, 3)第12行1,2,3列是合并单元格
print sheetData.cell(11,1).value #第12行1,2,3列是合并单元格
print sheetData.cell(11,2).value #第12行1,2,3列是合并单元格
print sheetData.cell(2,2).value #(2, 4, 2, 3)第3,4行的第3列是合并单元格
print sheetData.cell(3,2).value #第3,4行的第3列是合并单元格
print sheetData.cell(4,2).value #(4, 7, 2, 3)第5,6,7行的第3列是合并单元格
print sheetData.cell(5,2).value #第5,6,7行的第3列是合并单元格
print sheetData.cell(6,2).value #第5,6,7行的第3列是合并单元格

#发现规律了吗!是的,获取merge_cells返回的row和col低位的索引! 于是可以:
#merge = []
#for (rlow,rhigh,clow,chigh) in sheetData.merged_cells:
#merge.append([rlow,clow])
(merge函数,后续补充)

#[(11, 12, 0, 3), (2, 4, 2, 3), (4, 7, 2, 3), (7, 11, 2, 3)]merge = []
for (rlow,rhigh,clow,chigh) in sheetData.merged_cells:merge.append([rlow,clow])print "000000000"
print "111111111"
merge
[[11, 0], [2,2], [4,2], [7,2]]
print "22222222222"
for index in merge:print "33333333333"print sheetData.cell_value(index[2],index[3])

3.7函数

#使用def函数注意缩进格式相同,否则会报错
我创建了一个test.py文件,并写入代码,保存。下面就先介绍main吧。
1.首先main 函数的意义
通俗的理解__name__ == ‘main’: test.py,相当于(name == ‘test’);
name__是内置变量,可用于反映一个包的结构层次。
name__是内置变量,可用于表示当前模块的名字。
当一个.py文件(模块)被直接运行时,若没有包结构,则__name__值为__main
,即模块名为__main

if name == ‘main’:的意思是:
当test.py文件被直接运行时,if name == ‘main’:之下的代码块将被运行;
当test.py文件以模块形式被导入时,if name == ‘main’:之下的代码块不被运行。
2.程序入口
一般来说,对编程语言而言,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都有一个main函数作为程序入口,也就是程序的运行会从main函数开始。同样,Java,C#则有一个包含Main方法的主类,作为程序入口。
而Python不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口。
一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。
所以,实际上if name == 'main’相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。由于模块之间相互引用,不同模块可能有这样的定义,而程序入口只有一个。到底哪个程序入口被选中,这取决于__name__的值。

3.引用其他.py文件
from 【.py文件名称】 import 【变量】

from test import excel_name

if name == ‘main’:
try:
main()
except KeyboardInterrupt:
sys.stderr.write(“User interrupt me!

python对excel进行读写操作相关推荐

  1. python写表格_使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  2. excel调用python编程-使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  3. 利用python对Excel进行读写操作

    最近在写论文做实验的过程中,利用python自带的matplotlib库进行绘画,但是尝尝会出现在程序跑完后发现图片里面有一些小细节没有注意到,导致整个代码重新跑.代码重新跑短则几小时,长则就不好说了 ...

  4. Python对excel表格读写操作

    1.测试代码如下: # -*- coding-8 -*- from openpyxl import *def data_wr(r,c,data):print(ws.cell(row=r, column ...

  5. python 写入excel_基于Python实现Excel的读写

    LabVIEW:2018 Python:3.6.0 xlrd:1.2.0 xlwt:1.3.0 Python的强大不需要我来解释,人生苦短,我用python!自行学习之后总想把它在工作中慢慢用起来,L ...

  6. python中的文件读写操作

    python中的文件读写操作 思维导图 Python读写CSV文件 csv文件是什么? CSV(Comma Separated Values)全称逗号分隔值文件是一种简单.通用的文件格式,被广泛的应用 ...

  7. Python对Excel的常规操作 之 读取,写入(保留原格式写入)

    Python对Excel的常规操作 之 读取,写入(保留原格式) 前言 使用Python读写Excel常用的库有win32com和xlrd.xlwd.其中win32com可读可写,它对Excel的操作 ...

  8. Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码

    Python对Excel的常规操作 之 读取带密码的文件,解除Sheet密码 一些废话 读取加密的Excel 解除文件中Sheet的密码 写在后面 一些废话 最近一直在给部门写一个参数校验的小程序.因 ...

  9. 使用Easyexcel对Excel进行读写操作

    1.概述 EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. github地址:GitHub - alibaba/easy ...

最新文章

  1. java 抛异常给上级_java异常处理机制(示例代码)
  2. AI学会灌水和造假!Google新研究揭露了AI现实应用的陷阱
  3. 高压发生器的输出电压波形
  4. html课做一个网页,菜鸟自学建站 HTML 第三课 制作我的第一个网页_html/css_WEB-ITnose...
  5. C++ 重载new和delete运算符
  6. BetterZip结合自动操作工具和预设设置创建电影解压程序
  7. Windows 10 + anaconda3快速配置tensorflow-gpu开发环境
  8. datagridview列 值提取_Pandas中的缺失值处理
  9. 安卓Android资源链接失败,Android资源链接失败
  10. linux配置ssh免密码登录
  11. java 员工管理系统
  12. vue后台管理系统计算入职天数
  13. 计算机分盘介质受写入保护,硬盘介质受写入保护怎么办
  14. H3C交换机WEB管理时间_H3C 交换机之VLAN配置与VLAN间访问
  15. android app 缓存目录在哪里找,Android App的文件缓存目录
  16. 计算机等级考试第一次报什么,计算机等级考试一年是考两次,3月和9月各一次 如果第一次没有考过第二次考要再报名缴费吗?...
  17. 卷积神经网络中的卷积操作与信号系统中的卷积区别
  18. Tomcat : 修改Tomcat端口号
  19. Python之列表推导式
  20. 最新 Flink 1.13 时间和窗口(时间语义、Watermark、Window 窗口、Trigger)快速入门、详细教程

热门文章

  1. 计算机系统结构 2:局部性原理
  2. 人事工作中的Python运用——离职证明生成器
  3. android计时器
  4. 鸿蒙支持lOS,读了鸿蒙 OS 的代码后,我发现优秀项目都有这个共性!
  5. 【第2篇】基础数据类型
  6. (字符串处理)A-B
  7. webp格式如何转成png?
  8. QPixmap保存图片
  9. FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览
  10. Silverlight 中文教程第五部分:用 ListBox 和 DataBinding 显示列表数据 (木野狐译)