如何利用Python批量处理行、列和单元格详解
作者:落春只在无意间 发布时间:2023-02-05 05:07:35
标签:python,批量,单元格
目录
精确调整工作表的行高和列宽
批量更改多个工作簿的数据格式
批量更改工作簿的外观格式
设置字体格式
修改字体为宋体
修改字号
字体加粗
字体颜色
单元格填充颜色
对齐方式
添加合适粗细的边框
替换工作簿的行数据
提取指定数据
提取列数据
追加行数据
提取所有工作表的唯一值
总结
精确调整工作表的行高和列宽
步骤
打开工作簿。
遍历所有工作表
核心代码
for i in workbook.sheets:
value = i.range('A1').expand('table')
value.column_width = 12
value.row_height = 20
workbook.save()
批量更改多个工作簿的数据格式
步骤:
列出文件夹中所有子文件
遍历打开子文件
遍历工作表
获取工作表的最后一行
将指定列从上到下修改
核心代码
#遍历工作表
for j in workbook.sheets:
# 获取最后一行
row_num = j['A1'].current_region.last_cell.row
# 数据格式修改
j['A2:A{}'.format(row_num)].number_format = 'm/d'
j['D2:D{}'.format(row_num)].number_format = '¥#,##0.00'
workbook.save()
workbook.close()
使用xwings模块中的number format属性来设置单元格区域中数据的格式。该属性的取值为一个代表特定格式的字符串,与Excel的“设置单元格格式”
对话框中“数字”选项卡下设置的格式对应。
批量更改工作簿的外观格式
难点应该是外观格式如何更改了吧,这里介绍一些常用的外观格式。
j 是工作表
设置字体格式
修改字体为宋体
j['A1:H1'].api.Font.Name = '宋体'
修改字号
j['A1:H1'].api.Font.Size= 10 # 10磅
字体加粗
j['A1:H1'].api.Font.Bold= True
字体颜色
# 白色
j['A1:H1'].api.Font.Color= xw.utils.rgb_to_int((255,255,255))
单元格填充颜色
# 填充颜色为黑色
j['A1:H1'].Color= xw.utils.rgb_to_int((0,0,0))
对齐方式
# 水平对齐方式为 居中
j['A1:H1'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter
# 垂直对齐方式为 居中
j['A1:H1'].api.VerticalAlignment= xw.constants.VAlign.xlVAlignCenter
以上是一列的如果是正文,j['A1:H1']变成 j['A2'].expand('table') 就可以了
添加合适粗细的边框
# 遍历所有的单元格
for cell in j['A1'].expand('table'):
for b in range(7,12):
# 设置单元格的边框线型
cell.api.Borders(b).LineStyle = 1
# 设置单元格的边框粗细
cell.api.Borders(b).Weight = 2
替换工作簿的行数据
核心代码
# 遍历工作表
for j in eorkbook.sheets:
# 获取工作表数据
value = j['A2'].expand('table').value
#按行遍历工作表数据
for index,val in enumerate(value):
# 判断行数据是否是这个
if val == ['背包',16,65]:
# 是的话替换为新数据
value[index] = ['双肩包',36,79]
#将完成替换的数据写入工作表中
j['A2'].expand('table').value = value
workbook.save()
enumerate()是Python的内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串等)组合为一个索引序列,可同时得到数据对象的索引及对应的值,一般用在for语句当中。该函数的语法格式和常用参数含义如下。
enumerate(sequenxe,[start=0])
# start 是索引的起始位置
如果是修改指定行什么办呢?因为列是在行的第几个单元格中我们可以按如下代码进行修改
#按行遍历工作表数据
for index,val in enumerate(value):
# 修改第三个单元格,即第index行,第 3列,下标是从0开始的
val[2] = val[2] + 1
# 替换整行数据
value[index] = val
提取指定数据
import xlwings as xw
import pandas as pd
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('采购表.xlsx')
worksheet = workbook.sheets
data = []
for i in worksheet:
values = i.range('A1').expand().options(pd.DataFrame).value
# 一次性提取工作表中所有符合条件的行数据
filtered = values[values['采购物品'] == '复印纸']
if not filtered.empty:
data.append(filtered)
new_workbook = xw.books.add()
new_worksheet = new_workbook.sheets.add('复印纸')
new_worksheet.range('A1').value = pd.concat(data, ignore_index = False)
new_workbook.save('复印纸.xlsx')
workbook.close()
app.quit()
提取列数据
import xlwings as xw
import pandas as pd
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('采购表.xlsx')
worksheet = workbook.sheets
column = ['采购日期', '采购金额']
data = []
for i in worksheet:
values = i.range('A1').expand().options(pd.DataFrame, index = False).value
filtered = values[column]
data.append(filtered)
new_workbook = xw.books.add()
new_worksheet = new_workbook.sheets.add('提取数据')
new_worksheet.range('A1').value = pd.concat(data, ignore_index = False).set_index(column[0])
new_workbook.save('提取表.xlsx')
workbook.close()
app.quit()
追加行数据
import os
import xlwings as xw
newContent = [['双肩包', '64', '110'], ['腰包', '23', '58']]
app = xw.apps.add()
file_path = '分部信息'
file_list = os.listdir(file_path)
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx':
workbook = app.books.open(file_path + '\\' + i)
worksheet = workbook.sheets['产品分类表']
values = worksheet.range('A1').expand()
number = values.shape[0]
worksheet.range(number + 1, 1).value = newContent
workbook.save()
workbook.close()
app.quit()
提取所有工作表的唯一值
import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open('上半年销售统计表.xlsx')
data = []
for i, worksheet in enumerate(workbook.sheets):
values = worksheet['A2'].expand('down').value
data = data + values
data = list(set(data))
data.insert(0, '书名')
new_workbook = xw.books.add()
new_worksheet = new_workbook.sheets.add('书名')
new_worksheet['A1'].options(transpose = True).value = data
new_worksheet.autofit()
new_workbook.save('书名.xlsx')
workbook.close()
app.quit()
来源:https://blog.csdn.net/qq_39838607/article/details/120098397


