C#导入Excel数据的方式(两种)
2023-06-13 09:12:01 时间
大家好,又见面了,我是你们的朋友全栈君。
方式一、导入数据到数据集对象,只支持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.cn/155377.html原文链接:https://javaforall.cn
相关文章
- Excel与XML相互转换 – C# 简单实现方案[通俗易懂]
- 进销存excel_用Excel制作简单的进销存系统「建议收藏」
- 【说站】Excel如何快速删除空行?WPS删除excel空白行
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- 图片链接如何在excel里转成图片_mdf文件怎么转成Excel
- C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
- C#-VsCode如何运行C#代码
- C# 字符与字符串操作
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- C#导入导出数据到Excel的通用类代码详解编程语言
- Excel数据快速转移至MySQL(excel转mysql)
- 轻松实现Excel导入MySQL数据库(excel导入mysql数据库)
- excel数据分析:SPSS、MySQL和Excel(spssmysql)
- 数据库用Excel快速导入Oracle数据库(excel导入oracle)
- 如何使用Excel连接MySQL数据库(excel连接mysql数据库)
- MySQL读取Excel文件的简单方法(mysql读取excel)
- 文件Linux下快速导出Excel文件(linux导出excel)
- 步骤简单!轻松实现SQL Server导入Excel操作(sqlserver导入excel)
- 通过Excel表驱动Oracle实现数据分析(excel表oracle)
- 利用Excel快速导入Oracle数据库(excel导oracle)
- Excel数据快速导入Oracle数据库(excel入oracle)
- asp.net(C#)中上传大文件的几中常见应用方法
- jQuery获取地址栏参数插件(模仿C#)
- c#解决IIS写Excel的权限问题
- c#通过unicode编码判断字符是否为中文示例分享
- C#预处理指令之#line,#pragmawarning详细解析
- c#执行excel宏模版的方法
- c#连接excel示例分享
- C#导入导出EXCEL文件的代码实例
- C#中自定义事件和委托实例
- C#中richtextbox使用方法详解
- C#实现Excel导入sqlite的方法