Python理论 —— excel、word、txt 数据读写

1. Excel


from tkinter import Tk
from time import sleep
from tkinter.messagebox import showwarning # 用于弹出窗口
import win32com.client as win32 # 安装模块 pypiwin32

warn=lambda app:showwarning(app,'即将退出进程')
Range=range(3,8)

def excel():
    app='Excel'
    xl=win32.gencache.EnsureDispatch('%s.Application'%app) # 调度 excel 进程
    ss=xl.Workbooks.Add() # 添加一个工作表
    sh=ss.ActiveSheet # 获取一个活动的工作表
    xl.Visible=True # 显示电子表格
    sleep(1)
    sh.Cells(1,1).Value='python -to-%s Demo'%app # 在(1,1)(行,列)即 A1 写入内容
    sleep(1)
    for i in Range: # 循环在(i行,1列)中写入内容
        sh.Cells(i,1).Value='Line %d'%i
        sleep(1)
    sh.Cells(i+2,1).Value="Th-th-th-that's all folks!"
    warn(app) # 弹出退出警告框
    ss.Close(False) # 不保存并关闭应用
    xl.Application.Quit() # 退出应用

if __name__=='__main__':
    Tk().withdraw() # 使用 withdraw() 方法不让 tk 顶级窗口出现
    # 如果没有事先初始化顶级窗口,那么 Tk 会为你自动创建一个,而且不会将其隐藏,这样会在你的屏幕上造成一定的干扰。
    excel()

1.1 openpyxl 模块

  1. openpyxl 模块只支持【.xlsx / .xlsm / .xltx / .xltm】格式的文件
  2. openpyxl 模块官网

注:一个excel文件叫一个工作簿,工作簿内的每个Sheet 叫工作表;
在这里插入图片描述

1.1.1 打开表格、读取/获取信息

1.1.1.1 打开表格、获取表格内sheet名:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
print(workbook.sheetnames) # 获取并查看表格内sheet名
1.1.1.2 根据sheet名获取工作表
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
# workbook.sheetnames # 获取并查看表格内sheet名
sheet = workbook["Sheet1"] # 获取名为"Sheet1"的工作表
# print(sheet)
1.1.1.3 获取表格的尺寸大小:尺寸大小指excel表格中的数据有几行几列
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
# workbook.sheetnames # 获取并查看表格内sheet名
sheet = workbook["Sheet1"] # 获取名为"Sheet1"的工作表
print(sheet.dimensions) # 获取表格的尺寸大小
  • 运行结果:
A2:D29 # 表示该工作表从A2开始,到D29结束;
1.1.1.4 获取表格内某个格子的数据:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
# print(sheet)
cell1 = sheet["A1"] # 查看当前sheet中A1格子的内容
cell2 = sheet["C11"] # 查看当前sheet中C11格子的内容
print(cell1.value, cell2.value)
1.1.1.5 获取表格内某行某列的数据:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
cell1 = sheet.cell(row = 1,column = 1) # 查看当前sheet中1行1列格子的内容
cell2 = sheet.cell(row = 11,column = 3) # 查看当前sheet中11行3列格子的内容
print(cell1.value, cell2.value)
1.1.1.6 获取某个格子的行数、列数、坐标:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
cell1 = sheet["A1"]
cell2 = sheet["C11"]
print(cell1.value, cell1.row, cell1.column, cell1.coordinate)
print(cell2.value, cell2.row, cell2.column, cell2.coordinate)
"""
.row 获取某个格子的行数;
.columns 获取某个格子的列数;
.corordinate 获取某个格子的坐标;
"""
1.1.1.7 获取一系列格子的内容:

方式一:

from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
# 获取A1到C2区域的值,按行获取,即A1,B1,C1,A2,B2,C2共6个单元格
cell = sheet["A1:C2"]
print(cell)
for i in cell: # 循环打印内容
    for j in i:
        print(j.value)

其他获取方式:

sheet["A"]    --- 获取A列的数据
sheet["A:C"]    --- 获取A,B,C三列的数据
sheet[5]   --- 只获取第5行的数据

方式二:

from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
# 按行获取值
for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2): # 获取行2到行5,列1到列2内的所有内容,并以行顺序读取数据
    for j in i:
        print(j.value)
