如何利用Python批量处理行、列和单元格详解

目录
  • 精确调整工作表的行高和列宽
  • 批量更改多个工作簿的数据格式
  • 批量更改工作簿的外观格式
    • 设置字体格式
      • 修改字体为宋体
      • 修改字号
      • 字体加粗
      • 字体颜色
      • 单元格填充颜色
      • 对齐方式
      • 添加合适粗细的边框
  • 替换工作簿的行数据
  • 提取指定数据
  • 提取列数据
  • 追加行数据
  • 提取所有工作表的唯一值
  • 总结

精确调整工作表的行高和列宽

步骤

  1. 打开工作簿。
  2. 遍历所有工作表

核心代码

for i in workbook.sheets:
	value = i.range('A1').expand('table')
	value.column_width = 12
	value.row_height = 20
workbook.save()

批量更改多个工作簿的数据格式

步骤:

  1. 列出文件夹中所有子文件
  2. 遍历打开子文件
  3. 遍历工作表
  4. 获取工作表的最后一行
  5. 将指定列从上到下修改

核心代码

#遍历工作表
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()

总结

到此这篇关于如何利用Python批量处理行、列和单元格的文章就介绍到这了,更多相关Python批量处理行、列和单元格内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python批量合并有合并单元格的Excel文件详解

    合并单元格 合并单元格相信大家都会,比如下面这段简单的代码就可以实现: app='Word' word=win32.gencache.EnsureDispatch('%s.Application' % app) doc=word.Documents.Add() word.Visible=False #Title begin sel =word.Selection sel.Font.Name = u"微软雅黑" sel.Font.Size = 8 sel.Font.Bold = Fals

  • 如何利用Python批量处理行、列和单元格详解

    目录 精确调整工作表的行高和列宽 批量更改多个工作簿的数据格式 批量更改工作簿的外观格式 设置字体格式 修改字体为宋体 修改字号 字体加粗 字体颜色 单元格填充颜色 对齐方式 添加合适粗细的边框 替换工作簿的行数据 提取指定数据 提取列数据 追加行数据 提取所有工作表的唯一值 总结 精确调整工作表的行高和列宽 步骤 打开工作簿. 遍历所有工作表 核心代码 for i in workbook.sheets: value = i.range('A1').expand('table') value.c

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • 基于python批量处理dat文件及科学计算方法详解

    摘要:主要介绍一些python的文件读取功能,文件内容修改,文件名后缀更改等操作. 批处理文件功能 import os path1 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test1' path2 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test2' filelist = os.listdir(path1) for files i

  • python文件特定行插入和替换实例详解

    python文件特定行插入和替换实例详解 python提供了read,write,但和很多语言类似似乎没有提供insert.当然真要提供的话,肯定是可以实现的,但可能引入insert会带来很多其他问题,比如在插入过程中crash掉可能会导致后面的内容没来得及写回. 不过用fileinput可以简单实现在特定行插入的需求: Python代码 import os import fileinput def file_insert(fname,linenos=[],strings=[]): ""

  • 利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定.假定没有外力时,两个弹簧的长度为L1和L2. 由于两物体有重力,那么在平面上形成摩擦力,那么摩擦系数分别为b1和b2.所以可以把微分方程写成这样: 这是一个二阶的微分方程,为了使用python来求解,需要把它转换为一阶微分方程

  • 利用Python暴力破解zip文件口令的方法详解

    前言 通过Python内置的zipfile模块实现对zip文件的解压,加点料完成口令破解 zipfile模块用来做zip格式编码的压缩和解压缩的,zipfile里有两个非常重要的class, 分别是ZipFile和ZipInfo, 在绝大多数的情况下,我们只需要使用这两个class就可以了.ZipFile是主要的类,用来创建和读取zip文件而ZipInfo是存储的zip文件的每个文件的信息的. 比如要读取一个Python zipfile 模块,这里假设filename是一个文件的路径: impo

  • 利用Python中unittest实现简单的单元测试实例详解

    前言 单元测试的重要性就不多说了,可恶的是Python中有太多的单元测试框架和工具,什么unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等这些,先不说如何写单元测试,光是怎么运行单元测试就有N多种方法,再因为它是测试而非功能,是很多人没兴趣触及的东西.但是作为一个优秀的程序员,不仅要写好功能代码,写好测试代码一样

  • 利用Python如何制作好玩的GIF动图详解

    前言 之前我们分享过用Python进行可视化的9种常见方式.其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表. 假如电脑上没有安装ImageMagick,先去这里按照自己的电脑系统下载对应版本,大家也可以通过我们下载:https://www.jb51.net/softs/140766.html,如果我们想用matplotlib的save方法渲染GIF动图,就需要安装ImageMagick. 下图是我们制作的一个动图示例:

  • golang利用不到20行代码实现路由调度详解

    前言 本文主要介绍了关于golang实现路由调度的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 项目地址 github (本地下载) 本项目依赖 使用标准库实现,无额外依赖 为什么需要路由调度层 golang http标准库只能精确匹配请求的URI,然后执行handler.现在一般web项目都至少有个Controller层,以struct实现,根据不同的请求路径派发到不同的方法中去. 路由调度器定义 由于golang暂时还不可以动态创建对象(比如java的Class.

随机推荐