带进度条Excel报表导出

 最近在做一家公司的奖佣金系统,用到了Excel报表导出问题.陈述下自己的实现方法.

首先创建个进度条的窗体,该窗体比较简单,放个进度条控件,加个属性 进度条最大的值.代码如下:

 

public   partial   class  viewProgressBarForm : Form
{
       
private int m_totalSize; //Total Size
       private int m_position; //Position

      
public viewProgressBarForm(){
         InitializeComponent();
      }


     
public bool Increase(int nValue)
        
{

            
if (nValue > 0)
            
{

                
if (progressBar1.Value + nValue < progressBar1.Maximum)
                
{

                    progressBar1.Value 
+= nValue;

                    
return true;

                }


                
else
                
{

                    progressBar1.Value 
= progressBar1.Maximum;

                    
this.Close();

                    
return false;

                }


            }


            
return false;

        }


      
public int totalSize{
           
set {m_totalSize = value;}
           
get {return m_totalSize;}
      }

}

 

为了在显示进度条时候不影响窗体的响应.需要在使用进度条主窗体里建立委托方法.代码如下:

 

// 显示进度条委托
         delegate   void  ShowProgressDelegate( int  totalStep,  int  currentStep,  string  message);
       
        
void  ShowProgress( int  totalDigits,  int  digitsSoFar,  string  message)
        
{
            
            
if (progressBarForm.getProgressBar().InvokeRequired == false)
            
{
               progressBarForm.totalSize
=totalDigits;
                progressBarForm.Increase(digitsSoFar);
                progressBarForm.setMessage(message); 
//进度条上的中文信息
                
//检查是否已经取消
                if (progressBarForm.isCancel)
                
{
                    
                    
return;
                }


                
//进查导入任务是否完成
                if (digitsSoFar  == totalDigits)
                
{
                                      progressBarForm.Close();
                }

            }

            
// Transfer control to correct thread
            else
            
{
                ShowProgressDelegate showProgress 
= new ShowProgressDelegate(ShowProgress);
                
object inoutCancel = false// Avoid boxing and losing our return value
                Invoke(showProgress, new object[] { totalDigits, digitsSoFar, message });
 
            }

        }

 

主要Excel导出方法:

 

public   void  exportExcel()
{
            Excel.ApplicationClass MyExcel 
= null
            Excel.Workbooks MyWorkBooks 
= null;
            Excel.Workbook MyWorkBook 
= null;
            
try
            
{
                  MyExcel  
= new Excel.ApplicationClass();
                  MyWorkBooks 
= MyExcel.Workbooks;
                   MyExcel.Visible 
= false;
                   
int n = 1;
                   
foreach(object obj in list){
                          MyWorkBook 
= MyWorkBooks._Open(strFileName/*报表模版*/, Missing.Value, Missing.Value, Missing.Value, Missing.Value
                         , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                        , Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                          Excel.Worksheet xSheet 
= (Excel.Worksheet)MyWorkBook.Sheets[1];
                           xSheet.Cells[x, y] 
= obj.value;//设定值
                           xSheet.SaveAs(strSaveFileName/*保存路径*/, Missing.Value, Missing.Value, Missing.Value, Missing.Value,        Missing.Value,             Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                    
if (MyWorkBook != null) MyWorkBook.Close(false, Missing.Value, Missing.Value);
                    ShowProgress(totals, n, 
"文件: " + strSaveFileName + " ...");
                     n
++;
                   }

            }
catch(Exception ex){
                
throw ex;
           }
finally{
                 
if (MyWorkBooks != null) MyWorkBooks.Close();
                
if (MyExcel != null) MyExcel.Quit();
           }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值