python实现,excel随机抽取特定行到新表中(附上源码和桌面软件)

article/2025/8/21 21:33:39

引言

最近,经常抽查excel表中的一些行,到一个新表中;于是想着写一个程序,自动完成。

功能

基础功能

  • 从原表中随机抽取n行,到一个新表中(可用于老师抽查学生作业,领导抽查核酸(坏笑.jpg))
  • 抽取某行后,将原表中该行背景填充为黄色。每次抽查时,首先判断当前行是否为黄色,若不是,则抽查;若是,则换成下一行;保证了多次抽查,没有重复名单。

基础功能简单,适用于普通用户或者急于使用的用户。只需要原表的路径(注意:是绝对路径,如C:\Users\admin\Desktop\2.xlsx),和要抽取的行数即可,抽取后生成的新表,将会保存在和软件统一目录下。

软件界面如下
在这里插入图片描述
点击确定后,显示导出成功。
在这里插入图片描述
然后,在和软件相同的目录下,找抽查.xlsx,打开即可。

软件下载地址

链接:https://pan.baidu.com/s/1TCePlzptsMwqrCKFT7CVGA 
提取码:zjoy 

拓展功能

代码基本框架已经给出,懂代码的朋友,根据需求酌情修改即可。
如可以实现,多个工作簿的读取,给行填充不同的颜色,随机抽查的算法根据使用场景酌情改进等等。
代码写的有些仓促,有不足或者可以改进的地方,欢迎各位同仁讨论交流。
源码已经给出。

源码

