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. iOS中浅淡UIApplication单例-b

    在iOS的操作系统中 每一个程序都对应一个application单例,每一个application都对应一个Appdelegate代理,在代理中控制程序的各个状态.我们在程序中获取Applicatio ...

  2. HttpClient4.3.6 实现https访问

    package httptest; import java.io.IOException; import java.nio.charset.Charset; import java.security. ...

  3. Sereja and Suffixes

    Codeforces Round #215 (Div. 2) B:http://codeforces.com/problemset/problem/368/B 题意:给你一个序列,然后查询i--n中没 ...

  4. stat~~~访问文件状态的利器

    Name stat, fstat, lstat - get file status Synopsis #include <sys/types.h>#include <sys/stat ...

  5. 吉哥系列故事――临时工计划(dp)

    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Descr ...

  6. Codeforces Round #316 (Div. 2)

    A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  7. 【转】android ListView详解---- 不错不错

    原文网址:http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 由于google doc 很多人都打不开,故更新了源码下载地址 [源 ...

  8. Subsets —— LeetCode

    Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...

  9. 【纯干货】SVN使用时应注意的那些事

    一.SVN使用步骤 检出 checkout 更新 update 冲突 confilicte 添加 Add (没有添加项目可不写) 填写svn日志 提交 commit你以为到这儿就结束了吗?....NO ...

  10. PHP 生命周期,Opcode 缓存。

    1.php 执行的生命周期. 用户发出请求---->.php--->词典扫描--->解析--->创建Opcode--->处理opcode--->响应 这就是php的 ...