zhangkexiaoqq 2020-12-07 21:08 采纳率: 33.3%
浏览 570
已结题

Python 怎么批量读取excel指定单元格,并汇总成新表?

比如我一个文件夹有1万个EXCEL文件,但是我只需要每个EXCEL文件指定表指定的几个单元格数值,把它们读取出来,自动新建一个表格汇总成一列。比如我需要Sheet1表格里 A15,B18,C25的数值,要读取的就是1万一个1万个EXCEL文件每个表格的A15,B18,C25的数值,并新建一个表格会有3列,一列A15一列B18一列C25的1万条数据。(实际最好可以自己添加想要的单元格不一定是3个)

  • 写回答

14条回答 默认 最新

  • LC1356 2020-12-08 10:23
    关注
    import pandas as pd
    from pandas import DataFrame as df
    import os
    from os import path
    import re
    
    cellNames = ["a8", "c3", "d5"]
    cellFormat = """^([a-zA-Z]{1,3})(\d{1,5})"""
    
    
    def excelTools(excelDir):
        if excelDir:
            if path.isdir(excelDir):
                excelList = os.listdir(excelDir)
                cellData = cellToSet(cellNames)
                if not cellData:
                    print("处理数据异常,请确认后再试")
                    return
    
                newPdData = []
                titleName = []
                for excel in excelList:
                    excelPath = path.join(excelDir, excel)
                    if path.isfile(excelPath) and (excelPath.endswith(".xls") or excelPath.endswith(".xlsx")):
                        excelDf = pd.read_excel(excelPath)
                        data = []
                        excelColumn, excelRow = excelDf.shape[0], excelDf.shape[1]
                        for (index, row) in cellData:
                            if index <= excelColumn and row <= excelRow:
                                if index<0:
                                    data.append(excelDf.columns[row])
                                else:
                                    data.append(excelDf.iat[row, index])
                            else:
                                print("表 {table} 的坐标索引位 ( x , y ) 无效".format(table=excelDf, x=index, y=row))
                        newPdData.append(data)
                if newPdData:
                    resultPd = df(newPdData)
                    resultPd.to_excel("转换后的结果.xlsx")
            pass
        else:
            print("excel 文件夹不能为空")
    
    
    def cellToSet(cellData):
        if cellData:
            newData = []
            if isinstance(cellData, (dict, list, set)):
                cellData = list(cellData)
                for cell in cellData:
                    if cell:
                        cell = str(cell).upper()
                        result = re.findall(cellFormat, cell)
                        if result:
                            newData.append((ord(result[0][0]) - 65, int(result[0][1]) - 2))
                        else:
                            print("数据  {cell} 不符合规范,自动忽略".format(cell))
                    else:
                        print("数据  {cell} 无效,自动忽略".format(cell))
            return newData
        else:
            print("筛选的数据不能为空")
            return None
    if __name__ == '__main__':
        excelTools("excelTest")

    试试,应该没啥问题,xls 格式的没试,不知道有问题没

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?