我想实现在导出excel时显示一进度条,注意不是状态样那里的,但是进度条总是不行,有人知道为什么吗?
思路:在excel生成一行时(通过for循环),就改变一次processbar的值,gridView中有多少行,就用100除以行数。
progressBarValue,progressBarStep为公共变量,在excel生成一行时(通过for循环)不断改变它的值,再传到进度条窗口中显示。
代码如下:
进度条窗口代码:
public partial class Processbar : Form
{
public int progressBarValue;
public int progressBarStep;
public Processbar()
{
InitializeComponent();
} private void 操作进行中_Load(object sender, EventArgs e)
{
SetProcessbar();
}
private void SetProcessbar()
{
//public static System.Windows.Forms.ToolStripProgressBar _toolStripProgressBar1this.progressBar1;
progressBar1.Maximum = 100;//设置最大长度值
//progressBar1.Value = 0;//设置当前值
progressBar1.Step = 100 / (EquipmentMS.Dal.DataGripViewExport._gridView.RowCount);//设置没次增长多少
//progressBar1.Value += progressBar1.Step;//让进度条增加一次
progressBar1.Value = progressBarValue;
progressBar1.Step = progressBarStep;
if (progressBarValue > 99)
{
this.Close();
}导出excel时的部分代码(主要是控制进度条的值):
public static void ExportTOExcel()
{
if (gridView.Rows.Count == 0)
{
MessageBox.Show("没有数据可供导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出文件保存路径";
saveFileDialog.ShowDialog();
string strName = saveFileDialog.FileName;
if (strName.Length != 0)
{
//new EquipmentMS.Equipment.Processbar().ShowDialog();
//toolStripProgressBar1.Visible = true;
showPressbarThreadStart();
System.Threading.Thread.Sleep(1000);
System.Reflection.Missing miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Application.Workbooks.Add(true); ;
excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。
if (excel == null)
{
MessageBox.Show("EXCEL无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));
Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
sheet.Name = "sheet1"; //生成字段名称
for (int i = 1; i < gridView.ColumnCount; i++)
{
excel.Cells[1, i ] = gridView.Columns[i].HeaderText.ToString();
}
//填充数据
for (int i = 0; i < gridView.RowCount - 1; i++)
{
for (int j = 1; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].Value == typeof(string))
{
excel.Cells[i + 2, j] = "" + gridView[i, j].Value.ToString();
}
else
{
excel.Cells[i + 2, j] = gridView[j, i].Value.ToString();
}
}
EquipmentMS.Equipment.Processbar b = new EquipmentMS.Equipment.Processbar();
b.progressBarValue = b.progressBarValue + (100 / gridView.RowCount);
//(EquipmentMS.Equipment.Processbar.progressBarValue) += EquipmentMS.Equipment.Processbar.progressBarStep;
}
sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
book.Close(false, miss, miss);
books.Close();
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
GC.Collect();
MessageBox.Show("数据已经成功导出到:" + saveFileDialog.FileName.ToString(), "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
showPressbarThreadAbort();
//EquipmentMS.Equipment.Processbar.Close();
//EquipmentMS.Equipment.Processbar.progressBarValue = 0;
//EquipmentMS.Equipment.Processbar.Visible = false;
}
}
}
思路:在excel生成一行时(通过for循环),就改变一次processbar的值,gridView中有多少行,就用100除以行数。
progressBarValue,progressBarStep为公共变量,在excel生成一行时(通过for循环)不断改变它的值,再传到进度条窗口中显示。
代码如下:
进度条窗口代码:
public partial class Processbar : Form
{
public int progressBarValue;
public int progressBarStep;
public Processbar()
{
InitializeComponent();
} private void 操作进行中_Load(object sender, EventArgs e)
{
SetProcessbar();
}
private void SetProcessbar()
{
//public static System.Windows.Forms.ToolStripProgressBar _toolStripProgressBar1this.progressBar1;
progressBar1.Maximum = 100;//设置最大长度值
//progressBar1.Value = 0;//设置当前值
progressBar1.Step = 100 / (EquipmentMS.Dal.DataGripViewExport._gridView.RowCount);//设置没次增长多少
//progressBar1.Value += progressBar1.Step;//让进度条增加一次
progressBar1.Value = progressBarValue;
progressBar1.Step = progressBarStep;
if (progressBarValue > 99)
{
this.Close();
}导出excel时的部分代码(主要是控制进度条的值):
public static void ExportTOExcel()
{
if (gridView.Rows.Count == 0)
{
MessageBox.Show("没有数据可供导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
else
{
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出文件保存路径";
saveFileDialog.ShowDialog();
string strName = saveFileDialog.FileName;
if (strName.Length != 0)
{
//new EquipmentMS.Equipment.Processbar().ShowDialog();
//toolStripProgressBar1.Visible = true;
showPressbarThreadStart();
System.Threading.Thread.Sleep(1000);
System.Reflection.Missing miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Application.Workbooks.Add(true); ;
excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。
if (excel == null)
{
MessageBox.Show("EXCEL无法启动!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));
Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;
sheet.Name = "sheet1"; //生成字段名称
for (int i = 1; i < gridView.ColumnCount; i++)
{
excel.Cells[1, i ] = gridView.Columns[i].HeaderText.ToString();
}
//填充数据
for (int i = 0; i < gridView.RowCount - 1; i++)
{
for (int j = 1; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].Value == typeof(string))
{
excel.Cells[i + 2, j] = "" + gridView[i, j].Value.ToString();
}
else
{
excel.Cells[i + 2, j] = gridView[j, i].Value.ToString();
}
}
EquipmentMS.Equipment.Processbar b = new EquipmentMS.Equipment.Processbar();
b.progressBarValue = b.progressBarValue + (100 / gridView.RowCount);
//(EquipmentMS.Equipment.Processbar.progressBarValue) += EquipmentMS.Equipment.Processbar.progressBarStep;
}
sheet.SaveAs(strName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
book.Close(false, miss, miss);
books.Close();
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
GC.Collect();
MessageBox.Show("数据已经成功导出到:" + saveFileDialog.FileName.ToString(), "导出完成", MessageBoxButtons.OK, MessageBoxIcon.Information);
showPressbarThreadAbort();
//EquipmentMS.Equipment.Processbar.Close();
//EquipmentMS.Equipment.Processbar.progressBarValue = 0;
//EquipmentMS.Equipment.Processbar.Visible = false;
}
}
}
解决方案 »
- 求助???DataGridView能设置单元格的字体和颜色吗??
- 请问ListView在Details显示方式下怎么自动换行?
- C# 调用API创建窗口
- 关于会员推广会员时,是记录IP好,还是记录主机名好?
- 关于HttpWebRequest的问题(都大半天了,急死人了)
- 请问一个DataSet,DataTable问题[大小写],我给的分都比较高
- C#编写winform程序时的配置文件怎么弄?本人查阅过网络后,不得答案,遂提问!!请帮助
- 最近这是怎么了,人才市场如此冷清
- 无法返回当前登录用户信息.
- 请问如何在两个结构不同的表之间倒大量的数据?
- C#获取盘的属性 获取这个盘是“本地硬盘”,“虚拟光驱”,还是“可移动盘”
- 急,如何获取局域网中某台机器的磁盘信息?
进度条窗口和获取进度条的值是分别在不同的winform文件的。
1、进度条窗口processbar.cs: public int progressBarValue;
public int progressBarStep;
......
progressBar1.Step = 100 / (EquipmentMS.Dal.DataGripViewExport._gridView.RowCount);//设置没次增长多少
//progressBar1.Value += progressBar1.Step;//让进度条增加一次
progressBar1.Value = progressBarValue;
progressBar1.Step = progressBarStep; 2、获取进度条的值DataGripViewExport.cs:
//填充数据
for (int i = 0; i < gridView.RowCount - 1; i++)
{
for (int j = 1; j < gridView.ColumnCount; j++)
{
if (gridView[j, i].Value == typeof(string))
{
excel.Cells[i + 2, j] = "" + gridView[i, j].Value.ToString();
}
else
{
excel.Cells[i + 2, j] = gridView[j, i].Value.ToString();
}
}
EquipmentMS.Equipment.Processbar b = new EquipmentMS.Equipment.Processbar();
b.progressBarValue = b.progressBarValue + (100 / gridView.RowCount);
//(EquipmentMS.Equipment.Processbar.progressBarValue) += EquipmentMS.Equipment.Processbar.progressBarStep;
}
b.progressBarValue = b.progressBarValue + (100 / gridView.RowCount);
//(EquipmentMS.Equipment.Processbar.progressBarValue) += EquipmentMS.Equipment.Processbar.progressBarStep;
EquipmentMS.Equipment.Processbar b = new EquipmentMS.Equipment.Processbar();
这个怎么在For循环里啊 错在这里吧
EquipmentMS.Equipment.Processbar 这个你自己写的控件?
b.progressBarValue = b.progressBarValue + (100 / gridView.RowCount); // 赋值给进度条的值看得明白吗?