吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3463|回复: 21
上一主题 下一主题
收起左侧

[讨论] 帮媳妇用GPT跑excel数据分析--(一)

[复制链接]
跳转到指定楼层
楼主
voxmax 发表于 2023-7-14 08:31 回帖奖励
昨天媳妇给我提了个对比excel数据库需求,我发现自己的代码水准不好,于是问了一下GPT,给出了相应的解决方案,但是我不太懂其中的某个参数如何调整
precision=0.01这个参数在对比字符串的时候我知道怎么调整比较好。
详细代码如下 ,大家可以拿去,我自己跑数据没问题,跑出来的数据还是不理想。



[Asm] 纯文本查看 复制代码
import openpyxl

def find_and_mark_data(filename, sheetname, column, start_row, end_row, fuzzy_match=False, precision=0.01, output_filename="output.xlsx"):
    # 打开Excel文件
    workbook = openpyxl.load_workbook(filename)
    
    # 选择工作表
    worksheet = workbook[sheetname]
    
    # 获取指定列的数据
    column_data = [cell.value for cell in worksheet[column][start_row-1:end_row]]
    
    # 创建用于排序的元组列表
    data_tuples = []
    for i, data in enumerate(column_data):
        if data:
            data_tuples.append((i, data))
    
    # 根据相似性进行排序
    sorted_data = sorted(data_tuples, key=lambda x: x[1], reverse=True)
    
    # 重新排列数据
    for i, (index, _) in enumerate(sorted_data):
        if i != index:
            # 获取当前行数据
            row_data = [cell.value for cell in worksheet[index+start_row]]
            
            # 删除当前行
            worksheet.delete_rows(index+start_row)
            
            # 在指定位置插入当前行数据
            worksheet.insert_rows(start_row+i, 1)
            for j, cell_value in enumerate(row_data, start=1):
                worksheet.cell(row=start_row+i, column=j).value = cell_value
    
    # 保存修改后的Excel文件
    workbook.save(output_filename)

# 示例用法
filename = 'g:/test1.xlsx'
sheetname = 'sheet1'
column = 'A'  # 修改为要遍历的列的字母
start_row = 100  # 指定起始行
end_row = 500  # 指定结束行
fuzzy_match = True
precision = 0.01
output_filename = 'output.xlsx'  # 输出文件名

find_and_mark_data(filename, sheetname, column, start_row, end_row, fuzzy_match, precision, output_filename)


免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
YAOQIANG666 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
沙发
86618513 发表于 2023-7-14 09:13
提示: 作者被禁止或删除 内容自动屏蔽
3#
Kls673M 发表于 2023-7-14 09:24
好像你的代码没做什么呢, 你好像只是用了排序重组功能吧,这个表格不是自带吗?
你用表格把数据做成图形估计更直观点
头像被屏蔽
4#
mokson 发表于 2023-7-14 09:33
5#
antpliot 发表于 2023-7-14 10:09
这个是不是用Excel本身的功能方便一些
6#
JackLei 发表于 2023-7-14 10:10
Excel连接数据库直接用vb也可以跑,py感觉有点多余了
[Visual Basic] 纯文本查看 复制代码
Sub Query()
    Dim Conn As Object, Rst As Object
    Dim strConn As String, strSQL As String
    Dim i As Integer, PathStr As String
    Set Conn = CreateObject("ADODB.Connection")
    Set Rst = CreateObject("ADODB.Recordset")
    PathStr = "C:\Users\Desktop\销售表.xlsx"   '设置工作簿的完整路径和名称
    t = ActiveSheet.Name
    Select Case Application.Version * 1    '设置连接字符串,根据版本创建连接
    Case Is <= 11
        strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
    Case Is >= 12
        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
    End Select
    '设置SQL查询语句
    strSQL = "select * from [销售表$]"
    Conn.Open strConn    '打开数据库链接
    Set Rst = Conn.Execute(strSQL)    '执行查询,并将结果输出到记录集对象
    'ThisWorkbook.Sheets.Add after:=Worksheets("数据源") '添加一个新工作表在第一工作后
    For Each ws In Worksheets
        If ws.Name = "提数结果" Then ws.Delete
    Next
    Sheets.Add.Name = "提数结果"
    With Sheets("提数结果")
        .Cells.Clear
        .Tab.Color = 255
        For i = 0 To Rst.Fields.Count - 1    '填写标题
            .Cells(1, i + 1) = Rst.Fields(i).Name
        Next i
        .Range("A2").CopyFromRecordset Rst
'        .Cells.EntireColumn.AutoFit  '自动调整列宽
    End With
    Rst.Close    '关闭数据库连接
    Conn.Close
    Set Conn = Nothing
    Set Rst = Nothing
End Sub

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
ytw6176 + 2 + 1 热心回复!

查看全部评分

7#
lfglfg11 发表于 2023-7-14 10:21
直接VB跑不就完事了,这么简单的玩意……
8#
zyming 发表于 2023-7-14 10:53
整的好啊
9#
iawyxkdn8 发表于 2023-7-14 11:17
如果只是对比,excel本身就能满足要求,而且很方便,写这一堆代码,我都搞好了吧!
10#
wangsz 发表于 2023-7-14 11:37
挺有创意的,支持原创!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表