python 批量修改 excel
早上突然接到小姐姐求助,如何用程序批量删除 excel 里面的图片,作为前端狗的我心里咯噔一下,毕竟这不是我专长。小姐姐说 python 应该可以,赶紧 google 一下。
学 python 从入门到放弃至今已经有 2 年多了吧,心里赶紧列了一个问题清单
问题清单以及后续找到的解决方案
- 单个 excel 文件
** 读取
# 使用 xlrd 读取 excel 文件
wb = open_workbook(path + '/' + name)
** 获取每个工作表
# 获取当前文件的工作表(sheet)list
sheetList = wb.sheets()
...
for sheet in sheetList:
...
** 修改工作表
# 修改工作表使用的是 xlutils, 其实也可以用 xlwt,# 我没有用,原因:用资料上 demo,demo 使用的是这个,虽然 demo 没有跑通
from xlutils.copy import copy
...
wb = open_workbook(path + '/' + name)
...
# 复制原文件,因为原文件只能读取,不能写入数据,所以要复制得到一个可以写入数据的文件
newwb = copy(wb)
...
for row in sheet.get_rows():
# 遍历每一行,当 8 列的值小于 12 时,就把该值改为 0
if row[0].value < 12:
newsheet.write(index, 0, 0)
...
** 保存
newwb.save('./data/' + name)
- 文件下的 excel 文件
** 获取文件列表
import os
os.listdir(path)
嗯,功能如下:
全部代码如下:
# -*- coding: utf-8 -*-
from xlrd import open_workbook
from xlutils.copy import copy
import os
def editExl(path, name):
if os.path.exists('/data'):
os.removedirs("/data")
# 括号里放入要读取的文件的绝对路径, 相对路径也可以
# os.getcwd() 返回当前.py 文件所在的绝对路径
# print(os.getcwd(), 'lujing')
wb = open_workbook(path + '/' + name)
# 获取所读取文件的第一张表单
# sheet = wb.sheet_by_index(0)
# 获取该表单的行数
# s = sheet.nrows
# 获取当前文件的工作表(sheet)list
sheetList = wb.sheets()
# print('sheetList', sheetList)
# 复制原文件,因为原文件只能读取,不能写入数据,所以要复制得到一个可以写入数据的文件
newwb = copy(wb)
sheetIndex = 0
for sheet in sheetList:
# 获取可写文件的第一张表单
newsheet = newwb.get_sheet(sheetIndex)
# print(newsheet, newsheet.get_rows())
index = 0
try:
for row in sheet.get_rows():
# 遍历每一行,当 8 列的值小于 12 时,就把该值改为 0
# print(row)
# print(row[0].value, '000000000000000')
if row[0].value < 12:
# print('here', index)
newsheet.write(index, 0, 0)
# print('after here')
index = index + 1
except:
print("aaa")
sheetIndex = sheetIndex + 1
mkdir('./data')
newwb.save('./data/' + name)
def mkdir(path):
folder = os.path.exists(path)
if not folder:
os.makedirs(path)
print('--- folder mk ---')
else:
print('--- folder exists ---')
def getFileList(path):
return os.listdir(path)
def editAll():
originPath = './origin'
fileList = getFileList(originPath)
# print(fileList)
for fileItem in fileList:
editExl(originPath, fileItem)
editAll()
缺陷:
只能修改单元格的内容,图片还没有办法读取,修改完成后,表格里面的图片都丢失了。但是也差不多满足小姐姐的需求了,一会有空让我家小哥哥过来优化。
运行方式
- 把你需要修改的文件放到 origin 文件夹下,如果没有辛苦手动创建一下
- 安装 python
看到我这篇文章的应该都是大佬,应该不用贴出来了,也可以看我 python 学习专栏中的其他文章
只提一点,如果是 windows, 安装完成之后,如果 cmd 下运行 python 提示
python 不是内部命令 XXXXXXX
之类的,那就找到 python 的安装目录,添加到环境变量中(还有 pip 的目录)
还是举个例子吧
pthon 安装目录:D:\software\Python27
pip 安装目录:D:\software\Python27\Scripts
点击确定 -> 重启 cmd -> cd excel_opt.py 所在的文件夹
真实过程
文章虽然是这样写,但是实际编程过程是这样的
- 读取 excel 文件
- 修改第一个工作表的数据
- 保存 excel 文件
- 读取文件夹下的所有 excel 文件
- 遍历每个 excel 下的工作表并且修改
啰嗦时间
整个过程其实没有花很多时间,能够实现基本功能跟我之前从入门到放弃有着必然联系,虽然当时门也有入。所以说,多学点东西还是有用的,说不定哪天还真能用上。
不知道满不满足小姐姐需求,但是我今天确实没有时间去优化了,毕竟我还深陷在工作和带娃之中。
先记录一下,我抽空再对上面的一些知识点进行研究和补充。