簡體   English   中英

如何在C#中生成帶有數據的Excel工作表時顯示進度條

[英]How to show progressbar while generating Excel sheet with data in C#

我試圖在將數據寫入 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 中

您可以使用 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 函數時更新進度條中的值。

**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++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM