吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2236|回复: 62
收起左侧

[求助] 求个Python处理Excel代码

[复制链接]
smileat2000 发表于 2022-9-12 15:43
500吾爱币
需求:
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文件

最佳答案

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| smileat2000 发表于 2022-9-12 17:05
我把要处理的表上传到网盘了
1是待处理的表https://lanzoux.com/iFeI10bjmvqf
2是处理好的表https://lanzoux.com/icYQr0bjmvpe
 楼主| smileat2000 发表于 2022-9-12 18:10
weiekko 发表于 2022-9-12 17:29
还是条件很模糊
逻辑也有问题
自己倒腾一下吧

https://lanzoux.com/iTh0s0bjrqnc

我录了个手动操作的视频,你看一下能不能理解我的意思。。。
weiekko 发表于 2022-9-12 15:43
smileat2000 发表于 2022-9-12 19:59
我想了一下,能不能把手动输入日期改成自动获取当前北京时间的日期来判断呢?麻烦一下大神

好 ,等会

免费评分

参与人数 1热心值 +1 收起 理由
yunce + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

xiaosuobjsd 发表于 2022-9-12 15:50
虽然我会,但是看起来很麻烦,不想写。祝楼主好运

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
温恒轩 + 1 + 1 我很赞同!
Atlantis908 + 1 + 1 热心回复!
一线码农 + 1 + 1 我很赞同!
netspirit + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

pwp 发表于 2022-9-12 15:52

虽然我不会,但是看起来很麻烦,不想写。祝楼主好运
ehepls 发表于 2022-9-12 15:54
不会Python。只会一点点易语言。可以写,但是看起来好麻烦。祝楼主好运,早日解决!
weiekko 发表于 2022-9-12 15:58
你的67描述不清楚 尽量写了

[Python] 纯文本查看 复制代码
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')
    
    
    

免费评分

参与人数 8吾爱币 +8 热心值 +8 收起 理由
mockmoon + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
shihdhr + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
RainH + 1 + 1 吾爱破解论坛有你更精彩!
netspirit + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
小兔一样的小白 + 1 + 1 感觉和VBA也好像,热心人,点赞
狄人3 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ylww + 1 + 1 热心市民!
wkdxz + 1 + 1 效率好高!

查看全部评分

文西思密达 发表于 2022-9-12 15:59
vba就可以搞定了,不过写起来有点累  懒得写  ,等个大佬来写吧
weiekko 发表于 2022-9-12 16:00
还是要靠自己调试
fc1988 发表于 2022-9-12 16:02
不会写,支持一下
 楼主| smileat2000 发表于 2022-9-12 16:14
本帖最后由 smileat2000 于 2022-9-12 16:18 编辑
weiekko 发表于 2022-9-12 15:58
你的67描述不清楚 尽量写了

[mw_shl_code=python,true]

运行不了,大神,看一下怎么回事
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表