• 将datatable 保存为 Excel文件(高效率版本)


    原文地址:https://www.cnblogs.com/dongh/p/6909611.html

    using Microsoft.Office.Interop.Excel;
    using System.Runtime.InteropServices;

    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int pid);
    //函数原型;DWORD GetWindowThreadProcessld(HWND hwnd,LPDWORD lpdwProcessld);
    //参数:hWnd:窗口句柄
    //参数:lpdwProcessld:接收进程标识的32位值的地址。如果这个参数不为NULL,GetWindwThreadProcessld将进程标识拷贝到这个32位值中,否则不拷贝
    //返回值:返回值为创建窗口的线程标识。

    //dt:从数据库读取的数据;file_name:保存路径;sheet_name:表单名称
    private void DataTableToExcel(DataTable dt, string file_name, string sheet_name)
    {
           Microsoft.Office.Interop.Excel.Application Myxls = new  Microsoft.Office.Interop.Excel.Application();
           Microsoft.Office.Interop.Excel.Workbook Mywkb = Myxls.Workbooks.Add();
           Microsoft.Office.Interop.Excel.Worksheet MySht = Mywkb.ActiveSheet;
           MySht.Name = sheet_name;
           Myxls.Visible = false;
           Myxls.DisplayAlerts = false;
           try
           {
                  //写入表头
                  object[] arrHeader = new object[dt.Columns.Count];
                  for(int i = 0; i < dt.Columns.Count; i++)
                  {
                         arrHeader[i] = dt.Columns[i].ColumnName;
                  }
                  MySht.Range[Mysht.Cells[1,1], MySht.Cells[1,dt.Columns.Count]].Value2 = arrHeader;
                  //写入表体数据
                  object[,] arrBody = new object[dt.Rows.Count, dt.Columns.Count];
                  for(int i = 0; i < dt.Rows.Count; i++)
                  {
                          for(int j = 0; j < dt.Columns.Count; j++)
                          {
                                  arrBody[i,j] = dt.Rows[i][j].ToString();
                          }
                  }
                  MySht.Range[MySht.Cells[2,1], MySht.Cells[dt.Rows.Count + 1, dt.Columns.Count]].Value2 = arrBody;
                  if(Mywkb != null)
                  {
                          Mywkb.SaveAs(file_name);
                          Mywkb.Close(Type.Missing, Type.Missing, Type.Missing);
                          Mywkb = null;
                  }
           }
           catch(Exception ex)
           {
                   MessageBox.Show(ex.Message, "系统提示");
           }
           finally
           {
                    //彻底关闭Excel进程
                    if(Myxls != null)
                    {
                           Myxls.Quit();
                           try
                           {
                                  if(Myxls != null)
                                  {
                                        int pid;
                                        GetWindowThreadProcessId(new IntPtr(Myxls.Hwnd), out pid);
                                        System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(pid);
                                         p.Kill();
                                  }
                           }
                           catch(Exception ex)
                           {
                                  MessageBox.Show("结束当前EXCEL进程失败:" + ex.Message);
                           }
                           Myxls = null;
                    }
                    GC.Collect();
           }
    }

  • 相关阅读:
    python中map函数
    python中的or,and运算符
    输入一个字符串, 返回倒序排列的结果 如: abcdef, 返回 fedcba
    centos7启用iptables
    centos7 shell脚本批量上传文件
    Deployment 中尝试声明一个 Volum
    cpu很高,但是看不到是哪个应用或进程
    从进程角度看docker容器
    02一条update的sql的内部执行流程
    01基础架构,一条SQL查询语句是如何执行的?
  • 原文地址:https://www.cnblogs.com/hanje/p/10534842.html
Copyright © 2020-2023  润新知