首页 > 其他分享 >小北用AI做了一个合并Excel的工具,全程只动嘴,不动手

小北用AI做了一个合并Excel的工具,全程只动嘴,不动手

时间:2024-09-25 11:52:44浏览次数:3  
标签:文件 小北用 AI 合并 Excel file xlrd 模板 template

前言

友友们日常工作中经常有合并excel表格的需求,比如说小北要把下面三个开票申请表合并汇总成一个总的文件。如果需要合并的文件数量少,那还可以手工的复制粘贴。如果文件数量巨大,而且格式还不一样,那估计心里就阿巴阿巴了~跟着小北5分钟上手AI代码编辑器Cursor,零基础开发Chrome插件 ,从此以后你也是高级程序员了!-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/Zhiyilang/article/details/142454478?spm=1001.2014.3001.5502

今天小北就带友友们试一下用最近刷爆网络的cursor工具让AI来制作一个小程序。说实在的,整个体验下来,确实惊艳到了我。全程我没有写一行代码,全部工作都由AI完成了。那感觉就好像基层牛马转身就变成了领导“指点江山,挥斥方遒”,而且AI还不用发工资,可以给它提一万个需求而没有半句怨言。

Cursoricon-default.png?t=O83Ahttps://www.cursor.com/言归正传,下面是小北准备的3个测试文档。我要用AI写一个小工具,将这3个文档合并成一个文档。打开cursor,ctrl+L唤出聊天模式,然后把需求告诉AI。然后AI就开始吭哧吭哧干活了。

左边工程目录下有几个excel文件夹。现在我的需求是:处理多个开票申请表文件合并成单个大文件。其中“开票申请表1.xls”为模板文件。其他以数字结尾的文件为要合并的文件。

1、这个脚本的工作原理如下:

  • 定义文件夹路径和模板文件路径。
  • 读取模板文件。
  • 初始化一个空的DataFrame来存储合并后的数据。
  • 遍历文件夹中的所有文件,检查文件是否以.xlsx结尾并且文件名中包含数字。
  • 读取符合条件的文件并将其数据追加到合并后的DataFrame中。
  • 将合并后的数据写入到模板文件的一个新工作表中。

运行这个脚本后,你会在模板文件中看到一个名为“合并数据”的新工作表,其中包含了所有合并后的数据。

清华大学的镜像源:

pip install pandas openpyxl --index-url https://pypi.tuna.tsinghua.edu.cn/simple

运行了一下,不出所料报错了。把报错信息丢给AI让它自己改bug

报错:安装:

pip install pandas xlrd

使用国内镜像源

你可以尝试使用阿里云或清华大学提供的 PyPI 镜像源来安装 xlrd。这里是如何使用的命令:

使用阿里云镜像源

pip install xlrd --index-url https://mirrors.aliyun.com/pypi/simple/

使用清华大学镜像源

pip install xlrd --index-url https://pypi.tuna.tsinghua.edu.cn/simple

2、这个脚本的工作原理如下:

1. 定义文件夹路径和模板文件路径。

2. 打印模板文件路径,确认路径是否正确。

3. 检查模板文件是否存在。如果不存在,抛出 FileNotFoundError 异常。

4. 使用 xlrd 引擎读取模板文件。

  • 初始化一个空的 DataFrame 来存储合并后的数据。
  • 遍历文件夹中的所有文件,检查文件是否以 .xls 结尾并且文件名中包含数字。

7. 使用 xlrd 引擎读取符合条件的文件并将其数据追加到合并后的 DataFrame 中。

  • 使用 xlwt 引擎将合并后的数据写入到模板文件的一个新工作表中。

请确保你已经安装了 xlrd 和 xlwt 库。如果没有安装,可以使用以下命令进行安装:

pip install xlrd xlwt

运行这个脚本后,你会在模板文件中看到一个名为“合并数据”的新工作表,其中包含了所有合并后的数据。

继续提需求:

进一步的。在合并之前,检查每个文件的数据格式是否一致,如列名、数据类型等.
如果不一致,需要进行适当的数据清洗和格式化。(并重新按顺序做成三行并分类)

小北觉得还不够完美,那继续让AI优化。

等了几十秒分钟,AI就把程序写好了,60多行行云流水,一气呵成。

最终出来的效果就是这样。很完美的实现了我的需求。

 代码:

import os
import pandas as pd

# 定义文件夹路径
folder_path = r'd:\桌面\开票申请表'

