C#导入Excel数据的方式(两种)

C#导入Excel数据的方式(两种)方式一、导入数据到数据集对象,只支持Excel的标准格式,即不能合并单元格等等///<summary>///导入数据到数据集中///备注:此种方法只支持excel原文件///

大家好,又见面了,我是你们的朋友全栈君。

方式一、导入数据到数据集对象,只支持Excel的标准格式,即不能合并单元格等等

/// <summary>
    /// 导入数据到数据集中
    /// 备注:此种方法只支持excel原文件
    /// </summary>
    /// <param name="Path">文件路劲</param>
    /// <param name="exceptionMsg">异常信息</param>
    /// <returns></returns>
    public static System.Data.DataTable InputExcel(string Path, ref string exceptionMsg)
    {
        System.Data.DataTable dt = null;
        try
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            using (OleDbConnection conn = new OleDbConnection(strConn))
            {
                conn.Open();
                System.Data.DataTable sheetDt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string[] sheet = new string[sheetDt.Rows.Count];
                for (int i = 0; i < sheetDt.Rows.Count; i++)
                {
                    sheet[i] = sheetDt.Rows[i]["TABLE_NAME"].ToString();
                }
                string strExcel = string.Format("select * from [{0}]", sheet[0]);
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
                dt = new System.Data.DataTable();
                myCommand.Fill(dt);
                conn.Close();
            }
        }
        catch (Exception ex)
        {
            exceptionMsg = ex.Message;
        }
        return dt;
    }

 

方法二、读取Excel文件,然后根据里面的数据信息拼装

#region 读取Excel表格中数据到DataTable中

    public static System.Data.DataTable ChangeExcelToDateTable(string _path)
    {
        System.Data.DataTable tempdt = new System.Data.DataTable();
        tempdt.TableName = "Excel";
        Application app = new Application();
        object obj = System.Reflection.Missing.Value;
        try
        {
            Workbook _wBook = app.Workbooks.Open(_path, obj, obj, obj, obj, obj, obj, obj, obj, obj, obj, obj, obj, obj, obj);
            Worksheet _wSheet = (Worksheet)_wBook.Worksheets.get_Item(1);
            DataRow newRow = null;
            DataColumn newColumn = null;
            for (int i = 2; i <= _wSheet.UsedRange.Rows.Count; i++)
            {
                newRow = tempdt.NewRow();
                for (int j = 1; j <= _wSheet.UsedRange.Columns.Count; j++)
                {
                    if (i == 2 && j == 1)
                    {
                        //表头
                        for (int k = 1; k <= _wSheet.UsedRange.Columns.Count; k++)
                        {
                            string str = (_wSheet.UsedRange[1, k] as Range).Value2.ToString();
                            newColumn = new DataColumn(str);
                            newRow.Table.Columns.Add(newColumn);
                        }
                    }
                    Range range = _wSheet.Cells[i, j] as Range;
                    if (range != null && !"".Equals(range.Text.ToString()))
                    {
                        newRow[j - 1] = range.Value2;

                    }
                }
                tempdt.Rows.Add(newRow);
            }
            _wSheet = null;
            _wBook = null;
            app.Quit();
            Kill(app);
            int generation = System.GC.GetGeneration(app);
            app = null;
            System.GC.Collect(generation);
            return tempdt;
        }
        catch (Exception ex)
        {
            app.Quit();
            Kill(app);
            int generation = System.GC.GetGeneration(app);
            app = null;
            throw ex;
        }
    }
   
    #endregion

    #region 结束进程

    [DllImport("User32.dll", CharSet = CharSet.Auto)]
    private static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
    private static void Kill(Microsoft.Office.Interop.Excel.Application excel)
    {
        IntPtr t = new IntPtr(excel.Hwnd);   //得到这个句柄,具体作用是得到这块内存入口
        int k = 0;
        GetWindowThreadProcessId(t, out k);   //得到本进程唯一标志k
        System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用
        p.Kill();     //关闭进程k
    }

    #endregion

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155377.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚拟机连接上网的步骤「建议收藏」

    虚拟机连接上网的步骤「建议收藏」1.首先查看本机的可上网的IP地址:我的本机IP地址是192.168.1.5,由此可以推出我的网关地址就是192.168.1.1这个网关就是可以用来访问的一个地址,一般子网掩码都是255.255.255.02.设置本机的Vmare8的IP为静态IP和并且一定要配到这个192.168.1.1这个网关下右键其属性配成对用的网关地址,一定要在一个网段内下面是虚拟机里面的配置,里面有个虚拟机网络编辑这个是可供虚拟机上网的网段,一定要在这个范围之内这个配置完之后

    2022年5月19日
    72
  • WOL(Wake On LAN – 局域网唤醒)外网唤醒 配置教程 远程开机「建议收藏」

    WOL(Wake On LAN – 局域网唤醒)外网唤醒 配置教程 远程开机「建议收藏」前言(也叫废话):虽然这个功能叫局域网唤醒,但配合路由器的端口映射功能,广域网唤醒也是可以的。只要有一台能上网的电脑或手机,就能把家中电脑打开,需要用电脑又不在家的时候很方便。一、开启WOL功能进BIOS进入BIOS后找一下有没有WakeOnLAN、网卡唤醒、WOL等字样的选项,找到后启用。二、注册花生壳账号传送门:https://console.oray.com/passport…

    2022年5月5日
    1.4K
  • 交换机vlan配置实例_h3c vlan配置

    交换机vlan配置实例_h3c vlan配置锐捷交换机vlan配置示例,能够帮助理解vlan原理

    2025年12月9日
    3
  • SQL2000 数据库日志 清空

    SQL2000 数据库日志 清空

    2021年4月30日
    122
  • 【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7

    【centos7 + MySQL5.7 安装】centos7 安装MySQL5.7说明:我们安装MySQL位置在/usr/local下第一步、下载MySQL安装包:[root@localhostlocal]#wgethttps://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装mysql安装源:[root@localhostlocal]#yum-ylocali…

    2022年6月9日
    34
  • android系统webview最新版本_webview加载h5页面空白

    android系统webview最新版本_webview加载h5页面空白做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通。也是相当无奈,目前发现了好多android端与ios端webView的异同。android端与ios确的不同大致包括:1:android不能直接打开html的下载文件,需要先下载保存本地在打开本地文件2:android不能直接打开pdf文件,同样要下载再打开3:如题,h5页面的发送图片按钮点…

    2022年9月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号