1.安装 openpyxl

pip install openpyxl == 2.3.5  安装指定版本

遇到问题:

查询结果:这是因为电脑上有其他软件也有pip命令,我的电脑上是因为装了loadrunner

解决办法:

我用的有效命令:

python -m pip install openpyxl   安装成功

2.安装pillow

直接点击安装即可,64位需要和python版本一致;32也是

3.show openpyxl

c:\Python27>python -m pip show openpyxl

4.创建excel文件对象

>>> from openpyxl import *

>>> wb = Workbook()  #创建excel文件对象,写在内存里的,不保存的话在关闭后就没了

>>> ws = wb.active   #获取excel文件的一个sheet

>>> ws['A1']=12   #写入内容  单格写

>>> ws['A2']=12.333

>>> ws['A3']=u"小七"

>>> wb.save("e:\\test1.xlsx")  #保存文件

>>> ws["B1"]=u"哥哥"

>>> ws["B2"]=u"我想我哥哥了"

>>> wb.save("e:\\test1.xlsx")

>>> import time   #写入时间

>>> ws["c1"]= time.strftime(u"%Y年%m月%d日 %H时%M分%S秒".encode("utf-8"),time.lo

caltime())

>>> wb.save("e:\\test1.xlsx")

import datetime

import time

ws['A2'] = datetime.datetime.now()

5.打印有效行和列:

>>> ws.columns

0x0000000002E117E0>

>>> for col in ws.columns:

...

print col

...

(,

u'Sheet'.A2>, )

(,

u'Sheet'.B2>, )

(,

u'Sheet'.C2>, )

>>> for col in ws.rows:

...

print col

...

(,

u'Sheet'.B1>, )

(,

u'Sheet'.B2>, )

(,

u'Sheet'.B3>, )

什么是有效行和列?

数据写入的可包含整体数据的最大范围,这个范围内的都是有效行和列

6.创建sheet

>>> ws = wb.create_sheet("gloryroad")

