龙龙博客:https://www.cnblogs.com/meilong/p/cao-zuoexcel-mo-kuaiopenpyxl.html

1 安装

pip install openpyxl
如果装不上,请指定安装源来安装
pip install -i https://pypi.douban.com/simple openpyxl
如果excel里面有图片(jpeg, png, bmp,…),需要安装图片处理模块
pip install pillow

2 excel的写

from openpyxl import Workbook
# 实例化对象
wb = Workbook()
# 创建工作簿,名字是上海,如果只写一个上海默认添加在最后一个工作簿中
wb1 = wb.create_sheet('上海')
# 创建工作簿,工作簿在第一个位置
wb2 = wb.create_sheet('广东',0)
# 获取当前工作中的工作簿
awb = wb.active
# 给工作不改名字
awb.title = "guangdong" # excel写数据,可以写表格的函数
# 向guangdong 的工作能力簿中写数据
# 向单元格中写数据
awb['A4'] = '广东美食' # 向第3行第4列的单元格中写数据
awb.cell(row=3,column=4,value="广东人吃福建人") # 追加写入整行数据
awb.append(['虾饺','凤爪','烧鹅']) # 可以循环的写入文件
for i in range(10):
awb.append([1,2,3,4]) # 写表格的函数:
awb['A16']="=SUM(A6:A15)" # 保存文件
wb.save('城市.xlsx')

excel读数据

# 读文件
from openpyxl import load_workbook
# 实例化对象
wb = load_workbook('城市.xlsx',read_only=False,data_only=True)
# 获取所有工作簿的名字
# print(wb.sheetnames)
# 获取工作薄对象
wb1 = wb['guangdong'] # 如果单元格中有内容,但读出来是None,需要将文件打开手动保存一下,在读取,
# 在读取函数的单元格的时候,需要将data_only=True
a4= wb1["A4"].value
# None
a5 = wb1.cell(row=5,column=1).value
# 获取所有的行的数据,是一个生成器generator
row = wb1.rows
for r in row:
# r是每行的数据的对象,是元组的形式
print()
for l in r:
# l 是每个单元格的数据
print(l.value,end='\t') # 获取所有的列,是一个生成器
col = wb1.columns
for c in col:
print()
for i in c:
print(i.value,end='\t') # 共有多少行数据
print(wb1.max_row)
# 共有多少列数据
print(wb1.max_column)

在读表的时候需要注意的:

  

获取行和列

sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
sheet.columns类似,不过里面是每个tuple是每一列的单元格。读列的时候需要将read_only=False,或者不写,默认是False

在获取行或者列的时候,不能使用索引来取特定行的数据,因为sheel.rows是一个生成器,不过可以将生成器强转成列表,list(sheet.rows)[2] 这样就能取到第3行的数据了

在读有表格函数的表时:

读取的时候需要加上data_only=True这样读到B9返回的就是数字,如果不加这个参数,返回的将是公式本身'=AVERAGE(B2:B8)'

设置单元格风格--Style

先导入需要的类from openpyxl.styles import Font, colors, Alignment

分别可指定字体相关,颜色,和对齐方式。

字体:

bold_itatic_24_font = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)

sheet['A1'].font = bold_itatic_24_font

对齐方式:

也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数

# 设置B1中的数据垂直居中和水平居中
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

设置行高和列宽
有时候数据太长显示不完,就需要拉长拉高单元格。

# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列宽
sheet.column_dimensions['C'].width = 30

合并和拆分单元格

所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。

# 合并单元格, 往左上角写入数据即可
sheet.merge_cells('B1:G1') # 合并一行中的几个单元格
sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格

合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
以下是拆分单元格的代码。拆分后,值回到A1位置。

sheet.unmerge_cells('A1:C3')

通过excel表格的内容,向mysql数据库中导入数据:

import pymysql
from openpyxl import load_workbook db = pymysql.connect('127.0.0.1','root','123','web')
cursor = db.cursor() insert_sql = '''insert into student values(%s,%s)'''
wd = load_workbook('学生.xlsx')
s = wd['学生']
rows = s.max_row
columns = s.max_column
data=[] for rx in range(1,rows+1):
for cx in range(1,columns+1):
data.append(str(s.cell(row=rx, column=cx).value)) cursor.execute(insert_sql,(data[0],data[1]))
data=[]
db.commit()

