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
  • 相关阅读:
    增强型window.showModalDialog弹出模态窗口数据传递高度封装实验 西安
    谈谈Asp.net网站优化二:关于 服务器控件 和 客户端控件(html标签)的选择 西安
    谈谈Asp.net网站优化一:SqlDataReader和DataSet的选择 西安
    我2年来整理的.NET开发类库源代码共享 西安
    类似baidu google分页器效果的代码(修改于 kwklover 同学基础上) 西安
    C#.NET动手开发域名抢注前检测工具。 西安
    解决vs2008 项目文件(b/s)右键“在浏览器中打开”出现两个浏览器 西安
    基于Json的Ajax无刷新分页效果实现(一) 西安
    基于Json的Ajax无刷新分页效果实现(二) 西安
    循环冗余检验 (CRC) 算法原理
  • 原文地址:https://www.cnblogs.com/victorgui/p/3991378.html
Copyright © 2011-2022 走看看