# 定义模板文件
template_file = os.path.join(folder_path, '开票申请表1.xls')

# 打印模板文件路径,确认路径是否正确
print(f"模板文件路径: {template_file}")

# 检查模板文件是否存在
if not os.path.exists(template_file):
    raise FileNotFoundError(f"模板文件未找到: {template_file}")

# 读取模板文件
template_df = pd.read_excel(template_file, engine='xlrd')

# 初始化一个空的DataFrame来存储合并后的数据
merged_df = pd.DataFrame()

# 获取模板文件的列名和数据类型
template_columns = template_df.columns
template_dtypes = template_df.dtypes

# 初始化一个字典来存储每个文件的数据
data_dict = {}

# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
    # 检查文件是否以.xls结尾并且文件名中包含数字1、2、3
    if file_name.endswith('.xls') and any(file_name.endswith(f'{i}.xls') for i in range(1, 4)):
        file_path = os.path.join(folder_path, file_name)
        # 读取当前文件
        df = pd.read_excel(file_path, engine='xlrd')
        
        # 检查列名是否一致
        if not df.columns.equals(template_columns):
            print(f"文件 {file_name} 的列名不一致,进行重命名")
            df.columns = template_columns
        
        # 检查数据类型是否一致
        for col in template_columns:
            if df[col].dtype != template_dtypes[col]:
                print(f"文件 {file_name} 的列 {col} 的数据类型不一致,进行转换")
                df[col] = df[col].astype(template_dtypes[col])
        
        # 将当前文件的数据存储到字典中
        data_dict[file_name] = df

# 将数据按顺序排列成三行并分类的报表
report_df = pd.concat(data_dict.values(), keys=data_dict.keys(), names=['文件名', '行'])

# 定义输出文件路径
output_file = os.path.join(folder_path, '合并后的文件.xlsx')

# 将合并后的数据写入到新的 .xlsx 文件中
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
    report_df.to_excel(writer, sheet_name='合并数据')

print(f"文件合并完成!合并后的文件保存在: {output_file}")

3、这个脚本的工作原理如下:

1. 定义文件夹路径和模板文件路径。

2. 打印模板文件路径,确认路径是否正确。

3. 检查模板文件是否存在。如果不存在,抛出 FileNotFoundError 异常。

4. 使用 xlrd 引擎读取 .xls 模板文件。

5. 初始化一个空的 DataFrame 来存储合并后的数据。

6. 获取模板文件的列名和数据类型。

7. 初始化一个字典来存储每个文件的数据。

8. 遍历文件夹中的所有文件,检查文件是否以 .xls 结尾并且文件名中包含数字1、2、3。

9. 使用 xlrd 引擎读取符合条件的文件。

10. 检查每个文件的列名是否与模板文件一致,如果不一致,进行重命名。

11.检查每个文件的列的数据类型是否与模板文件一致,如果不一致,进行数据类型转换。

12. 将当前文件的数据存储到字典中。

13. 将数据按顺序排列成三行并分类的报表。

14. 定义输出文件路径。

15. 使用 openpyxl 引擎将合并后的数据写入到一个新的 .xlsx 文件中。

请确保你已经安装了 pandas、openpyxl 和 xlrd 库。如果没有安装,可以使用以下命令进行安装:

pip install pandas openpyxl xlrd

运行这个脚本后,你会在指定的文件夹中看到一个名为“合并后的文件.xlsx”的新文件,其中包含了所有合并后的数据,并且数据格式一致且按顺序排列成三行并分类的报表。这样可以确保文件格式正确并避免乱码问题。

当然我这里实验的是最简单的文档合并,所有文档的格式内容都是一样的。如果文档文件格式不统一,你可能需要将它们转换为统一的格式,比如Excel、pdf,这样可以更容易地进行合并。如果数据格式不统一,在合并之前,可能检查每个文件的数据格式是否一致,如列名、数据类型等。如果不一致,需要进行适当的数据清洗和格式化。当然你可以一直提需求,直到AI都改好了为止。

你能设计个winodws可执行程序。将这个程序变成带ui的可执行程序么。用户只要上传模板和要合并的源文件,自动生成合并后的excel

 最后我让AI做了个UI界面,方便文档的上传下载,这次AI一次完成,没有出错。

