当前位置: 首页 > news >正文

读取excel并且显示进度条

读取excel并且显示进度条 

通过C#实现DataGridView加载EXCEL文件,但加载时不能阻塞UI刷新线程,且向UI显示加载进度条。

 #region 左上角导入
        private async void  ToolStripMenuItem_ClickAsync(object sender, EventArgs e)
        {
           
            dataGridView1.DataSource = null;
            dataGridView1.Rows.Clear();
            dataGridView1.Columns.Clear();
            progressBar1.Value = 0;
            progressBar1.Visible = true;

            // 打开文件对话框选择 Excel 文件
            OpenFileDialog file = new OpenFileDialog();
            file.Filter = "Excel文件|*.xlsx";
            if (file.ShowDialog() == DialogResult.OK)
            {
                string fname = file.FileName;
                await LoadExcelDataAsync(fname);  // 异步加载数据
            }
        }
        // 异步加载 Excel 数据
        private async Task LoadExcelDataAsync(string filePath)
        {
            var progress = new Progress<int>(value =>
            {
                progressBar1.Value = value;  // 更新进度条
                label11.Text = $"{value}%";   // Update label to show percentage
            });

            // 在后台线程中执行加载数据的任务
            System.Data.DataTable dataTable = await Task.Run(() => LoadExcelData(filePath, progress));

            // 加载完成后,将数据绑定到 DataGridView
            dataGridView1.DataSource = dataTable;
            progressBar1.Visible = false;  // 隐藏进度条
            label11.Visible = false;  // 隐藏进度条
        }
        // 使用 EPPlus 按行读取 Excel 数据并动态更新进度
        private System.Data.DataTable LoadExcelData(string filePath, IProgress<int> progress)
        {
            FileInfo fileInfo = new FileInfo(filePath);
            using (var package = new ExcelPackage(fileInfo))
            {
        
                ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
                int rowCount = worksheet.Dimension.Rows;
                int columnCount = worksheet.Dimension.Columns;

                // 创建 DataTable 来存储数据
                System.Data.DataTable dt = new System.Data.DataTable();

                // 为 DataTable 添加列
                for (int col = 1; col <= columnCount; col++)
                {
                    dt.Columns.Add(worksheet.Cells[1, col].Text);  // 第一行作为列名
                }

                // 逐行读取数据并添加到 DataTable 中
                int progressInterval = rowCount / 100;  // 每读取一定行数更新进度
                int progressPercentage = 0;
                int rowCountProcessed = 0;

                for (int row = 2; row <= rowCount; row++)  // 跳过第一行作为标题行
                {
                    DataRow newRow = dt.NewRow();
                    for (int col = 1; col <= columnCount; col++)
                    {
                        newRow[col - 1] = worksheet.Cells[row, col].Text;
                    }
                    dt.Rows.Add(newRow);

                    rowCountProcessed++;
                    if (rowCountProcessed % progressInterval == 0)
                    {
                        progressPercentage = (int)((float)rowCountProcessed / rowCount * 100);
                        progress.Report(progressPercentage);  // 更新进度条
                    }
                }

                return dt;
            }
        }

相关文章:

读取excel并且显示进度条

读取excel并且显示进度条 通过C#实现DataGridView加载EXCEL文件&#xff0c;但加载时不能阻塞UI刷新线程&#xff0c;且向UI显示加载进度条。 #region 左上角导入 private async void ToolStripMenuItem_ClickAsync(object sender, EventArgs e) { …...

MySQL多表查询习题

数据内容介绍 数据库中有两个表 ​​​​ 内容如下&#xff1a; 习题 列出所有员工的姓名及其直接上级的姓名。列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。列出部门名称和这些部门的员工信息&#xff0c;同时列出那些没有员工的部门。列出在财务部工作的员…...

HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…...

创新引领,模块化微电网重塑能源格局

根据QYResearch调研团队最新发布的《全球模块化微电网市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;全球模块化微电网市场的规模将扩大至33.1亿美元&#xff0c;且在未来几年内&#xff0c;其年复合增长率&#xff08;CAGR&#xff09;将达到8.8%。 如下图所示…...

LeetCode34:在排序数组中查找元素第一个和最后一个位置

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须…...

汽车广告常见特效处理有哪些?

​汽车广告作为展示汽车性能和外观的重要媒介&#xff0c;常常需要借助特效来增强视觉效果&#xff0c;吸引观众的注意力。以下是一篇关于汽车广告中常见特效处理的文章。 在竞争激烈的汽车市场中&#xff0c;广告不仅是推广产品的工具&#xff0c;更是艺术和科技的结合。特效技…...

Unexpected response code: 400解决

