如何实现将datagridview的内容保存成excel时显示进度条

问题描述

各位大虾:请问如何在保存数据到excel的过程中显示保存的进度条那。我现在讲datagridview的内容保存到excel时总是会卡顿很久,线做一个进度条显示保存的进度。但是不知道怎么弄,求指点!注意:需要真实显示保存的进度状态。

解决方案

解决方案二:
保存时如果你是遍历grid,那就加个progressbar就是了
解决方案三:
引用楼主guangzi8531的回复:

各位大虾:请问如何在保存数据到excel的过程中显示保存的进度条那。我现在讲datagridview的内容保存到excel时总是会卡顿很久,线做一个进度条显示保存的进度。但是不知道怎么弄,求指点!注意:需要真实显示保存的进度状态。

你在循环的时候把进度条加在循环体内就行了啊.例如:me.pb.MaxValue=me.datagridview.rows.countforiLoopasinteger=0tome.datagridview.rows.countme.pb.Value=iloop+1next
解决方案四:
http://blog.csdn.net/lightlater/article/details/8092991使用BackgroundWorker进行进度条控制
解决方案五:
privateBackgroundWorkerbkWorker=newBackgroundWorker();///<summary>///步进值///</summary>privateintpercentValue=0;publicForm1(){InitializeComponent();bkWorker.WorkerReportsProgress=true;bkWorker.WorkerSupportsCancellation=true;bkWorker.DoWork+=newDoWorkEventHandler(DoWork);///添加一个事件处理程序this.bkWorker.DoWork+=newDoWorkEventHandler(DataGridViewtoExcel);bkWorker.ProgressChanged+=newProgressChangedEventHandler(ProgessChanged);bkWorker.RunWorkerCompleted+=newRunWorkerCompletedEventHandler(CompleteWork);}privatevoidbutton1_Click(objectsender,EventArgse){percentValue=10;this.progressBar1.Maximum=1000;//执行后台操作bkWorker.RunWorkerAsync();}publicvoidDataGridViewtoExcel(objectsender,DoWorkEventArgse){//导出到execltry{if(dataGridView1.Rows.Count==0){toolStripStatusLabel1.Text="当前时间点没有数据,请重新选择时间范围!";}else{Microsoft.Office.Interop.Excel.Applicationexcel=newMicrosoft.Office.Interop.Excel.Application();excel.Visible=false;excel.Application.Workbooks.Add(true);for(inti=0;i<dataGridView1.Columns.Count;i++){excel.Cells[1,i+1]=dataGridView1.Columns[i].HeaderText;}for(inti=0;i<dataGridView1.Rows.Count-1;i++){for(intj=0;j<dataGridView1.Columns.Count;j++){if(dataGridView1[j,i].ValueType==typeof(string)){excel.Cells[i+2,j+1]="'"+dataGridView1[j,i].Value.ToString();}else{excel.Cells[i+2,j+1]=dataGridView1[j,i].Value.ToString();}}}Worksheetworksheet=(Worksheet)excel.ActiveSheet;worksheet.SaveAs(System.Windows.Forms.Application.StartupPath+"\excel\"+DateTime.Now.ToString("yyyyMMddHHmmss")+".xls",Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);excel.DisplayAlerts=false;excel.AlertBeforeOverwriting=false;excel.Quit();excel=null;}}catch(Exceptionex){MessageBox.Show(ex.Message,"错误提示");}toolStripStatusLabel1.Text="数据完成!";}publicvoidDoWork(objectsender,DoWorkEventArgse){//事件处理,指定处理函数e.Result=ProcessProgress(bkWorker,e);}publicvoidProgessChanged(objectsender,ProgressChangedEventArgse){//bkWorker.ReportProgress会调用到这里,此处可以进行自定义报告方式this.progressBar1.Value=e.ProgressPercentage;intpercent=(int)(e.ProgressPercentage/percentValue);this.label1.Text="处理进度:"+Convert.ToString(percent)+"%";}publicvoidCompleteWork(objectsender,RunWorkerCompletedEventArgse){this.label1.Text="处理完毕!";}privateintProcessProgress(objectsender,DoWorkEventArgse){for(inti=0;i<=1000;i++){if(bkWorker.CancellationPending){e.Cancel=true;return-1;}else{//状态报告bkWorker.ReportProgress(i);//等待,用于UI刷新界面,很重要System.Threading.Thread.Sleep(15);}}return-1;}privatevoidForm1_Load(objectsender,EventArgse){stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=temp21.mdb";OleDbConnectionconn=newOleDbConnection(strConn);stringstrExcel="";DataSetds=newDataSet();strExcel="select*from02";OleDbDataAdapterda=newOleDbDataAdapter(strExcel,strConn);da.Fill(ds);dataGridView1.DataSource=ds.Tables[0];}