from openpyxl import load_workbook, Workbook
from openpyxl.styles import PatternFill
import random
import sys
import os
import tkinter as tk
import tkinter.messagebox# 黄色 FFFFFF00
# 粉色 ffc7ce# 生成随机数,并排序
def gen_random(l, r, cnt):a = []a = random.sample(range(l, r + 1), cnt)a.sort()return a# 随机选取学生的函数, 可以在进一部优化
def gen_random_students(l, r, cnt):print(cnt)a = random.sample(range(l, (int)(r / 2)), (int)(cnt / 2))b = random.sample(range((int)(r / 2), r), cnt - (int)(cnt / 2))c = a + bc.sort()print("生成的随机数:")print(c)return cdef new_excel(filename, first_row):a = Workbook()# 获取当前活跃的工作薄ws = a.activews.title = "Sheet1"# 插入第一行标题ws.append(first_row)a.save(filename=filename)return adef deal(excel_path, sheet_name, cnt, col_l, col_r, wb2):""":param excel_path: excel的绝对路径:param sheet_name: 工作表名称:param cnt: 抽查人数:param col_l: 从第几列开始取:param col_r: 到第几列结束:param wb2: 要保存的新表:return:"""# 保存路径new_excel_path = os.path.dirname(os.path.realpath(sys.argv[0]))# 默认可读写,若有需要可以指定write_only和read_only为Truewb = load_workbook(excel_path)# 根据sheet名字获得sheetsheet1 = wb[sheet_name]# 获得最大列和最大行max_row = sheet1.max_rowmax_col = sheet1.max_columnprint("行数max_row: " + str(max_row))if col_r == -1:col_r = max_colif wb2 == None:wb2 = Workbook()ws = wb2.activews.title = "Sheet1"wb2.save(new_excel_path + "\\" + "抽查.xlsx")# 生成随机数,并排序res = gen_random_students(2, max_row, cnt)# 设置颜色填充,FFFFFF00为填充黄色标准色:00000000yellow_fill = PatternFill(fill_type="solid", fgColor="FFFFFF00")# 因为按行,所以返回A1, B1, C1这样的顺序k = 0for i, row in zip(range(1, max_row + 1), sheet1.rows):if i == res[k]:# 本行不合法,换下一行抽if str(row[0].value) == "None" or str(sheet1.cell(row=i, column=1).fill.fgColor.rgb) == "FFFFFF00":print(str(i) + "行不合法 " + str(str(row[0].value)) + "  --->换下一行处理")res[k] += 1continueprint("i: " + str(i), end="  ")print("抽查序号 : " + str(k + 1))k += 1# 本行不为空,且未被抽过list1 = []print(str(i), end=" ")for j, cell in zip(range(col_l, col_r + 1), row):# 当前单元格填充为黄色sheet1.cell(row=i, column=j).fill = yellow_filllist1.append(str(cell.value))print(str(cell.value), end=" ")print("")# 添加抽到的行,到新表中wb2['Sheet1'].append(list1)if k == cnt:break# 保证当遇到抽取的两个数非常近,且之前都被选中的情况res[k] = i + 1 if res[k] <= i else res[k]# 此处待优化解决if k < cnt:print("!!!!未抽查够人数")# 保存修改wb.save(excel_path)wb2.save(new_excel_path + "\\" + "抽查.xlsx")tk.messagebox.showinfo('提示', '导出完成!')passdef start1(excel_path, check_cnt):print(excel_path)print(check_cnt)deal(excel_path, "Sheet1", int(check_cnt), 1, -1, None)# 启动程序
def set_up():window = tk.Tk()window.geometry('500x540+1000+500')window.title('excel 随机抽查行')# 软件介绍label_txt = "本软件旨在随机从excel表中随机抽取部分行到\n新表中,并将已抽取的行填空为黄色,下次不再抽取,\n保证抽出的行是不重复的,直至全部抽查完。\n 结果保存该软件所在位置,名为“抽查.xlsx”"label0 = tk.Label(window, text=label_txt, bg='yellow', font=('KaiTi', 15), justify="left")# 原表路径和输入文本框label1 = tkinter.Label(window, text="原表路径", bg="LightSkyBlue", font=('KaiTi', 20))txt1 = tk.StringVar()t1 = tk.Entry(window, font=20, textvariable=txt1, width=30, state='normal', selectforeground="red")# # 选取表中的,工作薄sheet名称# label2 = tkinter.Label(window, text="sheet名称", bg="pink", font=('KaiTi', 20))# txt2 = tk.StringVar()# t2 = tk.Entry(window, font=20, textvariable=txt2, width=30, state='normal', selectforeground="red")# 要抽查的人数label3 = tkinter.Label(window, text="抽查人数", bg="LightSkyBlue", font=('KaiTi', 20))txt3 = tk.StringVar()t3 = tk.Entry(window, font=20, textvariable=txt3, width=30, state='normal', selectforeground="red")# # 抽查导入新表的名称;若为空时,在当前路径下,新建一个表# label4 = tkinter.Label(window, text="新表路径", bg="pink", font=('KaiTi', 20))# txt4 = tk.StringVar()# t4 = tk.Entry(window, font=20, textvariable=txt4, width=30, state='normal', selectforeground="red")ok = tk.Button(window, text='确定', width=30, bg="violet", command=lambda: start1(txt1.get(), txt3.get()))# 声明label5 = tkinter.Label(window, text="声明:该软件仅供学习使用,\n不得用于任何商业用途", bg="red", font=('KaiTi', 15))# ps:label5 = tkinter.Label(window, text="为了方便大部分用户使用,该软件仅封装了一个简单\n的抽取功能;其实许多复杂地抽取,均可\n以该软件为基础改进,实现定制化抽取。\n代码已开源,欢迎交流。",bg="pink", font=('KaiTi', 12))# 以下内容为各个组件的排版label0.grid(ipadx=10, ipady=10, row=0, columnspan=2)label1.grid(ipadx=10, padx=10, pady=10, row=1, column=0)t1.grid(ipadx=10, ipady=10, pady=10, row=1, column=1)# label2.grid(ipadx=10, padx=10, pady=10, row=2, column=0)# t2.grid(ipadx=10, ipady=10, pady=10, row=2, column=1)label3.grid(ipadx=10, padx=10, pady=10, row=3, column=0)t3.grid(ipadx=10, ipady=10, pady=10, row=3, column=1)# label4.grid(ipadx=10, padx=10, pady=10, row=4, column=0)# t4.grid(ipadx=10, ipady=10, pady=10, row=4, column=1)ok.grid(ipadx=10, ipady=5, pady=10, row=5, columnspan=2)label5.grid(ipadx=10, padx=10, pady=30, row=6, columnspan=2)window.mainloop()pass# 启动程序
set_up()

