zoukankan      html  css  js  c++  java
  • C#中EXCEL表格的内容进度条实现

     public  void ExportToExcel()
    {
    DataTable dt = getDataTable();

    if (dt == null)
    {
    MessageBox.Show("没有数据可供导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
    return;
    }

    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
    if (xlApp == null)
    {
    MessageBox.Show("无法创建Excel对象,可能您的电脑未安装Excel");
    return;
    }
    System.Windows.Forms.SaveFileDialog saveDia = new SaveFileDialog();
    saveDia.Filter = "Excel文件(*.xls)|*.xls";
    saveDia.Title = "导出为Excel文件";
    if (saveDia.ShowDialog() == System.Windows.Forms.DialogResult.OK
    && !string.Empty.Equals(saveDia.FileName))
    {
    Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
    Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
    Microsoft.Office.Interop.Excel.Range range = null;
    long totalCount = dt.Rows.Count;
    long rowRead = 0;
    float percent = 0;
    string fileName = saveDia.FileName;

    //写入标题
    for (int i = 0; i < dt.Columns.Count; i++)
    {
    worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
    range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[1, i + 1];
    //range.Interior.ColorIndex = 15;//背景颜色
    range.Font.Bold = true;//粗体
    range.Font.Size = 11;//字体大小
    range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//居中
    //加边框
    range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
    //range.ColumnWidth = 4.63;//设置列宽
    //range.EntireColumn.AutoFit();//自动调整列宽
    //r1.EntireRow.AutoFit();//自动调整行高
    }
    //写入内容

    for (int r = 0; r < dt.DefaultView.Count; r++)
    {
    this.state.Text = "正在导出数据......已导出" + (r + 1).ToString() + "条/共" + dataGridView1.Rows.Count.ToString() + "条";
    this.progressBar1.Value = r + 1;

    for (int i = 0; i < dt.Columns.Count; i++)
    {
    worksheet.Cells[r + 2, i + 1] = dt.DefaultView[r][i];
    range = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[r + 2, i + 1];
    range.Font.Size = 10;//字体大小
    //加边框
    range.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null);
    range.EntireColumn.AutoFit();//自动调整列宽
    }
    rowRead++;
    percent = ((float)(100 * rowRead)) / totalCount;
    System.Windows.Forms.Application.DoEvents();
    }
    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideHorizontal].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
    if (dt.Columns.Count > 1)
    {
    range.Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlInsideVertical].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;
    }
    workbook.Saved = true;
    workbook.SaveCopyAs(fileName);

    workbooks.Close();
    if (xlApp != null)
    {
    xlApp.Workbooks.Close();
    xlApp.Quit();
    int generation = System.GC.GetGeneration(xlApp);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
    xlApp = null;
    System.GC.Collect(generation);
    }

    GC.Collect();//强行销毁
    #region 强行杀死最近打开的Excel进程
    System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
    System.DateTime startTime = new DateTime();
    int m, killId = 0;
    for (m = 0; m < excelProc.Length; m++)
    {
    if (startTime < excelProc[m].StartTime)
    {
    startTime = excelProc[m].StartTime;
    killId = m;
    }
    }
    if (excelProc[killId].HasExited == false)
    {
    excelProc[killId].Kill();
    }
    #endregion
    if (MessageBox.Show(this, "数据已经成功导出到:" + saveDia.FileName.ToString() + ",是否打开文件?", "导出完成", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
    {
    System.Diagnostics.Process.Start(saveDia.FileName);
    }
    }
    else
    {
    GC.Collect();//强行销毁
    #region 强行杀死最近打开的Excel进程
    System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
    System.DateTime startTime = new DateTime();
    int m, killId = 0;
    for (m = 0; m < excelProc.Length; m++)
    {
    if (startTime < excelProc[m].StartTime)
    {
    startTime = excelProc[m].StartTime;
    killId = m;
    }
    }
    if (excelProc[killId].HasExited == false)
    {
    excelProc[killId].Kill();
    }
    #endregion
    }
    panel2.Visible = false;

    }
    #endregion
  • 相关阅读:
    线性回归——梯度下降
    Python 实现 KNN(K-近邻)算法
    Python 增加博客园阅读量
    阿里云CentOS安装配置Python3.7及pip3
    OnlineJudge难度与正确度的相关性检验
    jsp、jQuery、servlet交互实现登录功能
    Java Web中提交表单之后跳转到WebContent目录下的子目录里的jsp文件
    python3爬虫——下载unsplash美图到本地
    defer原理、性能、优化
    Python生成器和迭代器
  • 原文地址:https://www.cnblogs.com/victorgui/p/3991378.html
Copyright © 2011-2022 走看看