当前位置: 首页 > 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;
            }
        }

http://www.lryc.cn/news/479916.html

相关文章:

  • MySQL多表查询习题
  • HTML静态网页成品作业(HTML+CSS)——阜阳剪纸介绍设计制作(1个页面)
  • 创新引领,模块化微电网重塑能源格局
  • LeetCode34:在排序数组中查找元素第一个和最后一个位置
  • 汽车广告常见特效处理有哪些?
  • Unexpected response code: 400解决
  • 世优科技携手人民中科打造AI数字人智能体助力智慧校园
  • Mac intel 安装IDEA激活时遇到问题 jetbrains.vmoptions.plist: Permission denied
  • 区块链应用第1讲:基于区块链的智慧货运平台
  • 量化交易系统开发-实时行情自动化交易-风险控制
  • 深入探索 Seaborn:高级绘图的艺术与实践
  • 《现代工业经济和信息化》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 【TS】九天学会TS语法——2.TypeScript基本类型及变量声明
  • html+js+css实现拖拽式便签留言
  • Redis原理篇——Redis数据结构
  • pdf文件预览和导出
  • 服务器数据恢复—RAID5阵列硬盘坏道掉线导致存储不可用的数据恢复案例
  • 快速傅里叶变换(FFT)基础(附python实现)
  • 使用Docker-compose安装mysql5.7
  • 如何管理PHP的API部署环境
  • web——sqliabs靶场——第一关
  • tartanvo ubuntu 20.04部署
  • SpringBoot整合Freemarker(三)
  • Android 一个APP打开另一个app的两种方式,需添加QUERY_ALL_PACKAGES权限
  • <数据集>草莓叶片病害识别数据集<目标检测>
  • React 中 `key` 属性的警告及其解决方案
  • OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示
  • 濮良贵《机械设计》第十版课后习题答案全解PDF电子版
  • Python进阶语法探索:列表推导式
  • java合并图片与文字