原因&#xff1a;Nginx配置错误&#xff0c;业务服务提供了 websocket 服务&#xff0c;基于 websocket 来实现报表数据的推送&#xff0c;客户在浏览器上查看报表&#xff0c;经过 http 代理将请求传递给后端服务。 解决方案 Nginx中增加websocket配置 location ~/websocket…...

世优科技携手人民中科打造AI数字人智能体助力智慧校园

近日&#xff0c;世优科技与人民中科携手&#xff0c;为中国劳动关系学院开发了一款AI数字人助手&#xff0c;不仅在校园内部承担日常问询、交互工作&#xff0c;还在学校的展厅中担任讲解员的角色&#xff0c;为师生们提供生动详尽的导览服务。 中国劳动关系学院作为中华全国总…...

Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied

激活时执行脚本&#xff0c; permission denied ➜ scripts ./install.sh ./install.sh: line 31: /Users/dry/Library/LaunchAgents/jetbrains.vmoptions.plist: Permission deniedjetbrains.vmoptions.plist 这个文件没权限&#xff0c;打开看了一下 install.sh 这…...

区块链应用第1讲:基于区块链的智慧货运平台

基于区块链的智慧货运平台 网络货运平台已经比较成熟&#xff0c;提供了给货源方提供找司机的交易匹配方案&#xff1b;其中包含这几个角色&#xff1a;货主、承运人(司机、车队长)、监管机构、平台。司机要想接单&#xff0c;依赖于多个中心化的第三方平台&#xff0c;且三方平…...

量化交易系统开发-实时行情自动化交易-风险控制

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说风险控制模块&#xff0…...

深入探索 Seaborn:高级绘图的艺术与实践

引言 在数据科学领域&#xff0c;数据可视化是至关重要的一步。它不仅能够帮助我们更好地理解数据&#xff0c;还能有效地传达信息&#xff0c;支持决策过程。Seaborn 是一个基于 Matplotlib 的高级 Python 数据可视化库&#xff0c;它提供了许多高级绘图功能&#xff0c;使得…...

《现代工业经济和信息化》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《现代工业经济和信息化》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《现代工业经济和信息化》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;山西省工业和…...

【TS】九天学会TS语法——2.TypeScript基本类型及变量声明

今天学习的内容是TypeScript 基本类型&#xff0c;包括 number, string, boolean, any, void 等&#xff0c;以及变量声明的方式和区别。 基本类型介绍变量声明&#xff08;var, let, const&#xff09;类型注解 开始学习 目录 引言 一、基本类型介绍 二、变量声明 1.概念解析 …...

html+js+css实现拖拽式便签留言

前些日子在网上冲浪时&#xff0c;看到一个便签式留言墙&#xff0c;让人耳目一新。心想这个看着不错&#xff0c;额想要。于是便开始搜寻是否有相应开源插件&#xff0c;想将其引入自己的博客中。但是搜寻了一圈&#xff0c;都没有符合预期的,要么功能不符合。有的功能符合&am…...

Redis原理篇——Redis数据结构

Redis原理篇 1、原理篇-Redis数据结构 1.1 Redis数据结构-动态字符串 我们都知道Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 不过Redis没有直接使用C语言中的字符串&#xff0c;因为C语言字符串存…...

pdf文件预览和导出

抢先观看&#xff1a; window.URL.createObjectURL()&#xff1a; 用于根据传入的 Blob 对象或 File 对象生成一个临时的、可访问的 URL,仅在浏览器会话中有效&#xff0c;并且不会上传到服务器。 const url window.URL.createObjectURL(blob);Blob 对象&#xff1a; 是 …...

服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 一台EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。上层划分了4个卷&#xff0c;采用VMFS文件系统&#xff0c;存放虚拟机文件。 服务器存储故障&#xff1a; 存储RAID5阵列中磁盘出现故障&#xff0c;有2块硬盘对应的指示灯亮黄灯…...

快速傅里叶变换(FFT)基础(附python实现)

对于非专业人士&#xff0c;傅里叶变换一直是一个神秘的武器&#xff0c;它可以分析出不同频域的信息&#xff0c;从时域转换到频域&#xff0c;揭示了信号的频率成分&#xff0c;对于数字信号处理&#xff08;DSP&#xff09;、图像、语音等数据来说&#xff0c;傅里叶变换是最…...

使用Docker-compose安装mysql5.7

1.首先选择一个目录用来存放docker-compse文件以及mysql的数据&#xff08;例如logs、conf&#xff09; cd /home mkdir mysql vi docker-compose.yml2.填写docker-compse.yml内容 version : 3 services:mysql:# 容器名(以后的控制都通过这个)container_name: mysql# 重启策略…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...