# 按列获取值
for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2): # 获取行2到行5,列1到列2内的所有内容,并以列顺序读取数据
    for j in i:
        print(j.value)

在这里插入图片描述


方式三:按行获取所有数据

from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
for i in sheet.rows: # 按行获取所有数据
        print(i)
1.1.1.8 遍历工作表
    row_max_num= sheet.max_row # 取工作表最大列数
    # print(row_max_num)
    outputCommandList = []
    for row in range(4, row_max_num + 1):
        # item = {}

        value1 = sheet.cell(row, 2).value
        # item[key] = sheet.cell(row, 2).value
        # if row != 1:
        if value1 == '以下空白':
            break
        outputCommandList.append(value1)
    # print(commandList)

1.1.2 写入、修改、样式配置

1.1.2.1 写入某单元格内容
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
sheet["A1"] = "2333" # 写入A1单元格内容

# 写入A1单元格内容的另一种方式
cell = sheet["A1"]
cell.value = "2333"

workbook.save(filename = "newExcelFile.xlsx") # 以特定名称保存excel文件
1.1.2.2 插入行数据:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
data = [
    ["唐僧","男","180cm"],
    ["孙悟空","男","188cm"],
    ["猪八戒","男","175cm"],
    ["沙僧","男","176cm"],
]
for row in data: # 会在表格已有的数据后面,插入这些数(按行插入)
    sheet.append(row)
workbook.save(filename = "test.xlsx") # 保存表格

在这里插入图片描述

1.1.2.3 使用公式:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print(sheet)
sheet["D1"] = "标准身高"
for i in range(1,9):
    sheet["D{}".format(i)] = '=IF(RIGHT(C{},2)="cm",C{},SUBSTITUTE(C{},"m","")*100&"cm")'.format(i,i,i) # 使用函数公式,实现单位转换:将单位为m的数值转换为单位为cm的数值
workbook.save(filename = "test.xlsx") # 保存文件

在这里插入图片描述


查看支持的excel函数公式:

from openpyxl.utils import FORMULAE
print(FORMULAE)
1.1.2.4 插入空行、空列:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
sheet.insert_cols(idx=4,amount=2) # 插入空列,即在第4列开始插入2列空列
sheet.insert_rows(idx=5,amount=4) # 插入空行,即在第5行开始插入4行空行
workbook.save(filename = "test.xlsx") # 保存文件

# .insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入;
# .insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入;

在这里插入图片描述

1.1.2.5 删除行、列:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
# 删除第一列,第一行
sheet.delete_cols(idx=1)
sheet.delete_rows(idx=1)
workbook.save(filename = "test.xlsx") # 保存文件
1.1.2.6 移动单元格:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
# 向左移动两列,向下移动两行
sheet.move_range("B6:C7",rows=2,cols=2) # 移动单元格,即B6到C7的所有单元格,向右移动两个,向下移动两格
workbook.save(filename = "test.xlsx") # 保存文件

# .move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上;rows表示行左右移动,cols表示列上下移动
1.1.2.7 修改字体样式:
from openpyxl.styles import Font
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
cell = sheet["A1"] # 获取A1单元格内容
font = Font(name="微软雅黑",size=20,bold=True,italic=True,color="FF0000") # color是RGB的16进制表示
cell.font = font # 修改单元格样式
workbook.save(filename = "test.xlsx")

在这里插入图片描述

1.1.2.8 获取表格中格子的字体样式:
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
cell = sheet["A1"] # 获取A1单元格内容
font = cell.font # 获取表格中格子的字体样式 
print(font.name, font.size, font.bold, font.italic, font.color)

运行结果:

微软雅黑 20.0 True True <openpyxl.styles.colors.Color object>
Parameters:
rgb='00FF0000', indexed=None, auto=None, theme=None, tint=0.0, type='rgb'

Process finished with exit code 0
1.1.2.9 设置对齐样式:
from openpyxl.styles import Alignment
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
cell = sheet["A1"] # 获取A1单元格内容
alignment = Alignment(horizontal="center",vertical="center",text_rotation=45,wrap_text=True)
cell.alignment = alignment # 设置单元格对齐样式
workbook.save(filename = "test.xlsx")

# Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)
# 水平对齐:‘distributed’,‘justify’,‘center’,‘leftfill’, ‘centerContinuous’,‘right,‘general’;
# 垂直对齐:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’;

在这里插入图片描述

1.1.2.10 设置边框样式:
from openpyxl import load_workbook
from openpyxl.styles import Border, Side

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
cell = sheet["D6"]
side1 = Side(style="thin",color="FF0000")
side2 = Side(style="thick",color="FFFF0000")
border = Border(left=side1,right=side1,top=side2,bottom=side2)
cell.border = border # 设置该单元格的边框样式
workbook.save(filename = "test.xlsx")

查看边框线的内置 styles:

from openpyxl.styles import Border, Side, borders
print(dir(borders))

在这里插入图片描述

1.1.2.11 设置填充样式:
from openpyxl.styles import PatternFill,GradientFill
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
cell_b9 = sheet["B9"]
pattern_fill = PatternFill(fill_type="solid",fgColor="99ccff")
cell_b9.fill = pattern_fill # 填充单元格
cell_b10 = sheet["B10"]
gradient_fill = GradientFill(stop=("FFFFFF","99ccff","000000"))
cell_b10.fill = gradient_fill # 填充单元格
workbook.save(filename = "test.xlsx")

# PatternFill(fill_type=填充样式,fgColor=填充颜色)
# GradientFill(stop=(渐变颜色1,渐变颜色2……))

在这里插入图片描述


查看支持的单元格填充样式:

from openpyxl.styles import PatternFill,GradientFill
print(gradient_fill)
1.1.2.12 设置行高和列宽:
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
# 设置第1行的高度
sheet.row_dimensions[1].height = 50
# 设置B列的宽度
sheet.column_dimensions["B"].width = 20
workbook.save(filename = "test.xlsx")
"""
sheet.row_dimensions.height = 50
sheet.column_dimensions.width = 30
这两句代码,是将整个表的行高设置为50,列宽设置为30;
"""
1.1.2.13 合并/取消合并单元格:
from openpyxl import load_workbook

workbook = load_workbook(filename="test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
sheet.merge_cells("C1:D2") # 合并C1到D2的单元格
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=3)
workbook.save(filename = "test.xlsx")

# .merge_cells(待合并的格子编号)
# .merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
# 取消合并单元格:
# .unmerge_cells(待合并的格子编号)
# .unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)

1.1.3 工作表sheet相关操作

1.1.3.1 创建新的sheet表格:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
workbook.create_sheet("这是一个新的sheet")
print(workbook.sheetnames)
workbook.save(filename = "test.xlsx")
1.1.3.2 删除某个sheet表:
workbook.remove(sheet)
1.1.3.3 复制一个sheet表到另外一张excel表
from openpyxl import load_workbook

