求个Python处理Excel代码
需求:1.读取当前目录下的工作簿(任意文件名)(.xlsx.xls.等等等格式的表格文件)(读取到的第一个,我只放一个进去)
2.读取工作簿里的第一个工作表
3.取消合并所有单元格
4.删除B列的内容里所有非数字的字符
5.删除B列的内容里包含非数字的所有行(包括空白)
6.筛选N列,列出筛选条件,输入序号选择条件进行筛选
7.只保留筛选N列后的内容
8.新建一个工作簿
9.新的工作簿第一个工作表的A列是刚刚读取的工作表的B列的内容('+数字/文本/空白)
10.新的工作簿第一个工作表的C列是刚刚读取的工作表的M列的内容("SF+数字"/JD+数字)
11.新的工作簿第一个工作表的B列根据C列的内容来判断
判断条件:
C列的内容去除所有非字母和数字的字符
如果C列的内容前两个字符是SF或者sf,那么B列的内容是shunfeng
如果C列的内容前两个字符是JD或者jd,那么B列的内容是jd
12.保存新的工作簿为.xls文件 我把要处理的表上传到网盘了
1是待处理的表https://lanzoux.com/iFeI10bjmvqf
2是处理好的表https://lanzoux.com/icYQr0bjmvpe weiekko 发表于 2022-9-12 17:29
还是条件很模糊
逻辑也有问题
自己倒腾一下吧
https://lanzoux.com/iTh0s0bjrqnc
我录了个手动操作的视频,你看一下能不能理解我的意思。。。 smileat2000 发表于 2022-9-12 19:59
我想了一下,能不能把手动输入日期改成自动获取当前北京时间的日期来判断呢?麻烦一下大神
好 ,等会 虽然我会,但是看起来很麻烦,不想写。祝楼主好运
虽然我不会,但是看起来很麻烦,不想写。祝楼主好运 不会Python。只会一点点易语言。可以写,但是看起来好麻烦。祝楼主好运,早日解决! 你的67描述不清楚 尽量写了
import xlwt,xlrd
import os
import sys
# 1.读取当前目录下的工作簿(任意文件名)(.xlsx.xls.等等等格式的表格文件)(读取到的第一个,我只放一个进去)
# 2.读取工作簿里的第一个工作表
# 3.取消合并所有单元格
# 4.删除B列的内容里所有非数字的字符
# 5.删除B列的内容里包含非数字的所有行(包括空白)
# 6.筛选N列,列出筛选条件,输入序号选择条件进行筛选
# 7.只保留筛选N列后的内容
# 8.新建一个工作簿
# 9.新的工作簿第一个工作表的A列是刚刚读取的工作表的B列的内容('+ 数字/文本/空白)
# 10.新的工作簿第一个工作表的C列是刚刚读取的工作表的M列的内容("SF+数字"/JD+数字)
# 11.新的工作簿第一个工作表的B列根据C列的内容来判断
# 判断条件:
# C列的内容去除所有非字母和数字的字符
# 如果C列的内容前两个字符是SF或者sf,那么B列的内容是shunfeng
# 如果C列的内容前两个字符是JD或者jd,那么B列的内容是jd
# 12.保存新的工作簿为.xls文件
def main():
# 1
file = os.listdir(os.getcwd())
for i in file:
if i.endswith('.xlsx') or i.endswith('.xls'):
file = i
break
# 2
workbook = xlrd.open_workbook(file)
sheet = workbook.sheet_by_index(0)
# 3
sheet.unmerge_cells(0,0,sheet.nrows,sheet.ncols)
# 4
for i in range(sheet.nrows):
if sheet.cell(i,1).ctype == 2:
sheet.cell(i,1).value = int(sheet.cell(i,1).value)
else:
sheet.cell(i,1).value = ''
# 5 删除B列的内容里包含非数字的所有行(包括空白)
for i in range(sheet.nrows):
if sheet.cell(i,1).ctype != 2:
sheet.row(i).clear()
# 6 筛选第N列,列出筛选条件,输入序号选择条件进行筛选
print('筛选条件:')
for i in range(sheet.ncols):
print(i,sheet.cell(0,i).value)
print('输入筛选条件的序号:')
n = int(input())
print('筛选条件:')
# 7 只保留筛选N列后的内容
for i in range(sheet.nrows):
if sheet.cell(i,n).ctype != 1:
sheet.row(i).clear()
# 8 新建一个工作簿
new_workbook = xlwt.Workbook()
new_sheet = new_workbook.add_sheet('sheet1')
# 9 新的工作簿第一个工作表的A列是刚刚读取的工作表的B列的内容('+ 数字/文本/空白)
for i in range(sheet.nrows):
if sheet.cell(i,1).ctype == 2:
new_sheet.write(i,0,'+ '+str(sheet.cell(i,1).value))
elif sheet.cell(i,1).ctype == 1:
new_sheet.write(i,0,'+ '+sheet.cell(i,1).value)
else:
new_sheet.write(i,0,'+ ')
# 10 新的工作簿第一个工作表的C列是刚刚读取的工作表的M列的内容("SF+数字"/JD+数字)
for i in range(sheet.nrows):
if sheet.cell(i,12).ctype == 2:
new_sheet.write(i,2,'SF'+str(int(sheet.cell(i,12).value)))
elif sheet.cell(i,12).ctype == 1:
new_sheet.write(i,2,'SF'+sheet.cell(i,12).value)
else:
new_sheet.write(i,2,'SF ')
# 11 新的工作簿第一个工作表的B列根据C列的内容来判断
# 判断条件:
# C列的内容去除所有非字母和数字的字符
# 如果C列的内容前两个字符是SF或者sf,那么B列的内容是shunfeng
# 如果C列的内容前两个字符是JD或者jd,那么B列的内容是jd
for i in range(sheet.nrows):
if sheet.cell(i,12).ctype == 2:
if str(int(sheet.cell(i,12).value)).startswith('SF') or str(int(sheet.cell(i,12).value)).startswith('sf'):
new_sheet.write(i,1,'shunfeng')
elif str(int(sheet.cell(i,12).value)).startswith('JD') or str(int(sheet.cell(i,12).value)).startswith('jd'):
new_sheet.write(i,1,'jd')
elif sheet.cell(i,12).ctype == 1:
if sheet.cell(i,12).value.startswith('SF') or sheet.cell(i,12).value.startswith('sf'):
new_sheet.write(i,1,'shunfeng')
elif sheet.cell(i,12).value.startswith('JD') or sheet.cell(i,12).value.startswith('jd'):
new_sheet.write(i,1,'jd')
else:
new_sheet.write(i,1,' ')
# 12 保存新的工作簿为.xls文件
new_workbook.save('new.xls')
vba就可以搞定了,不过写起来有点累懒得写,等个大佬来写吧 还是要靠自己调试 不会写,支持一下 本帖最后由 smileat2000 于 2022-9-12 16:18 编辑
weiekko 发表于 2022-9-12 15:58
你的67描述不清楚 尽量写了
运行不了,大神,看一下怎么回事
https://dd-static.jd.com/ddimg/jfs/t1/6736/35/25651/334377/631eeb54E79778efd/b972ad34c51f8ff1.png