Python_如何操作Excle文件,进行对数据的从新排列。

好久没在CSDN写文章了,现在已经不只是做Unity了,也不只是停留在开发的初级阶段。加上工作这么久,Unity、UE4、Python、Flutter、Playcanvas、ThreeJS等等都在弄,东西多了杂了,精力也不够了,慢慢就不写了。也感谢CSDN,算是我程序道路上的一大助力!
今后,我会好好做产品经理的。

代码目的:把EXCLE中横向的数据结构改为竖向的结构。
直接贴代码了,解释较少,本文的目的主要为了个人进行记录,方便后期黏贴使用,如有不近人意的地方请见谅。

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import colors
from openpyxl.styles import Color
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment

import datetime

#获取generator类型数据的长度
def get_length(generator):
    if hasattr(generator,"__len__"):
        return len(generator)
    else:
        return sum(1 for _ in generator)

# 进行Excle处理的类
class ExcleTool:

    #Excle文件的全路径
    excle_file_Path =''

    def __init__(self,excle_file_Path):
        self.excle_file_Path = excle_file_Path

    #读取文件
    def readExcle(self):
        #打开工作表
        wb = load_workbook(self.excle_file_Path)
        print(wb.sheetnames)
        return wb

    def updateExcle(self,wb):
        # 选择工作表的第一个tab页
        ws1 = wb[wb.sheetnames[0]]
        # 并创建一个新的Tab页,用于存放新的数据。
        ws_new = wb.create_sheet("right") 


        start_row = 2
        ws1_rows = get_length(ws1.rows)
        ws1_columns = get_length(ws1.columns)

        print("行: " + str(ws1_rows)+ " : " + "列: " + str(ws1_columns))

        # 以下代码的业务背景为:老的数据排列是横向的,比如一行里面就有 姓名:x1、x2,性别:男、女等
        # 以下逻辑就是把这种横向数据改为数项的结构。
        # 附近我会放上已经处理好的数据,可以更方便了解做了什么。
        # 理解到有什么改变后,看下面代码会简单些。
        # 但可能你的业务逻辑不同,所以删除也行。我会把 excel主要操作的代码注释,业务方便的就不细说了。 
        ws_new_curr_row = 1
        data_range = 12  # 正确数据的范围。11列为一行数据
        for row in ws1.iter_rows(min_row=start_row, max_row=ws1_rows, max_col=1):
            for cell in row:
                
                #读取一个格子的数据,如果没有,则会赋值value 的值。
                _ = ws_new.cell(row=ws_new_curr_row,column=1,value = cell.value)
                # 设置格子中字体大小、颜色、加粗
                _ .font = Font(b=True, size=14,color="00FFFFFF")
                # 设置格子的内容左对齐
                _.alignment = Alignment(horizontal="left", vertical="center")
                # 设置格子的背景色为渐变色
                _.fill = fill = GradientFill(stop=("00000080", "003366FF"))

                offest = 2

                new_col_index =1
                for col_index in range(offest,ws1_columns):
                    yu = (col_index-offest)%data_range
                    #11的整数
                    if(yu == 0):
                        ws_new_curr_row+=1
                        new_col_index =1

                    # 取一个格子的数据
                    ws1_d = ws1.cell(row=cell.row,column=col_index)

                   # 为新的Tab页中格子进行赋值
                    new_ws = ws_new.cell(row=ws_new_curr_row,column=new_col_index,value = ws1_d.value)
                    
                    # 更改对齐方式,第一列的做对齐,剩下的列为剧中对齐。
                    new_ws.alignment = Alignment(horizontal=("left" if (yu == 0) else "center"), vertical="center")

                    #下一列
                    new_col_index +=1
                   # print('行数据 %s'%(ws1_d.value))
                
                ws_new_curr_row +=3

        #完成操作后记着要保存
        wb.save("newExcel.xlsx")
        print(' OK')



excletool = ExcleTool('datatable.xlsx')

wb = excletool.readExcle()
excletool.updateExcle(wb)

文件仅供学习,不可商用或外传。

处理后的文件地址
免费下载:https://download.csdn.net/download/KiTok/77853134

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Python操作 Excel 并生成数据图,可以使用 openpyxl 和 matplotlib 库。以下是一个简单的示例代码: ```python import openpyxl from openpyxl import Workbook from openpyxl.chart import BarChart, Reference import matplotlib.pyplot as plt # 创建 Excel 文件并写入数据 workbook = Workbook() worksheet = workbook.active worksheet['A1'] = 'Category' worksheet['B1'] = 'Value 1' worksheet['C1'] = 'Value 2' worksheet['A2'] = 'A' worksheet['B2'] = 10 worksheet['C2'] = 20 worksheet['A3'] = 'B' worksheet['B3'] = 20 worksheet['C3'] = 30 workbook.save('data.xlsx') # 读取 Excel 文件中的数据 workbook = openpyxl.load_workbook('data.xlsx') worksheet = workbook.active data = [] for row in worksheet.iter_rows(min_row=2, values_only=True): data.append(row) # 生成柱状图 categories = [x[0] for x in data] values1 = [x[1] for x in data] values2 = [x[2] for x in data] fig, ax = plt.subplots() ax.bar(categories, values1, label='Value 1') ax.bar(categories, values2, bottom=values1, label='Value 2') ax.legend() plt.xticks(rotation=45) plt.xlabel('Category') plt.ylabel('Value') plt.title('Data Chart') plt.savefig('chart.png') # 将图表插入 Excel 文件 worksheet.add_chart(BarChart(), 'D1') chart = worksheet['D1'] chart.title = 'Data Chart' chart.x_axis.title = 'Category' chart.y_axis.title = 'Value' chart.add_data(Reference(worksheet, min_col=2, min_row=1, max_row=3), titles_from_data=True) chart.add_data(Reference(worksheet, min_col=3, min_row=1, max_row=3), titles_from_data=True) chart.set_categories(Reference(worksheet, min_col=1, min_row=2, max_row=3)) chart.shape = 4 workbook.save('data.xlsx') ``` 这个示例代码创建一个 Excel 文件,写入一些数据,然后读取数据并生成一个柱状图。最后,将图表插入 Excel 文件并保存。这个代码需要安装 openpyxl 和 matplotlib 库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值