using Excel = Microsoft.Office.Interop.Excel;

private static Excel.Application m_xlApp = null;

/// <summary>  
/// 将DataTable数据导出到Excel表  
/// </summary>  
/// <param name="tmpDataTable">要导出的DataTable</param>
public static void ExportExcel(System.Data.DataTable tmpDataTable) 

    if (tmpDataTable == null) 
    { 
        return; 
    }

long rowNum = tmpDataTable.Rows.Count;//行数  
    int columnNum = tmpDataTable.Columns.Count;//列数  
    Excel.Application m_xlApp = new Excel.Application(); 
    m_xlApp.DisplayAlerts = false;//不显示更改提示  
    m_xlApp.Visible = false;

string saveFileName = "";
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.DefaultExt = "xls";
    saveDialog.Filter = "Excel 文件|*.xls";
    saveDialog.FileName = "Sheet1";
    saveDialog.ShowDialog();
    saveFileName = saveDialog.FileName;
    if (saveFileName.IndexOf(":") < 0)
    {
        return; //被点了取消
    }

   Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

if (xlApp == null)
      {
             MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
              return;
       }

Excel.Workbooks workbooks = m_xlApp.Workbooks; 
    Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); 
    Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1  
 
    try 
    { 
        if (rowNum > 65536)//单张Excel表格最大行数  
       { 
            long pageRows = 65535;//定义每页显示的行数,行数必须小于65536  
            int scount = (int)(rowNum / pageRows);//导出数据生成的表单数  
           if (scount * pageRows < rowNum)//当总行数不被pageRows整除时,经过四舍五入可能页数不准  
           { 
               scount = scount + 1; 
           } 
           for (int sc = 1; sc <= scount; sc++) 
           { 
                if (sc > 1) 
               { 
                  object missing = System.Reflection.Missing.Value; 
                   worksheet = (Excel.Worksheet)workbook.Worksheets.Add( 
                                missing, missing, missing, missing);//添加一个sheet  
               } 
               else 
               { 
                   worksheet = (Excel.Worksheet)workbook.Worksheets[sc];//取得sheet1  
               } 
                string[,] datas = new string[pageRows + 1, columnNum]; 
 
              for (int i = 0; i < columnNum; i++) //写入字段  
                { 
                    datas[0, i] = tmpDataTable.Columns[i].Caption;//表头信息  
               } 
               Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]); 
               range.Interior.ColorIndex = 15;//15代表灰色  
               range.Font.Bold = true; 
                range.Font.Size = 9;

int init = int.Parse(((sc - 1) * pageRows).ToString()); 
               int r = 0; 
               int index = 0; 
              int result; 
                if (pageRows * sc >= rowNum) 
                { 
                   result = (int)rowNum; 
               } 
               else 
               { 
                   result = int.Parse((pageRows * sc).ToString()); 
               } 
 
               for (r = init; r < result; r++) 
              { 
                   index = index + 1; 
                   for (int i = 0; i < columnNum; i++) 
                  { 
                      object obj = tmpDataTable.Rows[r][tmpDataTable.Columns[i].ToString()]; 
                        datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式  
                    } 
                    System.Windows.Forms.Application.DoEvents(); 
                   //添加进度条  
              }

Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, columnNum]); 
              fchR.Value2 = datas; 
               worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。  
                m_xlApp.WindowState = Excel.XlWindowState.xlMaximized;//Sheet表最大化  
                range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, columnNum]); 
                //range.Interior.ColorIndex = 15;//15代表灰色  
               range.Font.Size = 9; 
                range.RowHeight = 14.25; 
                range.Borders.LineStyle = 1; 
               range.HorizontalAlignment = 1; 
           } 
       } 
        else 
       { 
            string[,] datas = new string[rowNum + 1, columnNum]; 
            for (int i = 0; i < columnNum; i++) //写入字段  
          { 
               datas[0, i] = tmpDataTable.Columns[i].Caption; 
           } 
            Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnNum]); 
            range.Interior.ColorIndex = 15;//15代表灰色  
            range.Font.Bold = true; 
            range.Font.Size = 9; 
 
           int r = 0; 
           for (r = 0; r < rowNum; r++) 
           { 
                for (int i = 0; i < columnNum; i++) 
               { 
                    object obj = tmpDataTable.Rows[r][tmpDataTable.Columns[i].ToString()]; 
                    datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式  
               } 
                System.Windows.Forms.Application.DoEvents(); 
               //添加进度条  
           } 
           Excel.Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]); 
           fchR.Value2 = datas; 
 
           worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。  
            m_xlApp.WindowState = Excel.XlWindowState.xlMaximized; 
 
           range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[rowNum + 1, columnNum]); 
            //range.Interior.ColorIndex = 15;//15代表灰色  
            range.Font.Size = 9; 
            range.RowHeight = 14.25; 
           range.Borders.LineStyle = 1; 
            range.HorizontalAlignment = 1; 
        } 
       workbook.Saved = true;
       workbook.SaveCopyAs(saveFileName);
       if (System.IO.File.Exists(saveFileName))
       {
           System.Diagnostics.Process.Start(saveFileName); //打开EXCE
       }
  } 
    catch (Exception ex) 
    { 
       MessageBox.Show("导出异常:" + ex.Message, "导出异常", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
    } 
    finally 
    { 
       EndReport(); 
   } 

 
 
/// <summary>  
/// 退出报表时关闭Excel和清理垃圾Excel进程  
/// </summary>  
private static void EndReport() 

   object missing = System.Reflection.Missing.Value; 
   try 
   { 
        m_xlApp.Workbooks.Close(); 
        m_xlApp.Workbooks.Application.Quit(); 
      m_xlApp.Application.Quit(); 
       m_xlApp.Quit(); 
   } 
    catch { } 
    finally 
    { 
        try 
      { 
           System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Workbooks); 
           System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp.Application); 
            System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlApp); 
            m_xlApp = null; 
       } 
       catch { } 
        try 
        { 
            //清理垃圾进程  
            killProcessThread(); 
       } 
       catch { } 
        GC.Collect(); 
    } 
}

