ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗?【AI版】

  • 无意间的刷到的视频
  • 一、提需求
  • 二、ChatGPT用Python编写代码
  • 三、意外的解释
  • 四、ChatGPT改用Java编写代码
  • 五、GPT第二次生成Java代码
  • 尾巴

无意间的刷到的视频

晚上在家刷视频,突然看到一个在讲关于AI编程的视频,心里疑问:真的假的,这么厉害的吗?于是我看完他的讲解和操作,他这个视频中确实用ChatGPT实现了他所提出的要求,编写了一段代码,当然,up主要求用的Python编写的,我不知道用C++或者Java行不行得通,接下来我就亲自使用以下ChatGPT,验验货。
开图

一、提需求

我需要将给定文件夹中的所有Excel表数据,汇总到一个给定的Excel表中,请按照以下要求,
编写Python:
一、每个分表中有两个sheet,第一个是班级基本信息,第二个是班级学生成绩排名;
二、班级基本信息sheet中,班级编号、教师姓名、班级人数、班长,教师姓名;
三、班级成绩排名sheet中,第一列是序号、第二列是学号、第三列是学生姓名、第四列是成绩;
四、总表只需要一个sheet,并且需将列设置为序号、班级编号、教师姓名、班级人数、班长、学号、学生姓名、成绩;
五、班级编号、教师姓名、班级人数,必须要和每个学生的成绩信息一一对应;
六、做一个程序运行进度条,表示已复制到的学生条目数。

二、ChatGPT用Python编写代码

下面是使用GPT的截图:

需求

代码01

生成代码如下:

import os
import openpyxl
from tqdm import tqdm# 定义常量
BASE_DIR = 'path/to/folder'  # 文件夹路径
OUTPUT_FILE = 'path/to/output.xlsx'  # 输出文件路径
SHEET_NAMES = ['基本信息', '成绩排名']  # sheet名称
HEADER_ROWS = [1, 1]  # 表头所在行数
HEADER_COLS = [1, 1]  # 表头所在列数
CLASS_INFO_COLS = [1, 2, 3, 4, 2]  # 班级基本信息所在列数
RANK_COLS = [1, 2, 3, 4]  # 成绩排名所在列数# 初始化输出文件
output_wb = openpyxl.Workbook()
output_ws = output_wb.active
output_ws.append(['序号', '班级编号', '教师姓名', '班级人数', '班长', '学号', '学生姓名', '成绩'])# 遍历文件夹中的Excel文件
for filename in tqdm(os.listdir(BASE_DIR)):if not filename.endswith('.xlsx'):continue# 打开文件filepath = os.path.join(BASE_DIR, filename)wb = openpyxl.load_workbook(filepath)# 遍历sheetfor i, sheet_name in enumerate(SHEET_NAMES):ws = wb[sheet_name]# 获取表头header_row = HEADER_ROWS[i]header_col = HEADER_COLS[i]header = [cell.value for cell in ws[header_row] if cell.value]# 获取班级基本信息if sheet_name == '基本信息':class_info = [ws.cell(row=header_row+1, column=col).value for col in CLASS_INFO_COLS]# 获取成绩排名elif sheet_name == '成绩排名':for row in range(header_row+1, ws.max_row+1):rank = [ws.cell(row=row, column=col).value for col in RANK_COLS]output_ws.append([output_ws.max_row, *class_info, *rank])wb.close()# 保存输出文件
output_wb.save(OUTPUT_FILE)

这还不是最厉害的

三、意外的解释

更令人惊讶的是还会对代码进行解释,这就不得了了。接下来看看GPT对它所生成代码的解释:
解释一下代码的主要部分:

  1. 第1行导入了必要的模块,其中os用于文件操作,openpyxl用于读写Excel文件,tqdm用于显示进度条。
  2. 第5-9行定义了常量,包括文件夹路径、输出文件路径、sheet名称等。
  3. 第12-19行初始化输出文件,创建一个新的Excel文件,并在第一个sheet中添加表头。
  4. 第22-42行遍历文件夹中的Excel文件,打开每个文件并遍历其中的sheet。
  5. 第25-27行判断当前sheet是班级基本信息还是成绩排名,分别获取表头和班级基本信息。
  6. 第30-37行在成绩排名sheet中遍历每一行,获取学生的成绩信息,并将班级基本信息和成绩信息合并到输出文件中。
  7. 第40-41行关闭当前文件。
  8. 第44-46行保存输出文件。
    其中使用了tqdm模块来显示进度条,可以让程序更加友好。如果没有安装该模块,可以使用以下命令进行安装:
