Python 与 Office 办公软件专栏目录
- 前言:
- Python 与 Excel
- 文章一:用 xlwt 将数据写入Excel文件简介
- 文章二:xlwt 工作表对象常用设置
- 文章三:xlwt 设置表内单元格格式
- 文章四:xlwt 自写方法,实现按行写入多组数据功能
- 文章五:xlrd 读取 Excel 表格数据方法
- 文章六:xlrd 获取Excel表格内格式信息
- 文章七:实例(一)给表格增加序号,根据表格已有内容增加索引
- 文章八:实例(二)多表整合、数据汇总及统计
- 文章九:实例(三)分析2020年江苏省事业单位招聘岗位信息
- 文章十:实例(四)对表格内数据进行去重、分类,异常处理及分析
- Python 与 word
- 文章十一:docx 创建 Word文档基础
- 文章十二:docx 设置页面大小,字体格式等
- 文章十三:docx 读取Word文档信息
- 文章十四:实例(五)批量生成 Word 文档
- 结尾:
前言:
本篇博客为【 Python 与 Office 】 专栏的目录,该专栏共 14 篇文章。包含了 Python 操作 office常用办软件 Excel 与 Word 的基本方法介绍,和用 Python 处理 Excel Word 文档的几个实例。
个人认为本专栏还是比较全面与详细的,当然介于个人知识储备与能力,疏忽与错误之处可能也不少,望各位读者多多指正与包含。以下是本专栏的具体介绍:
Python 与 Excel
本专栏介绍的 Python 操作 Excel 模块为 xlwt 与 xlrd 模块:
xlwt 模块是将数据写入Excel文件的 Python 第三方模块。
文章一:用 xlwt 将数据写入Excel文件简介
文章链接:xlwt 操作 excel 表格基础
文章主要内容:
该文章介绍了用 Python 建立新工作薄与工作表的基础方法:
# 导入模块
import xlwt
# 新建工作簿
work_book = xlwt.Workbook()
# 增加sheet表
work_sheet = work_book.add_sheet('Test')
# 单元格操作
work_sheet.write(0,0,'Hello Word')
# 将列表数据写入一个单元格
test_list = [str(i) for i in range(5)]
work_sheet.write_rich_text(1,0,test_list)
# 合并单元格
work_sheet.merge(2,3,0,3)
# 合并单元格并写入
work_sheet.write_merge(4,4,0,3,'合并单元格数据')
# 插入位图
work_sheet.insert_bitmap('01.bmp',5,0)
work_sheet.insert_bitmap('01.bmp',5,8,x=50,y=50,scale_x=0.5,scale_y=0.5)
# 保存文件
work_book.save('Test.xls')
也简单的介绍了表内单元格的一些简单操作,如:插入数据,合并单元格,插入位图等。
# 导入模块
import xlwt
# 新建工作簿
work_book = xlwt.Workbook()
# 增加sheet表
work_sheet = work_book.add_sheet('Test')
# 单元格操作
work_sheet.write(0,0,'Hello Word')
# 将列表数据写入一个单元格
test_list = [str(i) for i in range(5)]
work_sheet.write_rich_text(1,0,test_list)
# 合并单元格
work_sheet.merge(2,3,0,3)
# 合并单元格并写入
work_sheet.write_merge(4,4,0,3,'合并单元格数据')
# 插入位图
work_sheet.insert_bitmap('01.bmp',5,0)
work_sheet.insert_bitmap('01.bmp',5,8,x=50,y=50,scale_x=0.5,scale_y=0.5)
# 保存文件
work_book.save('Test.xls')
文章二:xlwt 工作表对象常用设置
文章链接:冻结窗口、设置加密保护、打印设置等
该文章主要内容有:
- 设置冻结窗口;
- 表格的常用显示设置;
- 设置文档保护及密码;
- 表格打印设置详解。
部分内容摘抄:
设置冻结窗口:
# 导入模块
import xlwt
work_book = xlwt.Workbook()
work_sheet = work_book.add_sheet('Test')
w2 = work_book.add_sheet('T2')
z = [[r,c] for r in range(20) for c in range(20)]
[l.append(str(i)) for i,l in enumerate(z)]
for info in z:
work_sheet.write(info[0],info[1],info[2])
w2.write(info[0],info[1],info[2])
# 设置冻结窗口
# 设置冻结为真
work_sheet.set_panes_frozen('1')
# 水平冻结
work_sheet.set_horz_split_pos(2)
# 垂直冻结
work_sheet.set_vert_split_pos(1)
# 保存文件
work_book.save('Test2.xls')
打印区域设置效果预览:
文章三:xlwt 设置表内单元格格式
文章链接:单元格格式、字体格式、对齐方式、边框及填充等
该文章主要内容有:
- 单元格数据类型;
- 字体设置;
- 对齐方式;
- 边框设置;
- 填充设置;
- 单元格保护。
部分内容摘抄:
字体设置:
# 导入模块
import xlwt
work_book = xlwt.Workbook()
work_sheet = work_book.add_sheet('Test')
w2 = work_book.add_sheet('T2')
# 创建数据
z = [[r,c] for r in range(20) for c in range(20)]
[l.append(str(i)) for i,l in enumerate(z)]
# 建立样式
my_style_1 = xlwt.XFStyle()
# 建立单元格数据类型,数值类型,默认为:'General'
my_style_1.num_format_str = '0'
# 建立字体
font = my_style_1.font
# 设置字体名称
font.name = 'Times New Roman '
# 设置字体高度
font.height = 400
# 设置斜体
font.italic = True
# 设置删除线
font.struck_out = True
# 设置轮廓
font.outline = True
# 设置阴影
font.shadow = True
# 设置字体颜色、蓝色
font.colour_index = 0x0C
# 设置加粗
font.bold = True
# 设置字体上下标、上标
# font.escapement = 1
# 设置下划线、双层下划线
font.underline = 2
# 设置字符集、GBK
font.charset = 0x86
# 写入数据、Test sheet对象以自定义格式写入,T2 sheet对象以默认格式写入
for info in z:
# 写入数据,并对单元格设置格式
work_sheet.write(info[0],info[1],info[2],my_style_1)
w2.write(info[0],info[1],info[2])
# 保存文件
work_book.save('Test3.xls')
效果预览:
文章四:xlwt 自写方法,实现按行写入多组数据功能
文章链接:按行按列写入、自定义格式方法、自动调整列宽等
该文章主要内容为:
以面向对象的思想,以 xlwt 模块为基础,创建新类。实现:
- 按行写入、按列写入多组数据;
- 创建格式方法;
- 设置行高列宽方法;
- 根据单元格内容调整行高列宽方法。
部分内容摘抄:
按行写入方法:
class My_xlwt(object):
def __init__(self,sheet_name = 'sheet_1',re_write = True):
''' 自定义类说明: :param sheet_name:默认sheet表对象名称,默认值为 'sheet_1' :param re_write: 单元格重写写功能默认开启 '''
self.work_book = xlwt.Workbook()
self.sheet = self.work_book.add_sheet(sheet_name,
cell_overwrite_ok=re_write)
self.col_data = {}
def write(self,row,col,label,style = Style.default_style):
''' 在默认sheet表对象一个单元格内写入数据 :param row: 写入行 :param col: 写入列 :param label: 写入数据 '''
self.sheet.write(row,col,label,style)
# 将列数据加入到col_data字典中
if col not in self.col_data.keys():
self.col_data[col] = []
self.col_data[col].append(label)
else:
self.col_data[col].append(label)
def write_row(self,start_row,start_col,date_list,
style = Style.default_style):
''' 按行写入一行数据 :param start_row:写入行序号 :param start_col: 写入列序号 :param date_list: 写入数据:列表 :return: 返回行对象 '''
for col,label in enumerate(date_list):
self.write(start_row,start_col+col,label,style)
return self.sheet.row(start_row)
def write_rows(self,start_row,start_col,data_lists,
style = Style.default_style):
''' 按行写入多组数据 :param start_row: 开始写入行序号 :param start_col: 写入列序号 :param data_lists: 列表嵌套列表数据 :return: 返回写入行对象列表 '''
row_obj = []
for row_,data in enumerate(data_lists):
if isinstance(data,list):
self.write_row(start_row+row_,start_col,data,style)
row_obj.append(self.sheet.row(start_row+row_))
else:
msg = '数据列表不是嵌套列表数据,而是%s' % type(data)
raise Exception(msg)
return row_obj
def save(self,file_name):
self.work_book.save(file_name)
测试:
if __name__ == '__main__':
# 实例化自写类
test = My_xlwt()
h_s = test.diy_style('Times New Roman',20)
s2 = test.diy_style('Times New Roman',10,False,1)
l1 = list(range(10))
l2 = ['数据%s'% i for i in range(10)]
# 在0行0列写入一行数据
test.write_row(0,0,l1)
# 在1行1列写入一行数据
test.write_row(1,1,l2)
# 保存文件
test.save('my_test.xls')
测试预览:
文章五:xlrd 读取 Excel 表格数据方法
文章链接:按行、按列读取Excel数据内容
该文章主要内容为:
- 获取工作簿、sheet表对象;
- 获取sheet表中行对象,列对象;
- 获取sheet表中所有数据;
- 获取工作簿对象所有sheet表数据。
部分内容摘抄:
按行读取Excel文件数据:
# 导入模块
import xlrd
# 打开文件方式1:
work_book = xlrd.open_workbook('test01.xls')
# 方式2:
w2 = xlrd.book.open_workbook_xls('表02.xls')
# 获取工作簿中所有sheet表对象
sheets = work_book.sheets()
print(sheets)
sheet_1 = work_book.sheet_by_index(0)
# 按行读取
data_row = []
for row in range(sheet_1.nrows):
data_row.append(sheet_1.row_values(row))
print(data_row)
# ------运行结果------
# [['日期', '访问量'], [43974.0, 17.0], [43975.0, 36.0],
# [43976.0, 22.0], [43977.0, 20.0], [43978.0, 18.0],
# [43979.0, 223.0], [43980.0, 1187.0], [43981.0, 854.0],
# [43982.0, 119.0], [43983.0, 164.0], [43984.0, 123.0],
# [43985.0, 32.0], [43986.0, 336.0], [43987.0, 277.0],
# [43988.0, 14.0], [43989.0, 57.0], [43990.0, 18.0],
# [43991.0, 12.0], [43992.0, 67.0], [43993.0, 532.0],
# [43994.0, 1120.0], [43995.0, 621.0], [43996.0, 53.0],
# [43997.0, 22.0], [43998.0, 51.0], [43999.0, 511.0],
# [44000.0, 774.0], [44001.0, 850.0]]
# ------运行结果------
文章六:xlrd 获取Excel表格内格式信息
文章链接:获取单元格内超链接信息、格式信息、字体格式信息等
该文章主要内容为:
- 获取单元格内超文本信息、合并单元格信息等;
- 获取单元格格式信息;
- 获取字体格式信息;
- 获取行、列格式信息。
部分内容摘抄:
获取单元格内超文本信息:
# 导入模块
import xlrd
# 获取工作簿对象
work_book = xlrd.open_workbook('test02.xls',formatting_info = True)
# 按索引获取sheet对象
sheet_1 = work_book.sheet_by_index(0)
# 获取sheet表内超链接文本对象
print(sheet_1.hyperlink_list)
# ------运行结果------
# [<xlrd.sheet.Hyperlink object at 0x0000019B5A064358>]
# ------运行结果------
# 获取sheet表内超链接对象单元格位置、对象
print(sheet_1.hyperlink_map)
# ------运行结果------
# {(11, 2): <xlrd.sheet.Hyperlink object at 0x000001E5824B4EF0>}
# ------运行结果------
# 获取超链接文件url信息
hyperlink_obj = sheet_1.hyperlink_list[0]
print(hyperlink_obj.url_or_path)
# ------运行结果------
# https://www.sogou.com/
# ------运行结果------
一种简单的按行读取sheet表内所有数据方法:
# 简单按行获取sheet表对象所有值
print(sheet_1._cell_values)
# ------运行结果------
# [['', '', '', '', '', ''], ['', 'CSDN 博客数据', '', '', '', ''],
# ['', '日期', '访问量', '评论数', '收藏数', '粉丝数'], ['', 43974.0, 17.0, 0.0, 0.0, 0.0],
# ['', 43975.0, 36.0, 0.0, 0.0, 0.0], ['', 43976.0, 22.0, 0.0, 0.0, 0.0],
# ['', 43977.0, 20.0, 0.0, 0.0, 0.0], ['', 43978.0, 18.0, 0.0, 0.0, 0.0],
# ['', 43979.0, 223.0, 0.0, 0.0, 0.0], ['', 43980.0, 1187.0, 0.0, 0.0, 0.0],
# ['', 43981.0, 854.0, 0.0, 0.0, 1.0], ['', '总计:', 2377.0, 0.0, 0.0, 1.0],
# ['', '数据来源:', 'https://www.sogou.com/', '', '', '']]
# ------运行结果------
获取单元格背景颜色格式信息:
background = cell_xf.background
# 有三个属性:fill_pattern,background_colour_index,pattern_colour_index
print(background.fill_pattern,
',',background.background_colour_index,
',',background.pattern_colour_index)
# ------运行结果------
# 1 , 64 , 13
# ------运行结果------
文章七:实例(一)给表格增加序号,根据表格已有内容增加索引
文章链接:给表格增加序号,根据表格已有内容增加索引
该文章主要内容为: 对已有的Excel表格增加序号,根据已有数据内容增加索引。
部分内容摘抄:
import xlrd
import xlwt
# 读取表格内容,按行读取
# 打开需读取的Excel文件
read_work = xlrd.open_workbook('sample.xls')
# 获取sheet对象
read_sheet = read_work.sheet_by_index(0)
# 按行读取sheet表全部数据
read_data = read_sheet._cell_values
# 创建自定义FID列数据
def create_fid(data):
for i,ds in enumerate(data):
if i >= 999:
ds[0] = 'KH' + str(i+1)
elif 99 <= i < 999:
ds[0] = 'KH0' + str(i+1)
elif 9 <= i < 99:
ds[0] = 'KH00' + str(i+1)
else:
ds[0] = 'KH000' + str(i+1)
return data
new_data = create_fid(read_data[1:])
new_data.insert(0,read_data[0])
# 将新建数据写入Excel表格
# 创建新的Excel表
new_work = xlwt.Workbook()
# 创建新的sheet表
new_sheet = new_work.add_sheet('Sheet1')
# 按行写入数据,按行写入
for row,ds in enumerate(new_data):
for col,d in enumerate(ds):
new_sheet.write(row,col,d)
# 保存文件
new_work.save('new_sample.xls')
文件预览:
文章八:实例(二)多表整合、数据汇总及统计
文章链接:处理校运会报名 Excel 表格,多表整合、数据汇总及统计
该文章主要内容:
假设:需完成一份大学校运会的报名工作,将已做好报名表下发到各个报名单位。他们按格式填好报名表、上交,最后由你负责信息汇总和统计。
全部代码在文章中已分享,此处不再贴代码!
单个报名表截图:
处理后文件截图:
文章九:实例(三)分析2020年江苏省事业单位招聘岗位信息
文章链接:统计、分析2020年江苏省事业单位招聘岗位 Excel 表格
该文章主要内容为:
- 对2020年江苏省发布的事业单位招聘信息 Excel 表进行分析,主要分析内容有: 数据读取:获取表格数据,并对数据进行整理;
- 基础统计:A: 总招聘岗位数,总招聘人数,岗位最大、最小招聘人数;B: 岗位招聘人数分布情况:即招聘人数为1、2…的单位个数;C:招聘对象为社会人员、应届毕业生、不限的各自数量,及所占比例。
- 按条件查找分析数据:A:专业为计算机相关专业,招聘对象为应届毕业生的所有招聘信息;B:统计条件下招聘的岗位数,招聘人数,及两者在全部招聘信息中所占比例;C: 统计条件下学历要求情况:中专,大专,本科,硕士,博士 招聘岗位数,招聘人数、占比。
- 综合分析:A:统计各主管部门招聘人数,占总招聘人数比例;B: 分析最大、最小招聘人数的部门是哪个;C: 分析每个主管部门招聘对象为:社会人员、应届毕业生、不限 的人数,及其内部比例。
- 保存数据: 将上面分析数据写入新建的Excel表格,方便阅读。
基础分析报表截图:
综合分析报表截图:
文章十:实例(四)对表格内数据进行去重、分类,异常处理及分析
文章链接:对 Excel 表格内数据进行去重、分类,异常处理及分析
该文章主要内容为: 对一份有很多数据的 Excel 表格,进行数据去重,分类,对有异常的数据进行处理和分析。
原示例数据截图:
异常标记效果图:
按分类三分类计算的商场价与店铺价差价最大的标记效果图:
Python 与 word
本专栏介绍的 Python 操作 Word 文档模块为 docx 模块。
文章十一:docx 创建 Word文档基础
文章链接:创建文档、段落格式、字体格式设置方法
该文章主要内容为:
- 创建文档与基础操作;
- 文档段落格式设置;
- 字体格式设置。
部分内容摘抄:
创建 Word 文档及基础用法
# 导入模块
from docx import Document
doc = Document() # 新建文档对象
'''按模板新建 word 文档文件,具有模板文件的所有格式'''
# 增加标题:
doc.add_heading('标题',1)
# 段落正文
par = doc.add_paragraph('第一个段落:')
# 在段落中添加文字
run_ = par.add_run('段落文字')
# 增加图片
pic_par = doc.add_picture('1.png')
# 增加表格
table = doc.add_table(2,3)
# 保存文件
doc.save('test.docx')
文件预览:
文章十二:docx 设置页面大小,字体格式等
文章链接:插入图片、表格,设置表格样式,章节,页眉页脚等
该文章主要内容有:
- 插入图片、设置图片大小;
- 插入表格、设置表格样式、字体样式;
- 章节设置:页面大小、边距等;
- 设置页眉页脚。
部分内容摘抄:
# 导入模块
from docx import Document
# 此模块中包含 docx 中各类单位方法
from docx import shared
doc = Document()
doc.add_heading('python-docx 基础讲解(二)')
# 在文档中增加表格,并添加文字
table1 = doc.add_table(2,3) # 添加一个2行3列的表格,表格样式为None
"add_table(self, rows, cols, style=None):"
table1.cell(0,0).text = '0' # 给表格单元格赋值
# 对单元格对象设置文字
for i,cell in enumerate(table1._cells):
cell.text = str(i)
# 为表格设置统一样式:
table1.style = 'Table Grid'
# 保存文件
doc.save('test2.docx')
表格截图:
设置表格内单元格格式:
cell_par = cell_new.paragraphs[0] # 获取到对象
# 设置对齐方式
from docx.enum.text import WD_ALIGN_PARAGRAPH
cell_par.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 获取 run 对象
cell_run = cell_new.paragraphs[0].runs[0]
# 设置字体
cell_run.font.name = 'Times New Roman'
from docx.oxml.ns import qn
cell_run.font.element.rPr.rFonts.set(qn('w:eastAsia'),'楷体')
# 设置字体颜色
from docx.shared import RGBColor
cell_run.font.color.rgb = RGBColor(255,55,55) # 红色
表格截图:
文章十三:docx 读取Word文档信息
文章链接:读取正文、表格文本信息、段落格式、字体格式等
该文章主要内容有:
- 获取文档的章节信息;
- 获取段落文本信息;
- 获取表格内文本信息;
- 获取文档内格式信息。
部分内容摘抄:
获取已存在的Word文档并读取信息:
from docx import Document
# Document 类,不仅可以新建word文档,也可以打开一个本地文档
doc = Document('test03.docx') # 想获取的文档文件名,这里是相对路径。
"获取文档所有段落信息:"
# 获取文档所有段落对象
paragraphs = doc.paragraphs
print(paragraphs)
print(len(paragraphs)) # 打印结果:20
# 获取一个段落对象的文字信息
par0 = paragraphs[0]
print(par0)
par0_string = par0.text
print(par0_string)
# 获取所有段落文字信息
pars_string = [par.text for par in paragraphs]
print(pars_string)
par0_string 打印截图:
文章十四:实例(五)批量生成 Word 文档
文章链接:实现批量生成 Word 文档:市民水电费缴费通知单
该文章主要内容: 对已有的 Word 模板文档和数据进行修改,按需求生成多个文档。
文档模板截图:
数据截图:
生成的Word文件:
具体内容截图:
结尾:
以上就是本专栏的全部文章目录,文章内摘抄内容可能因代码不全而会有运行问题,具体代码还请移步文章内查看。
感兴趣的朋友,可以点个 关注 或 收藏 。如在博客中遇到任何问题或有一些想法、需求,可留言或私信。
创作不易,你的支持是我最大的动力,感谢 !