针对文件夹下所有word属性的获取,包括作者,文件路径,创作时间,最后一次修改人

该脚本主要针对自动化办公的使用,可以获取目录下所有word(.doc,.docx)的文件的属性获取并导出为excal表格.

首先先公布该脚本的源代码方便大家如果有需要进行改进的地方进行修改,

程序使用的是python语言编写,操作简单。

import os
import pprint
from docx import Document
import pandas as pd
import win32com.client
import pytz
from datetime import datetime
import win32timezone

def get_file_names(path, suffixes):
    file_names = []
    file_paths = []
    for root, dirs, files in os.walk(path, topdown=False):
        # 跳过隐藏目录
        dirs[:] = [d for d in dirs if not d.startswith('.')]
        for name in files:
            if not name.startswith('.') and os.path.splitext(name)[1].lower() in suffixes:
                file_names.append(name)
                file_paths.append(os.path.join(root, name))
    pprint.pprint(file_paths)
    pprint.pprint(file_names)
    return file_names, file_paths

def read_doc_properties(word, file_path):
    doc = word.Documents.Open(file_path)
    author = doc.BuiltInDocumentProperties("Author").Value
    last_modified_by = doc.BuiltInDocumentProperties("Last Author").Value
    last_modified_time = doc.BuiltInDocumentProperties("Last Save Time").Value

    # 转换为北京时间
    if last_modified_time:
        last_modified_time = last_modified_time.astimezone(pytz.timezone('Asia/Shanghai'))

    doc.Close(False)
    return author, last_modified_by, last_modified_time

def read_docx_properties(docx_file):
    doc = Document(docx_file)
    properties = doc.core_properties

    # 读取属性
    author = properties.author
    last_modified_by = properties.last_modified_by
    last_modified_time = properties.modified

    # 转换为北京时间
    if last_modified_time:
        last_modified_time = last_modified_time.astimezone(pytz.timezone('Asia/Shanghai'))

    return author, last_modified_by, last_modified_time

def main():
    path=input("请输入你要搜寻的文件目录:")
    # path = r'C:\Users\86135\Desktop\python总结'  # 确保路径格式正确
    suffixes = ['.doc', '.docx']

    file_names, file_paths = get_file_names(path, suffixes)

    data = []
    word = win32com.client.Dispatch('Word.Application')
    try:
        for file_path in file_paths:
            ext = os.path.splitext(file_path)[1].lower()
            try:
                if ext == '.docx':
                    author, last_modified_by, last_modified_time = read_docx_properties(file_path)
                elif ext == '.doc':
                    author, last_modified_by, last_modified_time = read_doc_properties(word, file_path)
                data.append({
                    "文件路径": file_path,
                    "作者": author,
                    "最后编辑人": last_modified_by,
                    "最后修改时间": last_modified_time.strftime('%Y-%m-%d %H:%M:%S') if last_modified_time else None
                })
            except Exception as e:
                print(f"处理文件时出错: {e}, 文件路径: {file_path}")
    except Exception as e:
        print(f"初始化 Word 应用程序时出错: {e}")
    finally:
        word.Quit()

    # 创建 DataFrame
    df = pd.DataFrame(data)

    # 将 DataFrame 导出到 Excel
    output_path=input("请输入你要保存的.xlsx的表格位置:")
    # output_path = r'D:\output10.xlsx'  # 你想保存的 Excel 文件路径
    df.to_excel(output_path, index=False)

    print(f"数据已成功导出到 {output_path}")

if __name__ == "__main__":
    main()
    input("是否关闭黑色命令窗口:")

get_file_names函数会获取你需要查找目录下所有的word文件的文件名和文件位置;

read_doc_properties,read_docx_properties分别会获取doc文件和docx文件的属性,如何你需要更改你的具体功能,可重点对这进行修改。

因为仅仅只是一段脚本,受限于环境的限制,所以我将其打包成一个.exe的Windows可执行文件,方便大家在电脑上使用。

软件的下载地址我发在文末。

软件的使用方法如下,首先你需要对下载好的软件进行解压缩。

然后打开解压缩的文件夹,大概是这样:

图片

然后打开dist文件夹,以管理员身份运行软件:

图片

进入后会显示一个黑色窗口问你要搜寻的文件目录,假如我要查找D盘下所有的word文件的属性,需要:

1.复制D盘的位置

图片

2:粘贴在黑色窗口里:

图片

然后回车,就会显示所有word文件的位置和文件名

如果有错误,消息会弹在黑色窗口中,需要你找到文件位置自行在随后的excal表格中进行修改

图片

最后会弹出你要保存的excal表格的位置,

你只需要写入你保存的位置+你命名的文件名+.xlsx

回车就可以

例如:D:\aaa.xlsx

如果显示数据已成功导出,就表示运行成功

图片

这时你可以在你刚才保存的位置打开这个excal表格:

图片

图片

需要注意的是:

1.如果有错误消息弹出,你需要比对excal表格进行修改:

2.导出的excal表格必须加上.xlsx的后缀

3.如果word文件比较大,超过100个,运行的时间可能比较长,请耐心等待

软件的下载链接为:

https://wwt.lanzouo.com/imXSw25sccdi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值