python解密带密码的xlsx文件,重新写出

由于工作的需要,拿到一批含有几百张表的加密xlsx文件,需要对其汇总进行分析,使用pandas 的read_excel()方法读取时, 提示XLRDError: Can't find workbook in OLE2 compound document错误, 发现是由于xlsx加密的缘故,由于所有表数据均是一个密码,因此用下面方法进行进行解密数据进行输出。如果是 每个单表数据对应的密码不唯一, 有个猜想,可以吧文件和对应的密码生成一个dict,在每次读取添加密码的时候,可以根据文件进行自动获取密码。下面是标文件密码相同的解密方法。

import win32com.client
import pandas as pd
def get_datafram(filename,password):
    """
    参数一:文件路径
    参数二:文件密码
    return: 解密后输出的df
    """
    xlApp = win32com.client.Dispatch("Excel.Application")
    xlwb = xlApp.Workbooks.Open(filename, False, True, None, Password=password)
    #获取工作表具体情况
    # 获取行数
    rows=xlwb.Worksheets(1).UsedRange.Rows.Count
    # 获取列数
    col=xlwb.Worksheets(1).UsedRange.Columns.Count
    #数据遍历重新写出
    df_list=[]
    for i in range(rows+1):
        #每一行的值加入一个list
        df_row_list=[]
        for j in range(col+1):   
          #获取每个单元格的值
            a=xlwb.Worksheets(1).Cells(i+1,j+1).Value
            df_row_list.append(a)
        df_list.append(df_row_list)
    #转换写出
    df=pd.DataFrame(df_list)
    return df 

由于xlwb.Worksheets(1).Cells(1,1).Valuecells的索引是从1 开始的, 故在原有数据的行数和列数的基础上+1.

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值