pip install tqdm

这个效果非常不错了,如果运行上述代码有误,还可以复制错误提示让GPT分析并解决问题,可以说是保姆级别的开发助手了。

四、ChatGPT改用Java编写代码

本来到这里视频里up主就结束的,我又想了一下,能否用Java语言实现出来,于是就开始给GPT命令,很简单,只需把需求描述里的Python改为Java即可:
改为Java语言编写代码

生成代码如下:

import java.io.File;
import java.io.IOException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;public class ExcelMerger {public static final String BASE_DIR = "path/to/folder"; // 文件夹路径public static final String OUTPUT_FILE = "path/to/output.xlsx"; // 输出文件路径public static final String[] SHEET_NAMES = {"基本信息", "成绩排名"}; // sheet名称public static final int[] HEADER_ROWS = {0, 0}; // 表头所在行数public static final int[] HEADER_COLS = {0, 0}; // 表头所在列数public static final int[] CLASS_INFO_COLS = {0, 1, 2, 3, 1}; // 班级基本信息所在列数public static final int[] RANK_COLS = {0, 1, 2, 3}; // 成绩排名所在列数public static void main(String[] args) {// 初始化输出文件Workbook outputWb = new XSSFWorkbook();Sheet outputWs = outputWb.createSheet("汇总数据");Row headerRow = outputWs.createRow(0);headerRow.createCell(0).setCellValue("序号");headerRow.createCell(1).setCellValue("班级编号");headerRow.createCell(2).setCellValue("教师姓名");headerRow.createCell(3).setCellValue("班级人数");headerRow.createCell(4).setCellValue("班长");headerRow.createCell(5).setCellValue("学号");headerRow.createCell(6).setCellValue("学生姓名");headerRow.createCell(7).setCellValue("成绩");// 遍历文件夹中的Excel文件File folder = new File(BASE_DIR);File[] files = folder.listFiles();int rowNum = 1; // 当前行号for (File file : Objects.requireNonNull(files)) {if (!file.isFile() || !file.getName().endsWith(".xlsx")) {continue;}try {// 打开文件Workbook wb = new XSSFWorkbook(file);for (int i = 0; i < SHEET_NAMES.length; i++) {Sheet sheet = wb.getSheet(SHEET_NAMES[i]);if (sheet == null) {continue;}// 获取表头int headerRowNum = HEADER_ROWS[i];int headerColNum = HEADER_COLS[i];Row headerRow = sheet.getRow(headerRowNum);List<String> header = new ArrayList<>();for (int j = headerColNum; j < headerRow.getLastCellNum(); j++) {Cell cell = headerRow.getCell(j);if (cell != null && cell.getCellType() == CellType.STRING) {header.add(cell.getStringCellValue());} else {header.add("");}}// 获取班级基本信息if (SHEET_NAMES[i].equals("基本信息")) {Row classInfoRow = sheet.getRow(headerRowNum + 1);String classId = classInfoRow.getCell(CLASS_INFO_COLS[0]).getStringCellValue();String teacherName = classInfoRow.getCell(CLASS_INFO_COLS[1]).getStringCellValue();int studentCount = (int) classInfoRow.getCell(CLASS_INFO_COLS[2]).getNumericCellValue();String monitor = classInfoRow.getCell(CLASS_INFO_COLS[3]).getStringCellValue();for (int j = 4; j < header.size(); j++) {if (header.get(j).equals("教师姓名")) {header.set(j, teacherName);}}for (int j = 1; j <= studentCount; j++) {Row outputRow = outputWs.createRow(rowNum++);outputRow.createCell(0).setCellValue(outputRow.getRowNum());outputRow.createCell(1).setCellValue(classId);outputRow.createCell(2).setCellValue(teacherName);outputRow.createCell(3).setCellValue(studentCount);outputRow.createCell(4).setCellValue(monitor);}}// 获取成绩排名else if (SHEET_NAMES[i].equals("成绩排名")) {for (int j = headerRowNum + 1; j <= sheet.getLastRowNum(); j++) {Row rankRow = sheet.getRow(j);String studentId = rankRow.getCell(RANK_COLS[1]).getStringCellValue();String studentName = rankRow.getCell(RANK_COLS[2]).getStringCellValue();double score = rankRow.getCell(RANK_COLS[3]).getNumericCellValue();Row outputRow = outputWs.createRow(rowNum++);outputRow.createCell(0).setCellValue(outputRow.getRowNum());for (int k = 1; k < header.size(); k++) {if (header.get(k).equals("学号")) {outputRow.createCell(k).setCellValue(studentId);} else if (header.get(k).equals("学生姓名")) {outputRow.createCell(k).setCellValue(studentName);} else if (header.get(k).equals("成绩")) {outputRow.createCell(k).setCellValue(score);}}}}}wb.close();} catch (IOException e) {e.printStackTrace();}}// 保存输出文件try {outputWb.write(outputFile);outputWb.close();} catch (IOException e) {e.printStackTrace();}}
}