总结

       小北整个过程体验下来还是非常丝滑的。前段时间Openai新出了gpt-o1模型,大幅提高了处理复杂推理和问题解决方面的表现。假如再经过几轮迭代,用嘴做产品的现象将会成为现实。这件事比需要prompt或者workflow来搭建工作流,更加让人兴奋。也许未来“人人都是产品经理”将会成为现实~

标签:文件,小北用,AI,合并,Excel,file,xlrd,模板,template
From: https://blog.csdn.net/Zhiyilang/article/details/142496045

相关文章

  • 【2024W38】肖恩技术周刊(第 16 期):白嫖AI的最佳时段
    周刊内容:对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。更新时间:星期天历史收录:shawn-weekly订阅方式:微信公众号“肖恩聊技......
  • 国美金融科技“破圈” 通通AI社交集团拥抱万亿蓝海市场
    8月28日,国美金融科技(00628.HK)发布两则重磅公告。公告显示,公司宣布展开若干新业务线的收购,并计划将上市公司名称更名为“通通AI社交集团”。 据了解,国美金融科技新称“通通”,寓意国美正在打造一个互联互通的多维互联网平台。当下,具备万亿级别市场空间的元宇宙、人工智能等......
  • ADD failed: file not found in build context or excluded by .dockerignore: stat i
    这个错误信息表明在构建Docker镜像时,Docker守护进程(daemon)在尝试将名为 irap_rule_center 的文件或目录添加到镜像中,但是没有在构建上下文(buildcontext)中找到这个文件或目录,或者这个文件或目录被 .dockerignore 文件忽略了。要解决这个问题,你可以按照以下步骤操作:检查文件......
  • 基于腾讯云 AI 代码助手的Web端宝可梦图鉴实践记录
    在编程的世界里,效率和质量是永恒的追求,每一位开发者不断追求的是如何以更快的速度、更高的质量完成代码的编写与调试。另一方面,大型语言模型,凭借其强大的神经网络架构和庞大数据训练,已具有模拟人类的语言理解与创造的能力,而这种能力的突破性进展让AI编程也成为现实。本篇文章,将介绍......
  • RAG、单元测试等一大波新功能,上线JetBrains IDEs的CodeGeeX插件!
    CodeGeeX第三代模型发布后,多项基于第三代模型能力的新功能今天也同步上线JetBrainsIDEs全家桶。用户可以在IDEA、PyCharm等JetBrains系的IDE中,搜索下载CodeGeeXv2.5.0版本,深度使用最新功能。 一、新模型加持的代码补全和智能问答 以IDEA为例,在v2.5.0版本的CodeGeeX插件中,用户可......
  • SpringBoot Email:搭建邮件发送服务指南?
    SpringBootEmail服务如何集成?怎么使用SpringBoot?SpringBootEmail提供了一个简单而强大的框架,使得在SpringBoot应用程序中集成邮件发送功能变得非常容易。AokSend将详细介绍如何使用SpringBootEmail搭建一个高效的邮件发送服务。SpringBootEmail:创建服务SpringBoo......
  • 年薪40W!转AI产品经理后,我明白了有人带的意义在哪!
    如果你正想转岗/入行产品经理,我的故事或许能给你一些启示......
  • 调用openai
    调用openai代码成功,但是没有调用额度importopenaiimportrequests#设置OpenAIAPI密钥openai.api_key="sk-w6FiFg0JiBmn5eQCzD9XRy0Sqi9vfoZLxdyPdX3XaRT3BlbkFJLNOrDZtmNxFowW1ZrifnotzGmHxz3AR-_CabNFlmQA"#配置代理proxies={"http":"http://xx......
  • Bundle.main.url(forResource:withExtension:)和 Bundle.main.path(forResource:ofTyp
    这两种方式都可以用于获取应用程序包中的资源文件(如JSON文件),但它们在返回结果的类型和处理方式上有所不同:1.Bundle.main.url(forResource:withExtension:)返回类型:这个方法返回一个可选的URL(URL?)。使用场景:当你需要文件的路径作为URL时,使用这个方法更为方便,因为URL......
  • 提示词工程与 AI 使用的紧密关系
    随着人工智能(AI)技术的快速发展,特别是生成式模型(如GPT系列模型)的广泛应用,提示词工程(PromptEngineering)成为了AI使用中至关重要的环节。提示词工程是指通过精心设计和优化输入提示(prompt),以获得AI模型中更为精确、相关且有用的输出。这一领域不仅涵盖了对提示词的选择、结构、......