在做表操作的时候可能遇到错误:

1 文件在打开的状态,操作文件报的错误

save_workbook
archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True)
File "C:\Python36\lib\zipfile.py", line 1113, in __init__
self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: '城市.xlsx'

2 在读取列的数据时,需要将read_only=False 或者不写默认是False,

File "G:/python/exel/readfile.py", line 23, in <module>
col = wb1.columns
AttributeError: 'ReadOnlyWorksheet' object has no attribute 'columns'

excle 写入数据库的更多相关文章

  1. SSM上传EXCLE到数据库 和 从数据库导出为EXCLE

    SSM上传EXCLE到数据库 和 从数据库导出为EXCLE package com.ABC.controller; import java.io.BufferedInputStream; import ...

  2. logback日志写入数据库(mysql)配置

    如题  建议将日志级别设置为ERROR.这样可以避免存储过多的数据到数据中. 1  logback 配置文件(如下) <?xml version="1.0" encoding ...

  3. Excel 导入到Datatable 中,再使用常规方法写入数据库

    首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎.名字为AccessDatabaseEngine.exe.这里不过多介绍了哦.它的数据库 ...

  4. DataTable数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename); ...

  5. 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

      先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...

  6. SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable

    MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...

  7. jxl读取excel实现导入excel写入数据库

    @RequestMapping(params = "method=import", method = RequestMethod.POST) @ResponseBody publi ...

  8. 将RichTextBox的内容直接写入数据库:

    将RichTextBox的内容直接写入数据库: private void button1_Click(object sender, EventArgs e) {    System.IO.Memory ...

  9. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

随机推荐

  1. Keras mlp 手写数字识别示例

    #基于mnist数据集的手写数字识别 #构造了三层全连接层组成的多层感知机,最后一层为输出层 #基于Keras 2.1.1 Tensorflow 1.4.0 代码: import keras from ...

  2. Python爬虫之Beautifulsoup模块的使用

    一 Beautifulsoup模块介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...

  3. context:component-scan 和 mvc:annotation-driven

    前言 Spring MVC 框架提供了几种不同的配置元素来帮助和指示 Spring 容器管理以及注入 bean . 常用的几个 XML 配置是 context:component-scan mvc:a ...

  4. 洛谷$P4045\ [JSOI2009]$密码 $dp$+$AC$自动机

    正解:$dp$+$AC$自动机+搜索 解题报告: 传送门$QwQ$ 首先显然先建个$AC$自动机,然后考虑设$f_{i,j,k}$表示长度为$i$,现在在$AC$自动机的第$j$个位置,已经表示出来的 ...

  5. bootstrap:按钮下拉菜单

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  6. 一起来立Flag吧!超炫的数据图表分析 2020 年 Java 技术趋势

    引言 2020 来了,第一批 00 后已经 20 岁了,95 后也到了晚婚的年龄,员外的头发也越来越少了,新的一年大家有立下了哪些 Flag ?小伙伴们别急着立 Flag,让员外帮你分析一下哪些技术正 ...

  7. 移动web 1像素边框

    实现方法 border-image 图片 实现 这篇文章是腾讯github上的解决方案border-image来实现的 链接走起 <使用border-image实现类似iOS7的1px底边> ...

  8. 【转】[ppurl]从”皮皮书屋”下载电子书的姿势

    转:http://blog.csdn.net/hcbbt/article/details/42072545 写在前面的扯皮 为什么标题的”皮皮书屋”加上了引号,因为皮皮书屋(http://www.pp ...

  9. java反射-- Field 用法实践

    java 反射是一种常用的技术手段, 通过加载类的字节码的方式来获取相关类的一些信息 比如成员变量, 成员方法等. Field 是什么呢? field 是一个类, 位于java.lang.reflec ...

  10. iOS多线程编程原理及实践

    摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无 ...