本来接下来ChatGPT是输出解释上述生成代码的主要含义的,但它这句话还没说完输出就中断了,下面是对话截图:
Java代码主要内容解释

于是我不得不自己输入命令来让它解释,结果可能我输入的命令不是很具体,它把每段代码输出下来,然后再对该段代码解释。我想要的是和它用Python编写代码时解释代码含义的格式一样,就是说几行到第几行,然后再解释。于是我再把命令输入详细点,如下图:
详细命令
这样解释就对了,如下:

  1. 第2-4行:导入所需的类和定义常量。

  2. 第6-13行:创建输出文件,并创建表头。其中,第9-11行根据要求创建了表头的前3列,而第12行根据表头数组的长度创建了剩余的列。

  3. 第15-22行:遍历文件夹中的Excel文件,并根据文件名的后缀名判断是否是Excel文件,如果不是就跳过。同时,使用一个变量rowNum来记录当前的行号,用于在输出文件中创建新的行。

  4. 第24-29行:打开Excel文件,并根据SHEET_NAMES数组中的名称来获取对应的Sheet对象。如果Sheet对象不存在,则跳过该Sheet。在读取完数据后,需要关闭Workbook对象,以释放资源。

  5. 第31-57行:获取表头和班级基本信息。其中,第31-44行获取表头,第46-60行获取班级基本信息,并根据表头中“教师姓名”这一列的位置来更新表头。然后根据学生人数在输出文件中创建相应数量的行,并将班级基本信息填充到这些行中。

  6. 第62-72行:获取成绩排名。其中,第62-68行遍历成绩排名Sheet中的每一行,获取学生的学号、姓名和成绩。然后在输出文件中创建新的行,并将学号、姓名和成绩填充到对应的列中。

五、GPT第二次生成Java代码

当第二次生成Java代码时,和第一次不一样了,用的方法也不一样了,相比第一次,代码量要少一些。所以问这个ChatGPT相同的问题并不一定有相同的回答。
第二次代码如下:
以下是实现上述要求的Java代码,其中进度条使用了Swing组件JProgressBar:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JProgressBar;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ExcelMerger {private static final String[] SHEET_NAMES = {"班级基本信息", "班级学生成绩排名"};private static final String[] HEADER = {"序号", "班级编号", "教师姓名", "班级人数", "班长", "学号", "学生姓名", "成绩"};public static void mergeExcelFiles(String inputFolderPath, String outputFilePath, JProgressBar progressBar) throws IOException {List<File> inputFiles = getExcelFiles(new File(inputFolderPath));Workbook outputWorkbook = new XSSFWorkbook();Sheet outputSheet = outputWorkbook.createSheet();createHeaderRow(outputSheet);int rowNum = 1;for (int i = 0; i < inputFiles.size(); i++) {File inputFile = inputFiles.get(i);Workbook inputWorkbook = new XSSFWorkbook(new FileInputStream(inputFile));for (int j = 0; j < SHEET_NAMES.length; j++) {Sheet inputSheet = inputWorkbook.getSheet(SHEET_NAMES[j]);if (inputSheet == null) {continue;}if (j == 0) {mergeBasicInfo(inputSheet, outputSheet, rowNum);} else {mergeScoreRanking(inputSheet, outputSheet, rowNum);}}rowNum += getStudentCount(inputWorkbook);inputWorkbook.close();progressBar.setValue((i + 1) * 100 / inputFiles.size());}outputWorkbook.write(new FileOutputStream(outputFilePath));outputWorkbook.close();}private static List<File> getExcelFiles(File folder) {List<File> files = new ArrayList<>();File[] allFiles = folder.listFiles();for (File file : allFiles) {if (file.isFile() && file.getName().toLowerCase().endsWith(".xlsx")) {files.add(file);}}return files;}private static void createHeaderRow(Sheet sheet) {Row headerRow = sheet.createRow(0);for (int i = 0; i < HEADER.length; i++) {Cell cell = headerRow.createCell(i);cell.setCellValue(HEADER[i]);}}private static void mergeBasicInfo(Sheet inputSheet, Sheet outputSheet, int rowNum) {Row inputRow = inputSheet.getRow(1);Row outputRow = outputSheet.createRow(rowNum);outputRow.createCell(0).setCellValue(rowNum - 1);for (int i = 1; i < 5; i++) {Cell cell = outputRow.createCell(i);cell.setCellValue(inputRow.getCell(i).getStringCellValue());}}private static void mergeScoreRanking(Sheet inputSheet, Sheet outputSheet, int rowNum) {int studentCount = inputSheet.getLastRowNum();for (int i = 2; i <= studentCount; i++) {Row inputRow = inputSheet.getRow(i);Row outputRow = outputSheet.createRow(rowNum);outputRow.createCell(0).setCellValue(rowNum - 1);for (int j = 1; j < 5; j++) {Cell cell = outputRow.createCell(j);cell.setCellValue(inputSheet.getRow(1).getCell(j).getStringCellValue());}for (int j = 5; j < HEADER.length; j++) {Cell cell = outputRow.createCell(j);cell.setCellValue(inputRow.getCell(j - 3).getStringCellValue());}rowNum++;}}private static int getStudentCount(Workbook workbook) {Sheet sheet = workbook.getSheet(SHEET_NAMES[0]);return (int) sheet.getRow(0).getCell(1).getNumericCellValue();}
}

