服务器之家

服务器之家 > 正文

asp.net 读取Excel数据到DataTable的代码

时间:2019-08-29 09:46     来源/作者:服务器之家

代码如下:


/// <summary> 
/// 获取指定路径、指定工作簿名称的Excel数据:取第一个sheet的数据 
/// </summary> 
/// <param name="FilePath">文件存储路径</param> 
/// <param name="WorkSheetName">工作簿名称</param> 
/// <returns>如果争取找到了数据会返回一个完整的Table,否则返回异常</returns> 
public DataTable GetExcelData(string astrFileName) 

string strSheetName = GetExcelWorkSheets(astrFileName)[0].ToString(); 
return GetExcelData(astrFileName, strSheetName); 



代码 

复制代码代码如下:


/// <summary> 
/// 返回指定文件所包含的工作簿列表;如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空 
/// </summary> 
/// <param name="strFilePath">要获取的Excel</param> 
/// <returns>如果有WorkSheet,就返回以工作簿名字命名的ArrayList,否则返回空</returns> 
public ArrayList GetExcelWorkSheets(string strFilePath) 

ArrayList alTables = new ArrayList(); 
OleDbConnection odn = new OleDbConnection(GetExcelConnection(strFilePath)); 
odn.Open(); 
DataTable dt = new DataTable(); 
dt = odn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
if (dt == null) 

throw new Exception("无法获取指定Excel的架构。"); 

foreach (DataRow dr in dt.Rows) 

string tempName = dr["Table_Name"].ToString(); 
int iDolarIndex = tempName.IndexOf('$'); 
if (iDolarIndex > 0) 

tempName = tempName.Substring(0, iDolarIndex); 

//修正了Excel2003中某些工作薄名称为汉字的表无法正确识别的BUG。 
if (tempName[0] == '\'') 

if (tempName[tempName.Length - 1] == '\'') 

tempName = tempName.Substring(1, tempName.Length - 2); 

else 

tempName = tempName.Substring(1, tempName.Length - 1); 


if (!alTables.Contains(tempName)) 

alTables.Add(tempName); 


odn.Close(); 
if (alTables.Count == 0) 

return null; 

return alTables; 


代码 

复制代码代码如下:


/// <summary> 
/// 获取指定路径、指定工作簿名称的Excel数据 
/// </summary> 
/// <param name="FilePath">文件存储路径</param> 
/// <param name="WorkSheetName">工作簿名称</param> 
/// <returns>如果争取找到了数据会返回一个完整的Table,否则返回异常</returns> 
public DataTable GetExcelData(string FilePath, string WorkSheetName) 

DataTable dtExcel = new DataTable(); 
OleDbConnection con = new OleDbConnection(GetExcelConnection(FilePath)); 
OleDbDataAdapter adapter = new OleDbDataAdapter("Select * from [" + WorkSheetName + "$]", con); 
//读取 
con.Open(); 
adapter.FillSchema(dtExcel, SchemaType.Mapped); 
adapter.Fill(dtExcel); 
con.Close(); 
dtExcel.TableName = WorkSheetName; 
//返回 
return dtExcel; 


代码 

复制代码代码如下:


/// <summary> 
/// 获取链接字符串 
/// </summary> 
/// <param name="strFilePath"></param> 
/// <returns></returns> 
public string GetExcelConnection(string strFilePath) 

if (!File.Exists(strFilePath)) 

throw new Exception("指定的Excel文件不存在!"); 

return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFilePath + ";Extended properties=\"Excel 8.0;Imex=1;HDR=Yes;\""; 
//@"Provider=Microsoft.Jet.OLEDB.4.0;" + 
//@"Data Source=" + strFilePath + ";" + 
//@"Extended Properties=" + Convert.ToChar(34).ToString() + 
//@"Excel 8.0;" + "Imex=1;HDR=Yes;" + Convert.ToChar(34).ToString(); 

标签:

相关文章

热门资讯

华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍 2019-06-05
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
返回顶部