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. 《学习Opencv》第五章 习题6

    这是第五章 习题5.6的结合版,其中实现了摄像头抓拍功能,能够成功运行. #include "stdafx.h" #include "cv.h" #includ ...

  2. DbUtils组件

    DbUtils组件 DbUtils组件, 1. 简化jdbc操作 2. 下载组件,引入jar文件 : commons-dbutils-1.6.jar |-- DbUtils 关闭资源.加载驱动 |-- ...

  3. php实现base64编码

    工作需要,想弄一个加密的串,就想仿照base64的编码方式,写一个加密的方法,所以就有了下面这个用php实现的base64的代码 <?php /** * Base64 编码/解码 * @auth ...

  4. SignalTap II应用小实例之触发位置

    概述 SignalTap II一直以来都是笔者调试Altera FPGA设计的利器,最近比较有时间静下心来研究SignalTap II某些细节,虽然笔者有过不少关于SignalTap的使用,且也发表过 ...

  5. 应用Oracle(Linux中的安装)

    Linux中安装Oracle,不同于windows. Linux在安装时,要作些必要的分区配置,以便进行Oracle的安装: 同时需要创建专门的数据库用户和组,并配置环境变量. root登录 使用 r ...

  6. oracle利用merge更新一表的某列数据到另一表中

    假设你有两张表 t1 表 -------------------------- id |    name   |   pwd 1  |      n1     | t2 表 ------------- ...

  7. Unity 网络斗地主 判断牌的类型

    Unity 网络斗地主  牌的类型 web版本演示地址:   http://www.dreamhome666.com/Desktop.html 在上个版本中,下面的角色在牌的后面,可以将角色做为一个P ...

  8. Ugly Windows

    poj3923:http://poj.org/problem?id=3923 题意:给出两个整数n.m表示屏幕的长宽.屏幕上有一些窗口,每个窗口都是矩形的,窗口的边框用同一个大写字母来表示,不同的窗口 ...

  9. Java中的属性与字段的区别

    Java中属性和字段的区别  Java中的属性,通常可以理解为其属名性时根据get和set方法名得出的. 其规则是:去掉get或set后其剩余的字符串,如果第二个字母是小写的,则把第一个字母也变成小写 ...

  10. php pack、unpack、ord 函数使用方法

    string pack ( string $format [, mixed $args [, mixed $... ]] ) Pack given arguments into a binary st ...