如何使用C#中的数据生成Excel工作表时如何显示进度栏

问题描述 投票:3回答:2

我试图在将数据写入Excel工作表时显示进度栏。但无法显示。

           try
           {
            ShowProgressBarForExcelSheet();
            i18NText = I18N.Xlate("PREPARING_EXCEL_SHEET", "Excel-Tabelle ist immer vorbereitet...", null, Assembly.GetExecutingAssembly());
            oProgressBarFO.UpdateLogSearchStatus(i18NText);

            workSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkBook.Sheets[1];
            excel.ActiveSheet.Cells[headerRow, 1] = "Datum/Zeit";
            excel.ActiveSheet.Cells[headerRow, 3] = "Arbeitsplatz";
            excel.ActiveSheet.Cells[headerRow, 5] = "Benutzername";
            excel.ActiveSheet.Cells[headerRow, 7] = "Aktion";
            excel.ActiveSheet.Cells[headerRow, 9] = "Zugriffstype";
            excel.ActiveSheet.Cells[headerRow, 11] = "Klartext";
            excel.ActiveSheet.Cells[headerRow, 13] = "Objekt Type";
            excel.ActiveSheet.Cells[headerRow, 15] = "Patienten-Nr.";
            excel.ActiveSheet.Cells[headerRow, 17] = "Fall-Nr.";
            excel.ActiveSheet.Cells[headerRow, 19] = "Vorgangs-Nr.";
            excel.ActiveSheet.Cells[headerRow, 21] = "Objekt Value";
          }

将数据写入Excel工作表时,有什么方法可以显示进度条?用户无法编辑excel工作表,或者必须为用户禁用excel工作表,直到所有数据都填充到excel中]

c#
2个回答
3
投票

您可以使用BackgroundWorker有效地实现这一目标。随附的示例显示了如何在C#中执行此操作:

    private void button1_Click(object sender, EventArgs e)
    {
        int ProgressToBeupdated = 100;

        BackgroundWorker WorkerThread = new BackgroundWorker();

        WorkerThread.WorkerReportsProgress = true;

        WorkerThread.DoWork += WorkerThread_DoWork;
        WorkerThread.ProgressChanged += WorkerThread_ProgressChanged;

        WorkerThread.RunWorkerAsync(new object());


    }

    void WorkerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

    void WorkerThread_DoWork(object sender, DoWorkEventArgs e)
    {

        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(500);
            (sender as BackgroundWorker).ReportProgress(i);       
        }
    }

在此示例中,我使用的是按钮和进度条控件,该控件每半秒显示一次进度(基本上是使线程进入睡眠状态,直到这只是一个示例)。

因此,您可以为DoWork设置事件,在其中您需要将数据写入excel工作表,在那里您可以计算任务后的百分比,然后使用ReportProgress(int percent)更新要在进度中显示的百分比酒吧。

您需要定义ProgressChanged事件以在dowork事件处理程序中调用ReportProgress函数时更新进度条中的值。


0
投票
**Displaying progress bar while inserting multiple records to database.**

progressBar1.Maximum = dtTable.Rows.Count;
progressBar1.Value = progressBar1.Minimum;

foreach (DataRow vRow in dtTable.Rows)
{
    //TODO : Your INSERT, UPDATE, DELETE Or any Operation/Execution
    progressBar1.Value++;
}
© www.soinside.com 2019 - 2024. All rights reserved.