码迷,mamicode.com
首页 > 其他好文 > 详细

EXCEL操作大全

时间:2020-03-30 00:17:13      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:范围   自定义   guess   sam   批量操作   第一个   style   查看   now()   

一、安装第三方包

  pip install openpyxl==2.5.4  (注意版本号)

 

二、代码实现

  1)创建一个excel文件,并写入内容

from openpyxl import Workbook
import datetime
import time
import locale
wb = Workbook()    # 创建文件对象-->在内存中新建了一个excel文件(还没有写到磁盘),如果这个文件存在,那么会把文件内容清空
ws = wb.active     # 获取第一个sheet

ws[A1] = 42      # 写入数字
ws[B1] = "测试"+"automation test"  # 写入中文

ws.append([1, 2, 3])    # 写入多个单元格,追加一行写列表内容

ws[A3] = datetime.datetime.now()    # 写入一个当前时间
# 写入一个自定义的时间格式
locale.setlocale(locale.LC_ALL,en)  # 英文格式
locale.setlocale(locale.LC_CTYPE, chinese)  # 中文格式
ws[A4] = time.strftime("%Y年%m月%d日 %H时%M分%S秒", time.localtime())

wb.save("D:\\test.xlsx")  # 保存文件,保存到硬盘

  2)创建sheet

from openpyxl import Workbook
wb = Workbook()

ws = wb.create_sheet("Mysheet1")   # 创建一个sheet,名字叫:Mysheet1
ws1 = wb.create_sheet("Mysheet")   # 创建一个sheet,名字叫:Mysheet
ws1.title = "New Title"     # 设定一个sheet的名字:把ws1的名字改为New Title
ws2 = wb.create_sheet("Mysheet", 0)        # 设定一个sheet的插入位置是0,表示创建一个名字为Mysheet,放在第一个位置
ws2.title = u"测试"    # 设定一个sheet的名字:把ws2的名字改为测试

ws1.sheet_properties.tabColor = "1072BA"   # 设定sheet的标签的背景颜色

# 获取某个sheet对象
print(wb["测试"])
print(wb["New Title"])
# 获取全部sheet 的名字,遍历sheet名字
print(wb.sheetnames)
for sheet_name in wb.sheetnames:
    print(sheet_name)

print("*"*50)

# 遍历获取sheet对象,按照sheet顺序获取
for sheet in wb:
    print(sheet)


for sheet in wb:
    print(sheet.title)

# 复制一个sheet
wb["New Title"]["A1"] = "aaaaa"
source = wb["New Title"]
target = wb.copy_worksheet(source)
# 删除某个sheet
del wb["New Title"]

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

结果:
<Worksheet "测试">
<Worksheet "New Title">
[测试, Sheet, Mysheet1, New Title]
测试
Sheet
Mysheet1
New Title
**************************************************
<Worksheet "测试">
<Worksheet "Sheet">
<Worksheet "Mysheet1">
<Worksheet "New Title">
测试
Sheet
Mysheet1
New Title

  3)操作单元格

from openpyxl import Workbook
wb = Workbook()

ws1 = wb.create_sheet("Mysheet")  # 创建一个sheet

ws1["A1"] = 123.11
ws1["B2"] = "测试"
d = ws1.cell(row=4, column=2, value=10)  # 向指定单元格写内容,行号和列号从1开始,row代表行,column代表列

print(ws1["A1"].value)
print(ws1["B2"].value)
print(d.value)
print(ws1.cell(row=4, column=2).value)  # 行号和列号从1开始,读取指定单元格的内容

wb.save("D:\\a.xlsx")  # 保存到硬盘中

  4)批量操作单元格

from openpyxl import Workbook
wb = Workbook()

ws1 = wb.create_sheet("Mysheet")  # 创建一个sheet

ws1["A1"] = 1
ws1["A2"] = 2
ws1["A3"] = 3

ws1["B1"] = 4
ws1["B2"] = 5
ws1["B3"] = 6

ws1["C1"] = 7
ws1["C2"] = 8
ws1["C3"] = 9

# 操作单列
print(ws1["A"])
for cell in ws1["A"]:
    print(cell.value)

# 操作多列,获取每一个值
print(ws1["A:C"])  # 获取A到C列的对象
for column in ws1["A:C"]:
    for cell in column:
        print(cell.value)

# 操作多行
row_range = ws1[1:3]  # 获取行对象
print(row_range)
for row in row_range:
    for cell in row:
        print(cell.value)