主要代码解释:

  1. 第1行:定义常量SHEET_NAMES和HEADER。
  2. 第3-11行:定义getExcelFiles方法,通过File类的listFiles方法获取指定文件夹下的所有Excel文件。
  3. 第13-17行:定义createHeaderRow方法,创建合并后Excel文件的表头行。
  4. 第19-35行:定义mergeBasicInfo方法,合并班级基本信息工作表。
  5. 第37-57行:定义mergeScoreRanking方法,合并班级学生成绩排名工作表。
  6. 第59-63行:定义getStudentCount方法,获取班级人数。
  7. 第65-96行:定义mergeExcelFiles方法,对每个Excel文件进行合并,包括合并基本信息和成绩排名两个工作表,并将合并后的结果写入输出文件。在过程中使用进度条表示合并进度。

尾巴

本次的知识分享就到这了,谢谢你这么好看还关注我,我们下期再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI 3.0快速阅读后的思考

AI3.0阅读思考 梳理 几大技术词汇&#xff1a; 卷积神经网络CNN&#xff1a;权重和值之积的和深度神经网络DNN工具&#xff1a;深度指层数&#xff0c;深度学习强化学习符号人工智能亚符号人工智能&#xff0c;感知机&#xff0c;亚符号&#xff0c;从数据中学习机器学习对博…

HTTP的缓存机制是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言HTTP缓存机制简介H…

进阶高级Python开发工程师,不得不掌握的Python高并发编程

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【Python基础】- 文件的读写操作

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

数据分析案例-数据科学相关岗位薪资可视化分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

码上行动:零基础学会Python编程

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【JDK环境配置】| 两种JDK环境能在同一台电脑共存吗?

目录 &#x1f981; 前言&#x1f981; 基础环境&#x1f981; 安装JDK1.8Ⅰ. 下载Ⅱ. 安装 &#x1f981; 在项目里更改JDK版本---------------------------------------------福利在下面--------------------------------------------------&#x1f981; 福利&#xff08;送…

【Azure】Azure 成本管理:规划、监控、计算和优化成本 | 文末送书

开篇先来一个不是总结的总结&#xff1a;平衡成本与性能始终是一个重大挑战。&#xff08;此处省略各种场景的解释&#xff09; 文章目录 前言一、Azure 成本管理工具1.1 什么是成本管理1.2 成本管理的主要功能 二、Azure 中可能影响成本的因素2.1 影响成本的因素2.1.1 资源类型…

『赠书活动 | 第八期』《ChatGpt全能应用一本通》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第八期』 本期书籍&#xff1a;《ChatGpt全能应用一本通》 赠书规则&#xff1a;评论区&#xff1a;点赞&#xff5c;收藏&#xff5c;留言 …

