大家好,又见面了,我是你们的朋友全栈君。
方式一、导入数据到数据集对象,只支持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账号...