C#操作Excel时出现错误:“'Sh…
2014-09-10 15:21
369 查看
对于出现如题的错误,本人的另一篇博文已经指出原因,那么怎样才能自动获得Excel中各个sheet的名称呢?这样就能动态的选中返回那个sheet的数据,即使用户更改了名称也不怕,完全可以把所有sheet的名称列出来供用户选择。下面就把解决问题的代码列出来,主要用到了OleDbConnection.GetOleDbSchemaTable()方法。
///
/// 执行导入
///
/// Excel文件名
/// DataSet
public static DataSet doImport(string strFileName)
{
if (strFileName == "")
return null;
else
{
DataSet ExcelDs = new DataSet();
try
{
//Excel数据库连接串
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = '" +
strFileName + "';Extended Properties ='Excel
8.0;HDR=NO;IMEX=1'";
OleDbConnection OleDB = new
OleDbConnection(strConn);//打开数据源连接
OleDB.Open();//打开连接
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
System.Data.DataTable dtSheetName =
OleDB.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {
null, null, null, "Table" });
//声明包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
//将表名存入数组中
for (int k = 0; k < dtSheetName.Rows.Count; k++)
{
strTableNames[k] =
dtSheetName.Rows[k]["TABLE_NAME"].ToString();
}
//从指定的表名查询数据
string strSheet = "select * from [" + strTableNames[0] + "]";
OleDbDataAdapter ExcelDA = new OleDbDataAdapter(strSheet,
OleDB);//连接数据库
ExcelDA.Fill(ExcelDs, "ExcelInfo");
}
catch (Exception err)
{
MessageBox.Show(err.Message.Tostring(), "错误提示");
}
return ExcelDs;
}
///
/// 执行导入
///
/// Excel文件名
/// DataSet
public static DataSet doImport(string strFileName)
{
if (strFileName == "")
return null;
else
{
DataSet ExcelDs = new DataSet();
try
{
//Excel数据库连接串
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = '" +
strFileName + "';Extended Properties ='Excel
8.0;HDR=NO;IMEX=1'";
OleDbConnection OleDB = new
OleDbConnection(strConn);//打开数据源连接
OleDB.Open();//打开连接
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等
System.Data.DataTable dtSheetName =
OleDB.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {
null, null, null, "Table" });
//声明包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
//将表名存入数组中
for (int k = 0; k < dtSheetName.Rows.Count; k++)
{
strTableNames[k] =
dtSheetName.Rows[k]["TABLE_NAME"].ToString();
}
//从指定的表名查询数据
string strSheet = "select * from [" + strTableNames[0] + "]";
OleDbDataAdapter ExcelDA = new OleDbDataAdapter(strSheet,
OleDB);//连接数据库
ExcelDA.Fill(ExcelDs, "ExcelInfo");
}
catch (Exception err)
{
MessageBox.Show(err.Message.Tostring(), "错误提示");
}
return ExcelDs;
}
相关文章推荐
- C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
- C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
- 解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005"
- C#导入Excel数据时出现“&#039;Sheet1$&#039;&amp;…
- SQL安装时出现"挂起的文件操作”错误解决办法
- Win2003下关于c#读写Excel时,出现存取被拒&Excel实例化出错的一个解决方法
- sql操作access时出现 MSDTC错误,服务器 'SERVER' 上的 MSDTC 不可用。
- 用OLEDB操作Excel时出现Selected collating sequence not supported by the operating system错误,附解决方法
- 操作Excel出现“外部表不是预期的格式”错误
- vs.net C# 连接数据库 出现错误 用户 '(null)' 登录失败。原因: 未与信任 SQL Server 连接相关联
- C# 导出Excel "正在中止线程" 错误
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID
- 解决打开WEB ADI的excel文件时出现Run-time error '1004' 的错误
- C# 用数据库读取Excel出现“定义了过多字段”错误的解决方法
- C#操作串口,带异常处理,解决端口占用时打开串口出现异常错误,串口关闭时发送数据报错
- [原]用c#做了一个桌面程序用来分离excel文件里的数据时出现“操作必须使用一个可更新的查询”错误的解决
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID(转)
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID(转)
- ASP.NET操作EXCEL时出现的错误 Retrieving the COM class factory for component with CLSID