http://chatgpt.dhexx.cn/article/GH88cqvY.shtml

相关文章

Python自动化操作Excel绘制条形图!

公众号后台回复“图书“&#xff0c;了解更多号主新书内容 作者&#xff1a;黄伟呢 来源&#xff1a;数据分析与统计学之美 大家好&#xff0c;我是黄伟&#xff0c;统计学硕士&#xff0c;CSDN博客专家&#x1f680; 今天&#xff0c;有位朋友在群里面咨询了一个问题。 大致意…

树形数据展示 - 嵌套子表格

一、目标样式 父表格嵌套子表格&#xff0c;子表格默认折叠&#xff0c;点击父表格左侧加号可以展开父表格显示对应的子表格&#xff0c;展示每行数据更详细的信息 目标效果 二、问题样式 &#xff08;一&#xff09;问题说明 父表格展开后&#xff0c;子表格展示成功&#xff…

如何利用Python程序读取Excel创建折线图

如何利用Python程序读取Excel创建折线图 如何利用Python程序读取Excel创建折线图首先第一步&#xff1a;打开命令提示符第二步&#xff1a;通过pip命令安装所需要的工具库 其次打开IDLE开始编程 附录常用的工具库安装pip常用命令常用的工具库常用的marker常用的颜色 如何利用Py…

poi实现对树形结构数据导出excel并合并表格

poi实现对树形结构数据导出excel并合并表格 1.主要逻辑&#xff01;2.完整代码 最近好像得罪了poi&#xff0c;遇到的都是导出word、Excel、pdf的问题。下面我记录一下poi对树形结构的处理&#xff0c;前面先梳理整体思路&#xff0c;文章末尾会贴上完整代码。 首先我们看一下模…

【JAVA】读取excel导入数据库,形成树状结构

最近需要导入一个excel表格&#xff0c;存到数据库并以树状结构读取出来 下面两张图片是需要导入的excel Transactional(rollbackFor Exception.class)public String import(MultipartFile file, Integer projectId) throws Exception {//poi解析excelInputStream inputStrea…

html 树 excel,用Excel实现简易树状关系

引子 - Excel训练营 - 写在前面 树状图对大家来说并不陌生。 树状图&#xff0c;亦称树枝状图&#xff0c;其文绉绉的定义如下&#xff1a; 树形图是数据树的图形表示形式&#xff0c;以父子层次结构来组织对象。是枚举法的一种表达方式。 而excel能够在一定程度上实现比较简单…

JAVA对树状结构数据导出Excel自动合并同级内容代码

针对树形结构数据进行Excel导出并进行合并处理 针对树形结构数据的Excel导出的1 需求1 对象结构2 对数据进行树形结构数据组合并且进行计算工具类3 对数据库的数据进行处理(全文最重要的数据处理方法思路逻辑)4 递归查询 父节点信息5 对数据写入Excel,6 自动合并代码参考我的上…

1、简单的Excel地址导入与树状结构生成

2019独角兽企业重金招聘Python工程师标准>>> 一、地区表结构 DROP TABLE IF EXISTS pro_area; /*!40101 SET saved_cs_client character_set_client */; /*!40101 SET character_set_client utf8 */; CREATE TABLE pro_area (area_id bigint(30) NOT NULL AUT…

树状结构导出到excel表格

/**获取导出实例 */async getAllInstances(SlotId) {//SlotId 数据库词槽idlet result:any [] //导出的数据模块const allData await this.getSimpleInstance(SlotId)//allData根据数据库词槽ID查询到的树状结构数据let count 1//fn 是递归的函数let fn (data, objc,count)…

Excel树状数据绘制导出

//存放数据的二维集合&#xff0c;twoDimensional 中每个List是树状结构的一个分支的所有数据List<List<JSONObject>> twoDimensional new ArrayList<>();//创建对象XSSFWorkbook xwb new XSSFWorkbook();//创建工作表Sheet sheet xwb.createSheet("…

将excel树形结构的数据导入数据库

因为工作需要&#xff0c;用户需要将产品分类通过excel表格导入到数据库中&#xff0c;而产品分类又有一、二、三、四、五级分类。最终通过各种尝试终于实现了数据导入。因此记录下来。 一、excel模板数据结构和数据库表结构介绍 1、 待导入excel模板数据&#xff1a; 2、数据…

关于excel多层级(树形)数据结构,提取成树形结构数据并导出到数据库

在开发中遇到一个问题&#xff0c;就是有一张excel表中的数据时多层级的&#xff0c;不是普通一行一行的&#xff0c;而是&#xff0c;一行对应多行&#xff0c;多行之中的每一行在对应多行数据。形成树形结构&#xff1a; 如上图所示&#xff1a;我遇到的excel表的结构&#x…

使用excel插件treeplan构建决策树

Treeplan是一种构建决策树的很轻巧的excel插件&#xff0c;可以做出比较规范的决策树&#xff0c;并可以自动计算结果。下面以excel2003为例&#xff08;07也可正常使用&#xff09;介绍其使用方法。 一&#xff0e;加载treeplan插件 工具&#xff08;菜单&#xff09;——加载…

EXCEL(VBA)画树程序

看了好多Python写的画树&#xff0c;想看看在Excel里画个树行不行&#xff0c;于是乎花了点时间用VBA写了个&#xff0c;效果还不错&#xff0c;截个图给大家看看。 绿色固定配色版效果&#xff1a; 随机颜色版效果&#xff1a; 附上主代码 Sub test() 画树主程序 作者&#…

Java 树形结构数据生成导出excel文件

效果 用法 String jsonStr "{\"name\":\"aaa\",\"children\":[{\"name\":\"bbb\",\"children\":[{\"name\":\"eee\"},{\"name\":\"fff\",\"children\"…

python 根据树型结构生成指定格式的excel数据

数据 tree {a: {a1: [(a1a, 1)],a2: [(a2a, 1),(a2b, 2),]},b: {b1: [(b1b, 1)],b2: [(b2b, 1)]} }excel 数据格式 代码实现 import xlrd from xlutils.copy import copyold_excel xlrd.open_workbook(1.xls) new_excel copy(old_excel) ws new_excel.get_sheet(0)def wr…

人工智能-高等数学之导数篇

高等数学之导数篇 线性代数的学习基本就先告一个段落了&#xff0c;接着学最重要的微积分&#xff0c;高等数学里的重中之重&#xff0c;也是近代科学的发展利器&#xff0c;微积分主要包括包括极限、微分学、积分学及其应用&#xff0c;而微分学包括求导数的运算&#xff0c;…

机器学习之数学基础 一 .导数

简单的说,导数是曲线的斜率,是曲线变化快慢的反应. 2阶导数是斜率变化快慢的反应,反应曲线的凸凹性 例如:加速度的方向总是指向轨迹曲线凹的一侧. 导数(Derivative)是微积分学中重要的基础概念.一个函数在某一点的导数描述了这个函数在这一点附近的变化率.导数的本质是通过极…

【数值优化之范数与导数】

本文参考书籍《最优化计算方法》 这一部分会介绍一些最优化需要用到的基本数学概念。 目录 1 范数 1.1 向量范数 1.2 矩阵范数 1.3 矩阵内积 2 导数 2.1 梯度与海瑟矩阵 2.2 矩阵变量函数的导数 1 范数 1.1 向量范数 范数相当于是从向量空间到实数域的映射&#xff…

微积分——什么是导数

目录 1. “导数(derivative)”名称的由来 1.1 “derivative”的词源 1.2 “derivative”的数学意义来源 1.3 “derivative”中文翻译为“导数” 2. “导数(derivative)”的数学意义 1. “导数(derivative)”名称的由来 1.1 “derivative”的词源 作为名词&#xff0c;始于…