smileat2000 发表于 2022-9-12 15:43

求个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文件

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
我想了一下,能不能把手动输入日期改成自动获取当前北京时间的日期来判断呢?麻烦一下大神

好 ,等会

xiaosuobjsd 发表于 2022-9-12 15:50

虽然我会,但是看起来很麻烦,不想写。祝楼主好运

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


虽然我不会,但是看起来很麻烦,不想写。祝楼主好运

ehepls 发表于 2022-9-12 15:54

不会Python。只会一点点易语言。可以写,但是看起来好麻烦。祝楼主好运,早日解决!

weiekko 发表于 2022-9-12 15:58

你的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')
   
   
   

文西思密达 发表于 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描述不清楚 尽量写了



运行不了,大神,看一下怎么回事
https://dd-static.jd.com/ddimg/jfs/t1/6736/35/25651/334377/631eeb54E79778efd/b972ad34c51f8ff1.png
页: [1] 2 3 4 5 6 7
查看完整版本: 求个Python处理Excel代码