解决方案六:
http://download.csdn.net/detail/caozhy/4832657
解决方案七:
必须明白使用进度条的意义和用处。只要运行时间长一些的情况的使用。运行时间不到3秒的情况下使用进度条毫无意义。因为,看不到进度条或太瞬间的。
解决方案八:
我datagridview几万条数据保存到excel也几乎是秒写以前我一条条写也是很慢,后来使用一次性写到数组再写入excel的range.秒写.什么进度表什么的,不用管了,优化你的导出效率就行了我贴个给你参考一下PublicSubDatagridview2Excel(ByValDtgAsDataGridView)IfDtg.RowCount>0ThenTryDimdatav=CType(Dtg.DataSource,DataView)'IfTypeOfDtg.DataSourceIsDataViewThen'datav=CType(Dtg.DataSource,DataView)'ElseIfTypeOfDtg.DataSourceIsDataSetThen'datav=CType(Dtg.DataSource,DataSet).Tables(0).DefaultView'ElseIfTypeOfDtg.DataSourceIsDataTableThen'datav=CType(Dtg.DataSource,DataTable).DefaultView'EndIfDimi,jAsIntegerDimrowsAsInteger=datav.CountDimcolsAsInteger=datav.Table.Columns.CountDimDataArray(rows-1,cols-1)AsStringDimmyExcelAsExcel.Application=NewExcel.ApplicationFori=0Torows-1Forj=0Tocols-1IfIsDBNull(datav(i).Item(j))ThenDataArray(i,j)=""ElseDataArray(i,j)=datav(i).Item(j).ToStringEndIfNextNextmyExcel.Application.Workbooks.Add(True)myExcel.Visible=TrueForj=0Tocols-1myExcel.Cells(1,j+1)=datav.Table.Columns(j).ColumnNameNextmyExcel.Range("A2").Resize(rows,cols).Value=DataArrayCatchexpAsExceptionMessageBox.Show(exp.Message)EndTryElseMessageBox.Show("没有数据!")EndIfEndSub

看如上代码,原理就是将所有内容先写到数组,再将该数组一次性赋值给excel的range,非常快和一条条遍历去操作excel,那种速度你懂的。

时间: 2024-08-31 11:04:36

如何实现将datagridview的内容保存成excel时显示进度条的相关文章

C#中将DataSet的内容写成XML时如何格式化字段数据

许多读者经常询问一个问题,那就是在将DataSet的内容写成XML时,如何格式化字段数据.最常见的需求,就是希望日期时间值与数值数据能够以所需的格式呈现于XML中.欲达此目的,可以采用下列两种作法: ◆使用XmlConvert类. ◆将一个XSLT转换套用至DataSet数据的XML表示. 程序范例 图 12-23所示是程序范例CH12_DemoForm018.cs的执行画面,我们发现,从DataSet写成XML的日期与薪资字段数据皆已采用我们所要求的格式.基本上,本范例是利用XmlConver

js-怎么将aspx页面指定内容导成excel报表

问题描述 怎么将aspx页面指定内容导成excel报表 我想用JS 或者jquery 做一个导报表功能,求教,要各大浏览器都支持的 解决方案 datatable直接转

c#2005,我现在已经将数据库里的数据读取出来了,现在要把读取出来的数据直接保存成excel文件,应该怎么写

问题描述 privatevoidbutton1_Click(objectsender,EventArgse){stringstrConn="DataSource=xxx.xxx.xxx.xxx;InitialCatalog=xxxxx;UserID=sa;Pwd=xxxxx";SqlConnectionconn=newSqlConnection(strConn);conn.Open();stringstrSql="SELECTx1,x2,x3,x4FROMEmployeeMs

excel-C#保存为Excel时提示Access to the path &amp;amp;#39;.xlsx&amp;amp;#39; is denied.

问题描述 C#保存为Excel时提示Access to the path '.xlsx' is denied. 昨天还好好的,好像也没干嘛,保存时就出问题了. 然后试着在程序中添加如下代码,取消文件夹的只读权限.代码如下: System.IO.DirectoryInfo DirInfo = new DirectoryInfo(excelFilePath); if (DirInfo.Attributes == FileAttributes.ReadOnly) DirInfo.Attributes

c#-将datagridview的数据导出为excel时出现异常

问题描述 将datagridview的数据导出为excel时出现异常 "System.InvalidCastException"类型的未经处理的异常在 FaceTest.exe 中发生 其他信息: 无法将类型为"Microsoft.Office.Interop.Excel.ApplicationClass"的 COM 对象强制转换为接口类型"Microsoft.Office.Interop.Excel._Application".此操作失败的原因

基于jQuery替换table中的内容并显示进度条的代码_jquery

效果图如下:http://jialiren.sinaapp.com/jdt/ Html代码如下: 复制代码 代码如下: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>进度条列</title> <script type=&qu

把html页面的部分内容保存成新的html文件的jquery代码_jquery

复制代码 代码如下: //保存聊天记录到本地 function save_record() { //取得当前日期作为文件名 var time=new Date(); var filename=time.toLocaleDateString(); //获取当前页面部分内容 var record=$("#contentList").html(); //打开新窗口保存 var winRecord=window.open('about:blank','_blank','top=500'); w

C# DataSet的内容写成XML时如何格式化字段数据_C#教程

欲达此目的,可以采用下列两种作法: ◆使用XmlConvert类. ◆将一个XSLT转换套用至DataSet数据的XML表示. 程序范例 本范例是利用XmlConvert类来完成字段的格式化操作. 复制代码 代码如下: // 导入命名空间. using System.Xml; using System.Data.SqlClient; using System.IO; private void btnWriteDataSetToXml_Click(object sender, EventArgs

Freetextbox内容存成word文档,并保留格式

问题描述 怎么才能将Freetextbox里的内容存成word并保留格式呢?我想到用剪切板来复制粘贴,试过很多方法,最后发现操作剪切板的函数提供的格式就那么几种,例如"Text"这样粘过去就没发保留格式了.是不是有我不知道的格式?请高手指教,另外谁有好方法请分享一下,谢谢. 解决方案 解决方案二:Freetextbox中取出来的是html形式的吧解决方案三:引用1楼wxr0323的回复: Freetextbox中取出来的是html形式的吧源码 可以是html,也可以是文本.但文本保留不