print("*"*50)
for row in ws1.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3):  # 根据范围来读取数据,iter_rows:表示按行读
    for cell in row:
        print(cell.value)

for columns in ws1.iter_cols(min_row=1, min_col=1, max_col=3, max_row=3):  # 根据范围来读取数据,iter_cols:表示按列读
    for cell in columns:
        print(cell.value)

# 获取所有行
print(ws1.rows)
for row in ws1.rows:
    print(row)

print("*"*50)
# 获取所有列
print(ws1.columns)
for col in ws1.columns:
    print(col)

print(ws1.max_row,ws1.max_column)
print(ws1.min_row,ws1.min_column)
# 最大行就是横着,最远的那最后个数据的位置为准
# 最大列是竖着:最远的那最后个数据位置为准

wb.save("D:\\s.xlsx")

# 注意,当为空的时候打印的是None

  5)行对象与列对象

from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook(D:\\sample.xlsx)
ws=wb.active  # 打开默认的sheet,如果是之前保存的是sheet3,那么这里默认打开的也会是对sheet进行操作
rows = []
for row in ws.iter_rows():
            rows.append(row)

print(rows)                 # 所有行
print(rows[0])              # 获取第一行
print(rows[0][0])            # 获取第一行第一列的单元格对象
print(rows[0][0].value)          # 获取第一行第一列的单元格对象的值


print(rows[len(rows)-1])   # 获取最后行
print(rows[len(rows)-1][len(rows[0])-1])       # 获取第后一行和最后一列的单元格对象
print(rows[len(rows)-1][len(rows[0])-1].value)  # 获取第后一行和最后一列的单元格对象的值


===============================================

from openpyxl import load_workbook
wb = load_workbook(e:\\sample.xlsx)
ws = wb.active
cols = []
for col in ws.iter_cols():
    cols.append(col)

print(cols)               # 所有列
print(cols[0])                # 获取第一列
print(cols[0][0])              # 获取第一列的第一行的单元格对象
print(cols[0][0].value)         # 获取第一列的第一行的值

print("*"*30)
print(cols[len(cols)-1])            # 获取最后一列
print(cols[len(cols)-1][len(cols[0])-1])      # 获取最后一列的最后一行的单元格对象
print(cols[len(cols)-1][len(cols[0])-1].value)    # 获取最后一列的最后一行

  6)读取文件内容

from openpyxl import load_workbook
wb = load_workbook(D:\\sample.xlsx)  # 从现有的文件读取内容,不会删除原有内容(默认是读取上一次保存的sheet)
wb.guess_types = False  # 如果为False,那么就是12%,如果是True,代表0.12
ws = wb.active  # 获取默认的sheet进行操作
print(dir(ws))
ws["D1"] = "12%"
print(ws["D1"].value)
wb.save("D:\\s.xlsx")

  7)类型与公式

from openpyxl import load_workbook
import datetime
wb = load_workbook(D:\\sample.xlsx)

ws = wb.active
wb.guess_types = True

ws["A1"] = datetime.datetime(2010, 7, 21)
print(ws["A1"].number_format)  # 查看列的类型

ws["A2"] = "12%"
print(ws["A2"].number_format)  # 查看列的类型

ws["A3"] = 1.1
print(ws["A3"].number_format)  # 查看列的类型

ws["A4"] = "中国"
print(ws["A4"].number_format)  # 查看列的类型
wb.save("D:\\sample.xlsx")
# 执行结果:
# yyyy-mm-dd h:mm:ss
# 0%
# General
# General
# 如果是常规,显示general,如果是数字,显示‘0.00_ ‘,如果是百分数显示0%

=====================================


from openpyxl import load_workbook

wb = load_workbook(D:\\sample.xlsx)

ws1=wb.active

ws1["A1"] = 1
ws1["A2"] = 2
ws1["A3"] = 3

ws1["A4"] = "=SUM(1, 1)"  # 求和
ws1["A5"] = "=SUM(A1:A3)"

print(ws1["A4"].value)  # 打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值
print(ws1["A5"].value)  # 打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值

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

# 结果:
# =SUM(1, 1)
# =SUM(A1:A3)

 

EXCEL操作大全

标签:范围   自定义   guess   sam   批量操作   第一个   style   查看   now()   

原文地址:https://www.cnblogs.com/su-sir/p/12595936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!