猜你喜欢
- 在ASP输出页面只是调出数据库里内容展现给用户看没有使用SESSION等动态属性,是可以CACHE的,以加快访问速度具体操作方法如下:在as
- 用AJAX刷新一个DIV中的jsp内容 <script type="text/javascript"> va
- 前言golang不允许循环import package ,如果检测到 import cycle ,会在编译时报错,通常import cycl
- 前言:keras是一个十分便捷的开发框架,为了更好的追踪网络训练过程中的损失函数loss和准确率accuracy,我们有几种处理方式,第一种
- 今天安装Django的时候遇到了python版本冲突,找不到python路径,所以又重新安装了一个python3.6.5安装完之后,突然发现
- Session 对象 可以使用 Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Se
- 代码如下:Create trigger tri_wk_CSVHead_History on wk_CSVHead_History --声明
- 本文实例讲述了Python实现读取机器硬件信息的方法。分享给大家供大家参考,具体如下:本人最近新学python ,用到关于机器的相关信息,经
- JavaScript就其本质是函数式编程语言,是Lisp的后代,同时又加入了一下面向对象编程的元素,放弃了一些难懂的函数式语言的元素。 函数
- 反向单位矩阵单位矩阵即对角线为 1,如下:那么反向的单位矩阵就是反对角线为 1:左右镜像操作这里采用 numpy 实现。方案 1import
- 关于 pynput pynput 可以监控我们的键盘和鼠标。目前具有此类功能的库有很多,比如 pygame 等游戏库,但是当我们只需要
- 用pandas中的DataFrame时选取行或列:import numpy as npimport pandas as pdfrom pan
- max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。max_
- 方案5 使用xml参数 对sql server xml类型参数不熟悉的童鞋需要先了解下XQuery概念,这里简单提下XQuery 是用来从
- Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列Lifo
- python 自动化批量生成前端的HTML可以大大减轻工作量下面演示两种生成 HTML 的方法方法一:使用 webbrowser#codin
- python代码运行助手是能在网页上运行python语言的工具。因为python的运行环境在很多教程里都是用dos的,黑乎乎的界面看的有点简
- 主要是:前序遍历、中序遍历、后序遍历、层级遍历、非递归前序遍历、非递归中序遍历、非递归后序遍历#!/usr/bin/env python#-
- 将.ppm格式的图片转换成.jpg格式的图像,除了通过软件转换,还可以使用python脚本直接转换,so easy!!!from PIL i
- Wingdings字体,Symbol字体<html> <head> <title>