/// <summary>  
/// 杀掉不死进程  
/// </summary>  
private static void killProcessThread() 

   ArrayList myProcess = new ArrayList(); 
   for (int i = 0; i < myProcess.Count; i++) 
   { 
       try 
        { 
           System.Diagnostics.Process.GetProcessById(int.Parse((string)myProcess[i])).Kill(); 
        } 
       catch { } 
   } 
}

/// <summary>
///  从Excel表导入数据
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static DataSet GetPCExcelDataInfo(string path)
 {
            OleDbConnection objConn = null;

try
            {
                // 拼写连接字符串,打开连接
                string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + path + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'";
                objConn = new OleDbConnection(strConn);
                objConn.Open();
                // 取得Excel工作簿中所有工作表
                DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                OleDbDataAdapter sqlada = new OleDbDataAdapter();
                DataSet ds = new DataSet();
                // 遍历工作表取得数据并存入Dataset
                foreach (DataRow dr in schemaTable.Rows)
                {
                    string strSql = "Select * From [" + dr[2].ToString().Trim() + "]";
                    OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                    sqlada.SelectCommand = objCmd;
                    sqlada.Fill(ds, dr[2].ToString().Trim());
                }

return ds;
            }
            catch (Exception ex)
            {
                MessageBox.Show("操作xls文本文件:" + ex.Message);
                return null;
            }
            finally
            {
                objConn.Close();
            }
 }

DataTable数据与Excel表格的相互转换的更多相关文章

  1. 导出数据到Excel表格

    开发工具与关键技术:Visual Studio 和 ASP.NET.MVC,作者:陈鸿鹏撰写时间:2019年5月25日123下面是我们来学习的导出数据到Excel表格的总结首先在视图层写导出数据的点击 ...

  2. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  3. Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  4. python 使用openpyxl来写数据到excel表格

    使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...

  5. 使用POI实现数据导出Excel表格

    package cn.sh.bzt.kwj.action; import java.io.IOException; import java.io.OutputStream; import java.t ...

  6. 在java中实现数据导入excel表格中

    1.首先前端代码如下: 一个导出按钮:<input id="export" class="btn btn-primary" type="butt ...

  7. PHP批量导出数据为excel表格

    之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...

  8. c#导出ListView中的数据到Excel表格

    1.添加组件:Microsoft.Office.Interop.Excel 步骤:右键点击“引用”--->添加引用--->COM--->Microsoft.Office.Intero ...

  9. (原创)将Datatable数据按照Excel模板格式导出

    最近遇到一个问题,就是导出数据的时候需要自定义的表头,如图 如果自己用代码写表头的话,可能会有点复杂,而且代码量很多,所以我就想了一个办法,直接在Excel里面把表头定义好,然后把数据写入Excel模 ...

随机推荐

  1. ETL控件学习之一从数据库导出数据到平面

    今天主要进行ETL控件的学习.主要是使用微软的SSDT工具.使用DataFlowTask 将数据源导出到目标文件的方式. 1.打开SSDT新建一个SSIS的project,如下图所示: 2.在SSIS ...

  2. go-nsq使用简述

    一 环境依赖: golang 开发环境(version >= 1.2)          下源码,配置环境变量,执行安装脚本 gpm     依赖包管理器                     ...

  3. BZOJ 1015 星球大战

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  4. VS2012中使用Boost库的方法(超级简单)

    很不错的博客一定得看 http://my.csdn.net/caimouse 1.下载boost库 从http://www.boost.org上下载到目前最新的boost库,快速传送门:boost_1 ...

  5. kernel解读之 pick_next_rt_entity

    1328 static struct sched_rt_entity *pick_next_rt_entity(struct rq *rq, 1329 struct rt_rq *rt_rq) 133 ...

  6. hiho #1079 : 离散化

    描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去,有些海报 ...

  7. COJ 2108 Day7-例1

    Day7-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述   在计算机中,CPU只能和高速缓存Cache直接交换数据.当 ...

  8. 图论(网络流):[HNOI 2013]切糕

    [HNOI 2013]切糕 第三题:切糕(程序文件名:cake.exe)100 分,运行时限:5s 经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观 ...

  9. hdu 3409 最短路树+树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3409 参考博客:http://www.cnblogs.com/woaishizhan/p/318981 ...

  10. Servlet工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...