workbook = load_workbook(filename = "a.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
print("a.xlsx中有这几个sheet表:",workbook.sheetnames)
sheet = workbook['姓名'] # 获取名为“姓名”的工作表
workbook.copy_worksheet(sheet) # 复制该工作表
workbook.save(filename = "a.xlsx") # 保存文件

在这里插入图片描述

1.1.3.4 修改sheet表的名称:
from openpyxl import load_workbook

workbook = load_workbook(filename = "a.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
sheet.title = "这是修改后的sheet名" # 修改工作表名
print(sheet)
workbook.save(filename = "a.xlsx") # 保存文件

在这里插入图片描述

1.1.3.5 创建新的excel文件:
from openpyxl import Workbook

workbook = Workbook() # 获取一个表格
sheet = workbook.active # 获取当前活动的sheet
sheet.title = "表格1" # 修改工作表名
workbook.save(filename = "新建的excel表格.xlsx") # 保存文件
1.1.3.6 冻结单元格:
from openpyxl import load_workbook

workbook = load_workbook(filename = "test.xlsx") # 打开并获取表格
sheet = workbook.active # 获取当前活动的sheet
sheet.freeze_panes = ("A2") # 冻结首行
workbook.save(filename = "test.xlsx") # 保存文件

2. word


与 Excel 相似,唯一的不同是,Excel 中是写入单元格,而在 Word 中则是在文档的文本“范围”内插入字符串。

from tkinter import Tk
from time import sleep
from tkinter.messagebox import showwarning
import win32com.client as win32

warn=lambda app:showwarning(app,'即将退出进程')
Range=range(3,8)

def word():
    app='Word'
    word=win32.gencache.EnsureDispatch('%s.Application'%app) # 调度 word 进程
    doc=word.Documents.Add() # 添加一个 word 文档
    word.Visible=True # 显示该文档
    sleep(1)

    rng=doc.Range(0,0)
    rng.InsertAfter('Python-to-%s Test \r\n\r\n'%app)
    sleep(1)
    for i in Range:
        rng.InsertAfter('line %d\r\n'%i)
        sleep(1)

    rng.InsertAfter("\r\n th-th-th-that")
    warn(app) # 弹出警告框
    doc.Close(False) # 不保存并关闭
    word.Application.Quit() # 退出进程

if __name__=='__main__':
    Tk().withdraw()
    word()

3. TXT

3.1 打开TXT 文件

with open("data.txt", "r") as f:
# 或
txtfile_dataTemp = open('data360kHzRsTemp.txt.txt',mode='w')

其中打开方式类型如下:
在这里插入图片描述

3.2 读取TXT 文件内容

假设有data.txt 文件,其内容如下:

F: 360.00; Q: 13.335; A: 0.874; B: 148.245; C: -223.639
set f 360
Set F 360.00 Pass
  • 读取TXT 内容函数如下:
with open("data.txt", "r") as f:
	str_testData = f.readline() # 返回字符串,读取第一行
	# data 打印结果:
	# <class 'str'>
	# F: 360.00; Q: 13.335; A: 0.874; B: 148.245; C: -223.639
	
	list_testData = f.readlines() # 返回列表,读取所有行,每一行为一个列表成员
	# <class 'list'>
	# ['F: 360.00; Q: 13.335; A: 0.874; B: 148.245; C: -223.639\n', 'set f 360\n', 'Set F 360.00 Pass']

3.3 向TXT 写入内容

txtfile_dataTemp = open('sTemp.txt',mode='w') # 打开文件
txtfile_dataTemp.write(`2333` + '\n') # 写入内容

3.4 关闭TXT 文件

txtfile_dataTemp.close()
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
校园预约打印网是一个基于Python和Django框架的项目,旨在为校园内的学生和教职工提供一个便捷、高效的打印服务预约平台。以下是对该项目的介绍: 1. **用户注册与登录**:用户可以在平台上注册并创建个人账户,通过账户登录系统进行打印服务的预约和管理。这有助于保护用户的隐私和信息安全。 2. **打印任务提交**:用户可以上传需要打印的文件,并填写相关的打印设置,如纸张大小、打印份数、黑白或彩色等。平台支持多种常见文件格式,如PDF、Word、PPT等。 3. **预约管理**:用户可以查看和管理自己的预约记录,包括查看预约状态、取消预约、修改预约等操作。这有助于用户更好地安排自己的时间。 4. **排队与调度**:平台根据预约顺序和打印机状态进行排队和调度,确保每个用户都能按照预定的时间顺序使用打印机。这有助于提高打印效率和用户体验。 5. **支付与结算**:平台提供在线支付功能,用户可以通过支付宝、微信支付等方式进行支付。同时,平台还提供了优惠券和折扣活动,以吸引更多用户使用。 6. **数据分析与优化**:平台收集用户的使用数据,并进行分析和挖掘,以了解用户的需求和行为特点。这有助于优化平台的服务质量和运营策略。 7. **移动端适配**:平台采用了响应式设计,可以自适应不同设备的屏幕尺寸,为用户提供良好的移动端使用体验。 8. **安全性与稳定性**:平台注重用户数据的安全性和系统的稳定性,采取了多种安全措施来保护用户的隐私和资金安全。同时,平台还进行了压力测试和优化,确保系统在高并发情况下仍能保持稳定运行。 综上所述,这个校园预约打印网是一个功能全面、用户体验良好的在线打印服务平台。它不仅提供了基本的打印服务功能,还通过数据分析和优化来提高服务质量和运营效果。对于Django框架和Web开发领域的开发者来说,这是一个值得学习和借鉴的项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truffle7电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值