小白的第一个python办公自动化项目——自动生成文件索引表

文科小萌新,零基础自学python主要是为了办公自(tou)动(ge)化(lan)。
办公室电脑中有一个文件夹,里面全部都是发货箱单,格式为.xls,因发货量大,每周至少增加十几个箱单,有时候要查找或分类就比较麻烦。试过excel自带的文件夹目录功能,要导出目录还是挺方便的。但是因为箱单文件名中含有发货日期、发货唛头,我想要的效果是提取出发货日期,按日期倒序排列,提取出唛头,单独放一列。用vba应是可以实现的,但是正好在学python,所以想试一下。第一版做的有些麻烦,有3个部分组成,因办公电脑只有excel2003,所以只能导出.xls,用了xlrd和xlwt。后续用pandas再试一试,应该更简单。

第一部分:

#!/usr/bin/env python
# coding: utf-8

"""此程序用来提取指定文件夹下所有文件名、文件路径以及文件名中关键词,并分别输入excel表格中"""
import os, xlwt, re

book = xlwt.Workbook(encoding='utf8',style_compression=0)   # 初始化工作簿
sheet = book.add_sheet('sheet1')  # 新建工作表


path = "E:\箱单"  # 指定文件夹路径


def get_file(path):
    n = 0
    for root, dirs, files in os.walk(path):
 
        for file in files:
            n += 1

            # 把提取的日期写入第1列,若无日期,为空
            date = re.search(r'(\d{4}-?\d{1,2}-?\d{1,2})', file)
            if date is not None:
                sheet.write(n, 0, date.group())
            else:
                sheet.write(n, 0, " ")


            # 把文件名写入第2列
            sheet.write(n, 1, file)  
            
            # 把文件路径写入第3列
            file_path = os.path.join(root, file)
            sheet.write(n, 2, file_path)   

            # 把提取的唛头写入第4列,若无唛头,写入“无唛头信息”
            pattern = re.compile(r'(Q-[0-9a-zA-Z]+)')  
            result = re.findall(pattern, file)
            if result:
                sheet.write(n, 3, " ".join(i for i in result))
            else:
                sheet.write(n, 3, "无唛头信息")
                
            
get_file(path)
book.save(r'箱单索引表.xls')




第二部分:

#!/usr/bin/env python
# coding: utf-8

import xlwt
from xlrd import open_workbook


target_col = 0   #以第1列为索引排序

book = open_workbook(r'箱单索引表.xls',formatting_info=True)
sheet = book.sheets()[0]


data = [sheet.row_values(i) for i in range(sheet.nrows)]
label = data[0]
data = data[1:]
data.sort(key=lambda x: x[target_col],reverse=True)

bk = xlwt.Workbook()
st = bk.add_sheet("箱单索引表")


for idx_r, row in enumerate(data):
    for idx_c, value in enumerate(row):
        st.write(idx_r+1, idx_c, value)

bk.save(r'箱单索引表.xls')


第三部分:

#!/usr/bin/env python
# coding: utf-8

import xlwt
from xlrd import open_workbook


book = open_workbook(r'箱单索引表.xls', formatting_info=True)
sheet = book.sheets()[0]

my_book = xlwt.Workbook()
my_sheet = my_book.add_sheet("箱单索引表")
my_sheet.col(1).width = 256*55
my_sheet.col(2).width = 256*35
my_sheet.write(0, 0, "发货日期")
my_sheet.write(0, 1, "箱单链接")
my_sheet.write(0, 2, "唛头")


for rowx in range(1, sheet.nrows):
    date = sheet.cell_value(rowx, 0)
    my_sheet.write(rowx, 0, date)

    name = sheet.cell_value(rowx, 1)
    path = sheet.cell_value(rowx, 2)
    my_sheet.write(rowx, 1, xlwt.Formula('HYPERLINK("%s";"%s")'%(path,name)))

    mark = sheet.cell_value(rowx, 3)
    my_sheet.write(rowx, 2, mark)


my_book.save(r'C:\Users\61782_000\Desktop\箱单索引表.xls')

生成的箱单索引表效果:

小白的第一个python办公自动化项目——自动生成文件索引表