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下的工作表并且修改
啰嗦时间
整个过程其实没有花很多时间,能够实现基本功能跟我之前从入门到放弃有着必然联系,虽然当时门也没有入。感觉,多学点东西还是有用的,说不定哪天还真能用上。[手动😀]
不知道满不满足小姐姐需求,但是我今天确实没有时间去优化了,毕竟我还深陷在工作和带娃之中。
先记录一下,我抽空再对上面的一些知识点进行研究和补充。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。