>>> ws = wb.create_sheet("I

love")

>>> ws = wb.create_sheet(u"哥哥")

>>>

wb.save("e:\\test.xlsx")

7.获取sheet名称

>>> wb.get_sheet_names()  #获取所有名称

[u'Sheet', u'gloryroad', u'I love',

u'\u54e5\u54e5']

>>> ws =

wb.get_sheet_by_name(u"哥哥") #获取指定名称

>>> ws

>>> print

ws.encode("gbk")

>>> ws =

wb.get_sheet_by_name(wb.get_sheet_names()[-1])

#获取指定位置的sheet名称

>>> ws

8.修改sheet名称

>>> ws =

wb.get_sheet_by_name(wb.get_sheet_names()[-1])

#修改前需要先获取

>>> ws

>>> ws.title = "lin"

>>> wb.get_sheet_names()

[u'Sheet', u'gloryroad', u'I love', u'lin']

>>> ws.title

u'lin'

9.获取sheet名称

>>> ws = wb["I love"]

>>> ws

>>> wb.sheetnames

[u'Sheet', u'gloryroad', u'I love', u'lin']

10. 通过行和列修改表格内的内容

>>>

ws.cell(row=1,column=2,value=123456)

>>> ws["B1"].value

123456

>>>

ws.cell(row=1,column=2,value="I love")

>>> ws["B1"].value

u'I love'

小练习:

从A1到D4区域的所有单元格都要写内容,内容是行号是第一位,列号是第二位

>>> for row in range(1,5):

...

for col in range(1,5):

...

ws.cell(row=row,column=col,value=str(row)+str(col))

...

>>>

wb.save("e:\\test.xlsx")

>>>

11. 操作某列中所有有效数据

>>> print ws["A"]

(,

love'.A2>, ,

A4>)

12. 操作某两列之间的所有有效值

>>> print ws["A:D"]

((,

love'.A2>, ,

.A4>), (,

, ,

love'.B4>), (,

, ,

ll u'I love'.C4>), (

love'.D1>, ,

>, ))

13. 打印出获取到的指定位置的值

>>> print

ws["A:D"][0][0].value

11

>>>

ws["A:D"][0][0].value='22'   第一列的第一行:列在前,行在后

14. 取出列的值;取出行和列的值

>>> ws[1]  取出1行

(,

love'.B1>, ,

D1>)

>>> ws[1:2]  取出1行2列的值

((,

love'.B1>, ,

.D1>), (,

, ,

love'.D2>))

小练习:取出1到3行的内容

自己的做法,取了3列

>>> for i in range(1,3):

...

print ws[i:3]

...

((,

love'.B1>, ,

.D1>), (,

, ,

love'.D2>), (,

, ,

ll u'I love'.D3>))

((,

love'.B2>, ,

.D2>), (,

, ,

love'.D3>))

老师的方法:

>>> for row in ws[1:3]:

...     for j in range(len(row)):  利用每行元素的个数来确定有多少列

...         print row[j].value

同学的方法:

for rows in ws[1:3]:

for row in rows:

print row.value,

print

15. 指定一个范围,通过限制最大行号和列号,最小行号和列号来实现

>>> for row in ws.iter_rows(min_row=1,max_col=3,max_row=3):

...

for cell in row:

...

print cell.value

...

22

12

13

21

22

23

31

32

33

>>> for row in ws.iter_rows(min_row=1,min_col=1,max_col=3,max_row=3):

...

for cell in row:

...

print cell.value

...

16. 打印所有的行和列

>>> for row in ws.rows:  打印所有的行

...

print row

...

>>> for col in ws.columns:  打印所有的列

...

print col

...

17. 写入百分数

>>> ws["Z100"]="66%"

>>> print

ws["Z100"].value

66%

>>> wb.guess_type = True   为True时excel里面就是常规类型,为False时是百分数?

>>> ws["Z101"].value

>>>

wb.save("e:\\test.xlsx")

18. 修改excel里面的值

>>> wb =

load_workbook("e:\\test.xlsx")

#读取一个现有的文件进行操作

>>> ws = wb.active #获取当前sheet

>>> ws['A1'].vlue

>>> ws['A1'].value

12L

>>> ws['A1'].value=12  #修改值

>>> ws['A1'].value

12

>>> ws['A2'].value

12.333

>>>

ws['A2'].value=u"gege" #修改值

>>> ws['A2'].value

u'gege'

19. 判断excel内存储的数值格式类型

>>> ws['A3'].value =

"12%"

>>> ws['A3'].number_format

'General'

>>> ws['A20'].number_format

'General'

>>> wb.guess_type = True

>>> ws['A10']="12%"

>>> ws['A10'].number_format

'General'

>>> ws['A10']="12%"

>>>

wb.save("e:\\test.xslx")

>>> ws['A10'].number_format

'General'

>>> import datetime

>>>

ws["A11"]=datetime.datetime(1017,1,1)

>>> ws['A11'].number_format

'yyyy-mm-dd h:mm:ss'

>>>

20. 写入一个sum函数

>>> ws["A11"]="=sum(1,1)"

>>> print ws["A11"]

>>> print ws["A11"].value

=sum(1,1)

>>> wb.save("e:\\sample.xlsx")

21. 合并单元格和取消合并

ws.merge_cells("A1:C3")

ws.umerge_cells("A1:C3")

ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

22. 插入图片

from openpyxl import load_workbook

from openpyxl.drawing.image import Image

wb = load_workbook('e:\\test.xlsx')

ws1=wb.active

img = Image('e:\\1.png')

ws1.add_image(img, 'A1')

# Save the file

wb.save("e:\\test.xlsx")

E:\>python a.py

Traceback (most recent call last):

File "a.py", line 13,

in

wb.save("e:\\test.xlsx")

File "C:\Python27\lib\site-packages\openpyxl\workbook\workbook.py",

line 349,

in save

save_workbook(self, filename)

File

"C:\Python27\lib\site-packages\openpyxl\writer\excel.py", line 267,

in sa

ve_workbook

archive = ZipFile(filename,

'w', ZIP_DEFLATED, allowZip64=True)

File

"C:\Python27\lib\zipfile.py", line 756, in __init__

self.fp = open(file,

modeDict[mode])

IOError: [Errno 13] Permission denied: 'e:\\test.xlsx'

Excel没有关闭,所以报错!!!

E:\>python a.py

23. 隐藏列

ws1.column_dimensions.group('A', 'D',

hidden=True)   隐藏列

24. 生成柱形图

from openpyxl import load_workbook

from openpyxl import Workbook

from openpyxl.chart import BarChart,

Reference, Series

wb = load_workbook('e:\\test.xlsx')

ws1=wb.active

wb = Workbook()

ws = wb.active

for i in range(10):  #生成数据

ws.append([i])

values = Reference(ws, min_col=1,

min_row=1, max_col=1, max_row=10)   #数据范围

chart = BarChart() #生成柱状图对象

chart.add_data(values) #柱状图对象用values存储数据

ws.add_chart(chart, "E15")

# Save the file

wb.save("e:\\test.xlsx")

25. 生成单元格,有样式

# -*- coding: utf-8 -*-

from openpyxl import load_workbook

from openpyxl import Workbook

from openpyxl.worksheet.table import Table,

TableStyleInfo

wb = Workbook()

ws = wb.active

data = [

['Apples', 10000, 5000, 8000, 6000],

['Pears',   2000, 3000, 4000,

5000],

['Bananas', 6000, 6000, 6500, 6000],

['Oranges',  500,  300,

200,  700],

]

# add column headings. NB. these must be

strings

ws.append(["Fruit",

"2011", "2012", "2013", "2014"])

for row in data:

ws.append(row)

tab = Table(displayName="Table1",

ref="A1:E5") #table指的是要使用样式的区域

# Add a default style with striped rows and

banded columns

style =

TableStyleInfo(name="TableStyleMedium9", showFirstColumn=True,

showLastColumn=True,

showRowStripes=True,

showColumnStripes=True)

tab.tableStyleInfo = style

ws.add_table(tab)

# Save the file

wb.save("e:\\test.xlsx")

26. 设置单元格中的字体

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.styles import colors

from openpyxl.styles import Font

wb = Workbook()

ws = wb.active

a1 = ws['A1']

d4 = ws['D4']

ft = Font(color=colors.RED)  # color="FFBB00",颜色编码也可以设定颜色

a1.font = ft

d4.font = ft

# If you want to change the color of a

Font, you need to reassign it::

a1.font = Font(color=colors.RED,

italic=True) # the change only affects A1

a1.value = "abc"

# Save the file

wb.save("e:\\test.xlsx")

16进制的颜色:

可以在网上查

27. 设置字体和大写

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.styles import colors

from openpyxl.styles import Font

wb = Workbook()

ws = wb.active

a1 = ws['A1']

d4 = ws['D4']

ft = Font(color="FFBB00")  # color="FFBB00",颜色编码也可以设定颜色

a1.font = ft

d4.font = ft

# If you want to change the color of a

Font, you need to reassign it::

a1.font = Font(name=u'宋体',size=28,color=colors.RED, italic=True) # the change only

affects A1

a1.value = "abc"

# Save the file

wb.save("e:\\test.xlsx")

28. 设置为粗体

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.styles import colors

from openpyxl.styles import Font

wb = Workbook()

ws = wb.active

a1 = ws['A1']

d4 = ws['D4']

ft = Font(color="FFBB00")  # color="FFBB00",颜色编码也可以设定颜色

a1.font = ft

d4.font = ft

# If you want to change the color of a

Font, you need to reassign it::

a1.font = Font(name=u'宋体',size=28,bold=True,color=colors.RED,

italic=True) # the

change only affects A1

a1.value = "abc"

# Save the file

wb.save("e:\\test.xlsx")

29. 设置成样式模板再去给单元格应用,但是不支持多个同时设置,需要的话可以通过循环

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.styles import Font

from openpyxl.styles import NamedStyle,

Font, Border, Side,PatternFill

wb = Workbook()

ws = wb.active

highlight =

NamedStyle(name="highlight")

highlight.font = Font(bold=True,

size=20,color= "ff0100")

highlight.fill =

PatternFill("solid", fgColor="DDDDDD")

bd = Side(style='thick', color="000000")  #边框颜色及粗细

highlight.border = Border(left=bd, top=bd,

right=bd, bottom=bd) #边框

上下左右

print dir(ws["A1"])

ws["A1"].style =highlight #设置单元格样式

# Save the file

wb.save("e:\\test.xlsx")

30. 常用的样式和属性设置

# -*- coding: utf-8 -*-

from openpyxl import Workbook

from openpyxl.styles import Font

from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill

from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font

wb = Workbook()

ws = wb.active

ft = Font(name=u'微软雅黑',

size=11,

bold=False,

italic=False,

vertAlign=None,

underline='none',

strike=False,

color='FF000000')

fill = PatternFill(fill_type="solid",

start_color='FFEEFFFF',

end_color='FF001100')

#边框可以选择的值为:'hair', 'medium', 'dashDot', 'dotted', 'mediumDashDot', 'dashed', 'mediumDashed', 'mediumDashDotDot', 'dashDotDot', 'slantDashDot', 'double', 'thick', 'thin']

#diagonal 表示对角线

bd = Border(left=Side(border_style="thin",

color='FF001000'),

right=Side(border_style="thin",

color='FF110000'),

top=Side(border_style="thin",

color='FF110000'),

bottom=Side(border_style="thin",

color='FF110000'),

diagonal=Side(border_style=None,

color='FF000000'),

diagonal_direction=0,

outline=Side(border_style=None,

color='FF000000'),

vertical=Side(border_style=None,

color='FF000000'),

horizontal=Side(border_style=None,

color='FF110000')

)

alignment=Alignment(horizontal='general',

vertical='bottom',

text_rotation=0,

wrap_text=False,

shrink_to_fit=False,

indent=0)

number_format = 'General'

protection = Protection(locked=True,

hidden=False)

ws["B5"].font = ft

ws["B5"].fill =fill

ws["B5"].border = bd

ws["B5"].alignment = alignment

ws["B5"].number_format = number_format

ws["B5"].value ="glory road"

# Save the file

wb.save("e:\\sample.xlsx")

python创建excel文件报错_python-通过openpy操作excel相关推荐

  1. python xlrd读取文件报错_python利用xlrd读取excel文件始终报错原因

    1.代码按照网上百度的格式进行书写如下: 但运行后,始终报错如下: 百度了xlrd网页: 分明支持xls和xlsx两种格式的文件,但运行始终报错. 最后找到原因是因为我所读取的文件虽然是以.xls命名 ...

  2. python调用js文件报错_python - selenium 运行网页中js脚本报错,提示未定义

    问 题 问题1 selenium 运行网易中js脚本报错提示未定义 报错提示如下: driver.execute_script("javascript:amsInit(62800,30315 ...

  3. python xlrd读取文件报错_python中xlrd库如何实现文件读取?

    俗话说得好,技多不压身,虽然我们已经掌握了多种可以实现读取文件的方式,但是丝毫不影响我们要学会精益求精,他说学习文件读取的奥秘,况且,数据分析是十分重要的,一切的代码运行,总归都是要服务于数据,好啦, ...

  4. Python 使用xlrd读Excel文件报错

    Python 使用xlrd读Excel文件报错:XLRDError: Unsupported format, or corrupt file: Expected BOF record; found ' ...

  5. 已解决Python pandas.read_excel读取Excel文件报错

    已解决(Python pandas.read_excel读取Excel文件报错)io = ExcelFile(io,storage_options=storage.options, engine=en ...

  6. python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)

    一.问题: python读取xlsx文件报错,报错信息如下: 为什么会报错?那是因为xlrd 2.0.1 仅支持 .xls 文件. 二.解决方法: 1.确认自己安装的xlrd版本: 可以先用以下命令看 ...

  7. linux系统读取excel文件是否存在,小弟我用poi读excel,在window下没有有关问题,但把程序放到linux上时,读取客户端的excel文件报错,不...

    我用poi读excel,在window下没有问题,但把程序放到linux上时,读取客户端的excel文件报错,不知道如何解决 我用poi读excel,在window下没有问题,但把程序放到linux上 ...

  8. python打开xml文件报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb7 in position 58: illegal multi

    本篇文章主要讲解,python打开xml文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb7 in position 58: ille ...

  9. 已解决(Python读取xml文件报错)xmL.etree.ELementTree.ParseError:not well-formed (invalid token): Line

    已解决(Python读取xml文件报错)xmL.etree.ELementTree.ParseError:not well-formed (invalid token): Line 文章目录 报错信息 ...

最新文章

  1. java用爬虫爬一个页面_使用Java写一个简单爬虫爬取单页面
  2. vb 实现二维数组(矩阵)转置。_笃学不倦|数组的定义
  3. vue 跳转页面传参的时候参数值为undefined的解决方法
  4. java文件没反应_Java实现文件点击没反应的方法
  5. Python基础概念_14_常见术语
  6. 4键键盘(Leetcode651)
  7. Cannot resolve bean 'xxx' less... (Ctrl+F1) Inspection info:Checks autowir
  8. 为什么我只写微头条,粉丝一天就增加700多人?
  9. Python通关之第一关---hello world
  10. mx播放器有没有投屏功能_无线投屏、即插即用,投影仪其实可以更智能:明基 E580T...
  11. html5播放器视频抓取,分享10款最棒的免费HTML5视频播放器
  12. EasyCamera--更简单更灵活的相机应用编写
  13. 在Linux上安装吉大校园客户端
  14. 用python制作表情包图片拼接工具
  15. 2021年 全网最细大数据学习笔记(二):Hadoop 伪分布式安装
  16. 烤鱼界头牌半天妖发文致歉,背后暴露了哪些问题?
  17. python中输出手机话费_用Python生成柱状图、折线图、饼状图来统计自己的手机话费...
  18. CAD二次开发之LISP读取excel数据
  19. 面试容易紧张,有哪些小技巧可以缓解紧张呢?
  20. 深度学习—— caffe下进行微调finetune

热门文章

  1. java判断字符串是否为数字、字母、汉字
  2. 使用爬虫时,怎么分析网页结构
  3. [CentOS8+gitlab-ce本地配置手顺]
  4. 启动print spooler 服务后, 自动停止, 服务不稳定的解决办法
  5. K8s(Kubernetes)架构笔记
  6. ZOJ 3716 Ribbon Gymnastics 解题报告
  7. mysql 根据字段值进行数量统计
  8. linux 隐藏进程 - crux实现
  9. arclinux和其他linux发行版本的比较
  10. 软件测试之计算机基础