Python操作Excel常见方法

运行环境

  • Python 3.10.5

功能:

  • 处理现有表格数据后,根据现有模板生成新的表格。(v1.0 目前仅支持单sheet表处理)

代码:

from openpyxl import Workbook, load_workbook
import io
import sys
import random
import pandas as pd
import json
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')


##
''' 
   方法说明:获取excelsheet表特定列的数据
   参数说明:path: xlsx文件路径
           sheetName:第一个sheet表的名字
           startInde: 起始开始获取行的下标;下标起始为0;
           end: 结束列 ,下标起始位置为 1;
    return: titles:标题列表[],
            datas:特定列的数据列表[[],[],[]]
 '''


def getSpecificDataList(path, sheetName, startIndex, end):
    wb = load_workbook(path)
    sheet = wb[sheetName]
    datas = []
    for i, row in enumerate(sheet):
        if (i >= startIndex):
            # 遍历数组
            rowDatas = []
            for j in range(end):
                rowDatas.append(row[j].value)
            datas.append(rowDatas)
    return datas


""" 
   方法说明:数据处理
   oldData: [[],[],[],[]] // 待处理的数据
   newData: [[],[],[],[]] // 已处理的数据
 """


def handleData(oldData):
    print("=============数据处理start================")
    newData = []
    for col in oldData:
        strJson = json.loads(
            col[4]
        )
        uscc = strJson["empBaseParamDTO"]["uscc"]
        print(uscc)
        col[4] = uscc
        print("处理过后的数据:--------------------" + col[4])
        newData.append(col)
        # print(col)
    print("===============数据处理end============")

    return newData


""" 
   方法说明:文件保存,在现有模板中写入数据
   filePath: 模板文件完整路径
   sheetName:写入sheet名字
   startIndex:开始录入的起始行 1开始
   data:写入的数据[{"name":"","fullOrgName":"","orgId":"","orgParentId":""}]
    newFilePath: 新文件路径
 """


def writeExistExcel(filePath, sheetName, startIndex, datas, newFilePath):
    wb = load_workbook(filePath)
    sheet = wb[sheetName]
    for i, row in enumerate(datas):
        for j in range(0, len(row)):
            sheet.cell(i+startIndex, j+1).value = row[j]
    wb.save(newFilePath)
    print("录入完成!")
    return


""" 
    initFile: 需要处理的xlsx文件,
    initSheetName: 需要处理的表名
    startInde: 起始开始获取行的下标;下标起始为0;
    end: 结束列 ,下标起始位置为 1;
    modeFile: 模板xlsx 文件
    modeSheetName: 模板 SheetName 表
    newFilePath: 根据模板生成的新的文件名
"""
def getNewFileByDemoFile(initFile,initSheetName,initStartIndex,initEnd,modeFile,modeSheetName,modeStartIndex,newFilePath):
    # 1、获取数据
    data = getSpecificDataList(initFile, initSheetName, initStartIndex, initEnd)
    # 2、 处理数据
    newDate = handleData(data)
    # 3、根据模板文档,新写入数据
    writeExistExcel(modeFile, modeSheetName, modeStartIndex, newDate, newFilePath)
    return

getNewFileByDemoFile("demo.xlsx","Sheet1",1,5,"demo_end.xlsx","Sheet1",2,"xxxx.xlsx")

说明:

  • 根据实际需求重写handleData 方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值