【Python】Python 操作 Excel 模块大全

xlrd


安装

pip install xlrd

日常 Demo

xlrd用来读取Excel,日常使用的简单 Demo,用下面这个例子就完全够用了;

import xlrd

filename = "test.xls"               #文件路径
workbook = xlrd.open_workbook(filename)   # 加载这个xls文件
sheet = workbook.sheet_by_index(0)           # 根据索引选择表格

rows = sh.nrows                     # 获取该表格所有行数

for i in range(1,rows):             # 从第二行开始按行读取
    title = sheet.cell(i,0).value      # 取第i+1行,第1列的数据
    ctype = sheet.cell(i,0).ctype      # 取第i+1行,第1列的数据类型
获取时间类型

上面的 Demo,有一行是 sh.cell(i,0).ctype,这个是获取表格内值的类型,ctype 的 数字和类型的对应关系为:

  • 0 empty
  • 1 string
  • 2 number
  • 3 date
  • 4 boolean
  • 5 error

一般情况都是 1,当值为3,也就是为日期类型时,需要经过进一步解析:

from xlrd import xldate_as_tuple

cell =  sheet.cell(i,10)
if cell.ctype == 3:
    date = xldate_as_tuple(sheet.cell(i,3).value,0)
    pubtime = datetime.datetime(*date)
更多功能

1、获取第i+1行的所有数据组成的list

sh.row(i)

2、获取第rowx+1行的某几列的数据并组成list

sh.row_values(rowx, start_colx=0, end_colx=None)

3、获取该表格所有行数

ncols = sh.nrows

4、获取该表格所有列数

ncols = sh.ncols

5、获取 所有 sheet 的 名称

workbook.sheet_names()

6、根据 sheet 的名称获取 sheet

workbook.sheet_by_name(sheet_name=“表1”)

根据表头名称获取 第几列 的函数
def get_col_index(name,workbook,sheet):
    for i in range(sheet.ncols):
        name2 = sheet.cell(0,i).value
        print(name2)
        if name2 == name:
            return i
    return -1
    
value = sh.cell(1,get_col_index("创建时间")).value

xlwt


安装

pip install xlwt

日常 Demo

xlwt 用来写excel,日常使用,如下 Demo 足够;

import xlwt

file = xlwt.Workbook()      #新建个文件
sheet = file.add_sheet('sheet_name',cell_overwrite_ok=True)  #新建个表格,指定表名以及是否可覆盖写

sheet.write(i,j,value)     #在第i+1行和第j+1列写value(i、j从0开始)

file.save("test_xls.xls")   #保存成xls文件并指定文件名
更多功能

1、设置某列的宽度

sheet.col(0).width = 200

2、写日期

style = xlwt.XFStyle()
style.num_format_str = ‘D-MMM-YY’
worksheet.write(0, 0, datetime.datetime.now(), style)

3、写公式
sheet.write(1, 1, xlwt.Formula(‘SUM(A1,B1)’))

4、合并单元格的写

sheet.write_merge(0, 0, 0, 3, ‘First Merge’)

write_merge(x, x + h, y, w + y, value, sytle) x和y表示当前行列,h和w为要合并的行数和列数

5、 修改字体、字号、颜色、样式:

style = xlwt.XFStyle()
font = xlwt.Font()              # 为样式创建字体
font.name = 'Times New Roman'   # 字体名称
font.bold = True                # 黑体
font.colour_index = 2           # 修改字的颜色
font.underline = True           # 下划线
style.font = font               # 使用到样式中

sheet.write(0,1,"编号",style)

6、修改单元格背景颜色

style = xlwt.XFStyle()
pattern = xlwt.Pattern() 

pattern.pattern = xlwt.Pattern.SOLID_PATTERN 
pattern.pattern_fore_colour = 5 #色号,可以在源代码中看到色号和颜色的对应关系
style.pattern = pattern

sheet.write(0,2,"编号",style)
字符限制

xlwt 模块 有一个缺陷,只能写 小于 32767 个字符的excel,否则在 生成excel文件时会报错:

Exception: String longer than 32767 characters

xlsxwriter 模块 可以解决这个问题。

openpyxl 也可以。。。

xlsxwriter


安装

pip install xlsxwriter

日常 Demo
import xlsxwriter


workbook = xlsxwriter.Workbook("excel_name.xls") # 建立文件

sheet = workbook.add_worksheet()

sheet.write(i,j,value)     #在第i+1行和第j+1列写value(i、j从0开始)

workbook.close()

xlutils


安装
pip install xlutils
日常 Demo
import xlrd 
import pymysql
from xlrd import open_workbook
from xlutils.copy import copy
import xlwt

file_name = "test_update.xls"
workbook = xlrd.open_workbook(file_name) 
sheet = wb.sheet_by_index(0)
workbook_update = copy(workbook)  # 复制workbook
sheet_update = workbook_update.get_sheet(0)

sheet_update.write(i,j,value)

workbook_update.save(file_name)

openpyxl


这个模块可以解决 xlwt 和 xlutils 对表字符数量的限制;

修改 excel 的 Demo
# # coding = utf-8


import openpyxl
from urllib.parse import urlparse

filename = "链接.xlsx"
workbook = openpyxl.load_workbook(filename)
worksheet = workbook.worksheets[0]
# worksheet = workbook.active
# 在第一列之前插入一列
#worksheet.insert_cols(15)  #
print(worksheet.max_row)
print(worksheet.max_column)
for i in range(1,worksheet.max_row):
	#print(row[2].value)
	url = worksheet.cell(row=i, column=2).value
	print(url)
	if not url or  "http" not in url:
		continue
# 	print(url)
	url = url[:url.find("?")] if "?" in url else url
	domain_name = urlparse(url).netloc
	print(domain_name)
	worksheet.cell(row=i, column=3).value = domain_name
# # 枚举出来是tuple类型,从0开始计数
#
file_name = filename[:filename.find(".")] + "_结果.xlsx"
workbook.save(file_name)

xls 转 xlsx

python -m pip install pypiwin32

import win32com.client

excel = win32com.client.DispatchEx('Excel.Application')
wb = self.excel.Workbooks.Open(src_path)
dest_path = src_path + "x"
wb.SaveAs(dest_path, FileFormat=51)  # FileFormat = 51 is for .xlsx extension
wb.Close()  # FileFormat = 56 is for .xls extension
excel.Application.Quit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值