请问在asp.net中如何获得Excel工作表名?

gdlpc 2009-10-28 09:58:35
我这样连接Excel表:
try
{
string filepath = Server.MapPath("test.xls");
String strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filepath);

OleDbConnection Excel_conn = new OleDbConnection(strConnectionString);

string query = "SELECT * FROM [Sheet1$]";

OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, Excel_conn);
DataSet myDataSet = new DataSet();
Excel_conn.Open();
oleAdapter.Fill(myDataSet, "Excel_Sheet1");
Excel_conn.Close();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}

如果test.xls的第一个工作表名称是Sheet1时,运行正常
如果test.xls的第一个工作表名称是asdfg时,出现错误:'Sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。且不能释放系统资源:文件“test.xls”正由另一进程使用,因此该进程无法访问该文件。
这时不能修改删除test.xls表,要重启系统后才能修改或删除。
请问:
1、如何在连接Excel表是首选取得工作表名,使不同的工作表名也能正常运行不会出错?
2、如果出错应如何完全释放系统资源,可以使用另一个工作表?
...全文
441 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wycoo 2011-11-11
  • 打赏
  • 举报
回复
多谢了
liaoyukun111 2009-10-28
  • 打赏
  • 举报
回复
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/") + "Stu2009-10-15.xls" + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
OleDbConnection objConn = new OleDbConnection(strConn);
List<string> SheetNameList = new List<string>();
objConn.Open();
DataTable dtExcelSchema = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string SheetName = "";
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
SheetNameList.Add(SheetName);
}
GridView1.DataSource =SheetNameList;
GridView1.DataBind();
表名,一般是三个
gdlpc 2009-10-28
  • 打赏
  • 举报
回复
多谢了,
由于Excel工作是上传的,可能会出现某人上传的他的工作表名已改为另一名称,这样使整个系统不能用也即另外一个人也不能用此系统。
gegeblue 2009-10-28
  • 打赏
  • 举报
回复
传参阿~~
zhong2006 2009-10-28
  • 打赏
  • 举报
回复
对于第一个问题,要是不确定Excel文件里面工作薄名称的话,试试用using Excel,操作Excel文件的方法能不能获得第一个工作薄的名称。我估计这种方法应该可行!
zhong2006 2009-10-28
  • 打赏
  • 举报
回复
1、 string query = "SELECT * FROM [Sheet1$]";

Sheet1$ 相当于数据库表的名称,你要查询肯定要先确定表名 啊

2、第二个问题在finally里面关闭连接
try
{
}
catch
{
}
finally
{
Excel_conn.Close();
}
gdlpc 2009-10-28
  • 打赏
  • 举报
回复
多谢liaoyukun111
可以了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