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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 广东电信在线人工服务器,202.96.128.86广东电信DNS故障及解决方法

    广东电信在线人工服务器,202.96.128.86广东电信DNS故障及解决方法广东用户如果遇到能上QQ,但网页打不开,提示“找不到服务器”的现象,而且如果别人能访问,而你不能访问,多数情况下就是你的DNS解析故障造成的。解决这个问题比较有效的方法是换一个DNS服务器。下面是几个常用的广东电信DNS,广东的朋友如果遇到一些网页打不开时,可以更换下DNS看看。61.144.56.100广东省广州市电信61.144.56.101广东省广州市电信202.96.128.68广东…

  • 【Altium Designer】PCB设计中利用board cutout做板子开孔开槽「建议收藏」

    【Altium Designer】PCB设计中利用board cutout做板子开孔开槽「建议收藏」有时候在pcb板子设计完成后,为了在使用中固定pcb板子,需要在pcb板子四个角开孔,3D视图中如下图所示。实现的方法不止一个,本文主要记录用boardcutout实现开圆形槽的方法,使用软件为AD18。1.选中mechanical1层或者Keep-outlayer层,先画出和孔径大小相同的圆;如下图2.设计-板子形状-定义板切割(快捷键DSC),在模式下沿着圆边点…

  • adb操作命令详解及大全

    adb操作命令详解及大全adb是什么?:adb的全称为AndroidDebugBridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听SocketTCP5554等端口的方式让ID

  • C++ this指针详解

    C++ this指针详解this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子:​voidDate::setMonth(intmn){month=mn;//这三句是等价的this->month=mn;(*this).month=mn;}​1.this只能在成员函数中使用。…

  • webstorm激活码2019(注册激活)

    (webstorm激活码2019)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 如何用c语言调用c++做成的动态链接库

    今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小

    2021年12月23日

发表回复

您的电子邮箱地址不会被公开。

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