使用 OpenAI 的 ChatGPT 提高开发人员的工作效率

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 介绍 作为一名开发人…

Chat GPT对社会生产结构产生的冲击力远大于 Alpha GO!

开年以来&#xff0c;Chat GPT的各种新闻一直不绝于耳&#xff0c;相信大家对Chat GPT的各类介绍也已经司空见惯了&#xff0c;或者说见怪不怪了&#xff0c;为什么这么说呢&#xff1f;因为现在关于Chat GPT的各类文章和视频&#xff0c;真真假假&#xff0c;虚虚实实&#xf…

chatgpt赋能python:Python音频降噪:如何利用Python降噪音频?

Python音频降噪&#xff1a;如何利用Python降噪音频&#xff1f; 随着音频技术的不断发展&#xff0c;音频处理已经成为了我们生活中不可或缺的一部分。在音频处理的过程中&#xff0c;降噪技术是非常重要的一环。Python作为一种高级编程语言&#xff0c;已经成为了音频降噪领…

chatgpt赋能python:如何用Python放音乐——实现简单的音频播放功能

如何用Python放音乐——实现简单的音频播放功能 介绍 Python作为一种高级编程语言&#xff0c;越来越受到程序员们的喜爱。它的强大和灵活性为我们提供了许多方便快捷的编程工具。例如&#xff0c;在日常生活中&#xff0c;我们需要播放一些音乐&#xff0c;这时如果用Python…

chatgpt赋能python:Python分离音频:优秀技术实践实现音频处理的最佳方案

Python分离音频&#xff1a;优秀技术实践实现音频处理的最佳方案 在音频处理领域中&#xff0c;Python一直被视为一个最实用和最便捷的工具。Python的音频处理库Pydub&#xff0c;是一个基于FFmpeg的简单API&#xff0c;具备提取音频、音频转换、音量控制、音频切片和合并、音…

发现最优秀的人工智能对话体验

Tomchat&#xff1a;点击传送 支持gpT 4 -3.5支持 midjourny绘画可长篇写作无使用月限额 wuguokai 这个网站是设计模式老师推荐的&#xff0c;不强制用户。并且满足毫秒级响应。 https://chat.wuguokai.cn AIDuTu 无需登录&#xff0c;直接使用&#xff0c;挺好的 https…

ChatGPT团队中,3个清华学霸,1个北大学霸,共9位华人

众所周知&#xff0c;美国硅谷其实有着众多的华人&#xff0c;哪怕是芯片领域&#xff0c;华为也有着一席之地&#xff0c;比如AMD 的 CEO 苏姿丰、Nvidia 的 CEO 黄仁勋 都是华人。 还有更多的美国著名的科技企业中&#xff0c;都有着华人的身影&#xff0c;这些华人&#xff…

chatgpt赋能python:Python如何断开Socket连接:

Python如何断开Socket连接&#xff1a; 介绍 Socket是一种网络通信协议&#xff0c;用于实现不同计算机之间的通信。Python提供了内置的socket库&#xff0c;使得用户能够在Python编程中使用Socket连接。 虽然Socket连接是一个有用的工具&#xff0c;但有时需要在需要时手动…

ChatGPT 打字机效果原理

一、背景 在初次使用 ChatGPT 时&#xff0c;我就被打字机的视觉效果吸引。总是感觉似曾相识&#xff0c;因为经常在一些科幻电影中看到&#xff0c;高级文明回传的信息在通讯设备的屏幕上以打字机效果逐步出现&#xff0c;在紧张的氛围下&#xff0c;输出人类可读的内容&…

ChatGPT调教指北

ChatGPT调教指北 ChatGPT某些对话需要通过特定的指示&#xff0c;才能让回复出满意的答案。以下是一些有趣且常用的调教信息。 如需更详细请查看&#xff1a;https://github.com/labi-xiaoxin/chatgpt-prompts-zh 如果还不会使用ChatGPT&#xff0c;请查看公众号【迷茫的21世纪…

我身边35+程序员,的真实现状,其实没那么惨...

1 不会笑青年 我和不会笑青年是在11年&#xff0c;第二家公司的时候遇到的&#xff0c;我们一起四个人同一天入职的&#xff0c;后来成为了四个好朋友。 今天就先拿&#xff0c;这4个人&#xff0c;给大家说说&#xff0c;他们现在都在干啥… 先聊不会笑青年吧&#xff0c;…