zoukankan      html  css  js  c++  java
  • C# 操作Excel进程与获取Excel表格数据

         最近做了一下Excel相关的程序,学到了不少东西,在此感谢博客园中无私奉献的园友们。很多资料和信息都是从博客园获取的!

    1、完美关闭Excel进程

    思路:只把EXCEL进程kill是不够的,还必须把全局变量中的所有与Excel操作相关的excel变量赋值为null才可以!

    代码如下:

    View Code
     1 private void QuitExcelApp()
     2 {
     3    if (excelApp != null)//excelApp全局变量
     4             {
     5                 //关闭EXCEl进程,只把EXCEL进程kill是不够的,
     6                 //还必须把全局变量中的所有与Excel操作相关的excel变量
     7                 //赋值为null才可以
     8                 excelApp.DisplayAlerts = false;//不显示提示框
     9                 excelApp.Workbooks.Close();
    10                 excelApp.Quit();
    11                 KillSpecialExcel(excelApp);
    12                 excelApp = null;
    13                 workbook1 = null;
    14                 workSheetTemp = null;
    15             }
    16 }
    17 [DllImport("user32.dll", SetLastError = true)]
    18         static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    19 
    20         public void KillSpecialExcel(Microsoft.Office.Interop.Excel.Application m_objExcel)
    21         {
    22             try
    23             {
    24                 if (m_objExcel != null)
    25                 {
    26                     int lpdwProcessId;
    27                     GetWindowThreadProcessId(new IntPtr(m_objExcel.Hwnd), out lpdwProcessId);
    28                     Process p = System.Diagnostics.Process.GetProcessById(lpdwProcessId);
    29                     if (!p.CloseMainWindow())
    30                     {
    31                         p.Kill();
    32                     }
    33                 }
    34             }
    35             catch (Exception ex)
    36             {
    37                 Console.WriteLine("Delete Excel Process Error:" + ex.Message);
    38             }
    39         }

    2、获取Excel表单数

     1 try
     2             {
     3                 if (tempListBox.Items.Count != 0)//清空原有显示的表单
     4                 {
     5                     tempListBox.Items.Clear();
     6                 }
     7                 foreach (Worksheet wsheet in workbook1.Worksheets)
     8                 {
     9                     tempListBox.Items.Add(wsheet.Name);
    10                 }
    11             }
    12             catch (Exception ex)
    13             {
    14                 MessageBox.Show(ex.ToString(), "信息提示");
    15             }

    3、打开Excel工作簿

    1  excelApp = new Microsoft.Office.Interop.Excel.Application();
    2 
    3                 excelApp.DisplayAlerts = false;//不显示提示框
    4                 workbook1 = excelApp.Workbooks.Open(strFileName, Type.Missing, Type.Missing, Type.Missing,
    5                         Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
    6                         Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    4、获取Excel中的表格,注意当Excel和C#自带的链接数据库获取表结合使用时,一定要先关闭Excel进程,再链接!

     1  private void OpenExcelTabelByName(string tabelName)
     2         {
     3             try
     4             {
     5                 string ss = tabelName;
     6                 //关闭Excel进程
     7                 QuitAndOpenExcelApp();
     8                 string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName+ ";Extended Properties='Excel 8.0;HDR=YES; IMEX=1'";
     9                 OleDbConnection con = new OleDbConnection(connStr);
    10                 con.Open();
    11 
    12                 string strsql = "select * from [" + ss + "$]";
    13 
    14                 OleDbDataAdapter oda = new OleDbDataAdapter(strsql, con);
    15                 DataSet ds = new DataSet();
    16                 oda.Fill(ds);
    17                 daGridViewTem.DataSource = ds.Tables[0];
    18                 for (int i = 0; i < daGridViewTem.Columns.Count; i++)
    19                 {
    20                     daGridViewTem.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
    21                 }
    22                 oda.Dispose();
    23                 con.Close();
    24                 //重新新建Excel进程
    25                 QuitAndOpenExcelApp();
    26                 workSheetTemp = (Worksheet)workbook1.Worksheets[ss];
    27             }
    28             catch (Exception ex)
    29             {
    30                 MessageBox.Show(ex.Message, "获取Excel文件失败");
    31                 return;
    32             }
    33         }
  • 相关阅读:
    《Python 源码阅读》之 类型Type
    《Python 源码剖析》之对象
    KMP匹配算法
    Python的递归深度
    js验证手机号
    Jquery 实现 “下次自动登录” 记住用户名密码功能
    js注册读秒进度条
    div+css进度条
    SprignMVC+myBatis整合
    ssm控制输出sql(二)
  • 原文地址:https://www.cnblogs.com/wylaok/p/2528008.html
Copyright © 2011-2022 走看看