使用进度条使用c#从excel文件中读取数据

时间:2013-11-10 13:26:16

标签: c# .net-4.0

我在应用程序读取并从Excel工作表中获取数据时使用进度条时出现问题

这就是我想要做的事情 - :

  • 我的应用程序从工作簿中各种Excel工作表的单元格中读取数据
  • 读取数据后,会向用户显示一个消息框,其中显示“文件已成功读取”
  • 我需要在从文件中读取数据时在表单中运行进度条,并且需要在弹出消息框之前显示%完成次数

这就是我所做的 - :

  • 我添加了后台工作人员和进度条
  • 这是调用Run worker的代码片段,单击按钮并选择要读取的文件时,将调用RunWorkerAsync。

    // Start the BackgroundWorker.
            fileReadingbackgroundWorker.RunWorkerAsync();
    
  • 报告进度的摘录

    int percentProcessFile =1;
    for (int i = 1; i <= countSheets; i++)
    {
        readSheet = (Excel.Worksheet)excelWorkbook.Worksheets.get_Item(i);
    
        for (int row = 2; row <= 100; row++)
        {
            if (readSheet.Cells[1][row].Text.ToString() != "")
            {
                for (int column = 1; column <= 15; column++)
                {
                    String Key = readSheet.Cells[1][row].Text.ToString();
                    String readCaptionCell = readSheet.Cells[column][1].Text.ToString();
                    String readCurrentCell = readSheet.Cells[column][row].Text.ToString();
                    if (readSheet.Name == "ISMB")
                          ISMBSections.Add(Key, readCaptionCell, readCurrentCell);
                    else if (readSheet.Name == "ISMC")
                          ISMCSections.Add(Key, readCaptionCell, readCurrentCell);
                 }                        
           }
           else
           {
               break;
           }
           precentProgressFile++;
           fileReadingbackgroundWorker.ReportProgress(precentProgressFile);
       }   
    }
    

fileReadingbackgroundWorker.ReportProgress(precentProgressFile);抛出异常

  • 我还添加了以下几行

    private void fileReadingbackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 1; i <= 100; i++)
        {
            // Wait 100 milliseconds.
            Thread.Sleep(100);
            // Report progress.
            fileReadingbackgroundWorker.ReportProgress(j);
    
        }
    }
    
    private void fileReadingbackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        fileReadingProgressBar.Value = e.ProgressPercentage;
    }
    

第二个代码段中的行fileReadingbackgroundWorker.ReportProgress(precentProgressFile);会引发异常

我无法理解这里出了什么问题。 我使用的是Visual Studio 12.0和.Net 4.0 如果您有任何问题,请询问

Accessing UI Control from BackgroundWorker Thread - C#不重复 原因是我没有在任何地方使用DispatcherInvoke。

1 个答案:

答案 0 :(得分:0)

BackgroundWorker有一个名为WorkerReportsProgress的属性,需要将其设置为true才能报告进度。

相关问题