各位大侠:C# 如何读取Excel的第一张表的表名?

要写这么一个函数,传入xls文件的的路径,传出第一张表的表名。
Excel中可能有好几张表,但只返回第一张表的表名。请问各位大侠这个怎么写。。。
P.S.:不用 Microsoft.Office.Interop.Excel,把Excel当做一个数据库来操作。
最新回答
珍藏版╮宝贝

2024-11-03 00:10:15

可以使用OleDbConnection 来 操作EXCEL,当然会碰到一些缓存的问题。Microsoft.Office.Interop.Excel则没有这个顾虑。

/// <summary>
/// C#中获取Excel文件的第一个表名
/// Excel文件中第一个表名的缺省值是Sheet1$, 但有时也会被改变为其他名字. 如果需要在C#中使用OleDb读写Excel文件, 就需要知道这个名字是什么. 以下代码就是实现这个功能的:
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetExcelFirstTableName(string excelFileName)
{
string tableName = null;
if (File.Exists(excelFileName))
{
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." +
"OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFileName))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = dt.Rows[0][2].ToString().Trim();
}
}
return tableName;
}
晨曦慕雪

2024-11-03 00:03:49

表名的用[Sheet1$],可参考我写的文章
http://blog.csdn.net/gdjlc/archive/2010/08/13/5810311.aspx


利用Excel模板生成Excel方法如下:
# //转换为物理路径
# string newFileName = HttpContext.Current.Server.MapPath("~/" + fileName);
# //根据模板正式生成该Excel文件
# File.Copy(HttpContext.Current.Server.MapPath("~/ContactTemplate.xls"), newFileName, true);
# //建立指向该Excel文件的数据库连接
# string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + newFileName + ";Extended Properties='Excel 8.0;HDR=yes;IMEX=2'";
# OleDbConnection Conn = new OleDbConnection(strConn);
# //打开连接,为操作该文件做准备
# Conn.Open();
# OleDbCommand Cmd = new OleDbCommand("", Conn);
# foreach (DataRow DR in dt.Rows)
# {
# string XSqlString = "insert into [Sheet1$]";
# XSqlString += "([姓名],[性别],[联系电话]) values(";
# XSqlString += "'" + DR["ContactName"] + "',";
# XSqlString += "'" + (DR["ContactSex"].ToString() == "1" ? "男" : "女") + "',";
# XSqlString += "'" + DR["ContactPhone"] + "')";
# Cmd.CommandText = XSqlString;
# Cmd.ExecuteNonQuery();
# }
回眸丶时光冷

2024-11-03 00:01:36

这个要引用 一个 Microsoft.Office.Interop.Excel;

然后写一些像下面这个样子的代码

#region OPEN WORKBOOK VARIABLES
private static object vk_missing = System.Reflection.Missing.Value;

private static object vk_visible = true;
private static object vk_false = false;
private static object vk_true = true;
private object vk_update_links = 0;
private object vk_read_only = vk_true;
private object vk_format = 1;
private object vk_password = vk_missing;
private object vk_write_res_password = vk_missing;
private object vk_ignore_read_only_recommend = vk_true;
private object vk_origin = vk_missing;
private object vk_delimiter = vk_missing;
private object vk_editable = vk_false;
private object vk_notify = vk_false;
private object vk_converter = vk_missing;
private object vk_add_to_mru = vk_false;
private object vk_local = vk_false;
private object vk_corrupt_load = vk_false;
#endregion

/// <summary>
/// Excel App.
/// </summary>
private Excel.Application xlApp;

/// <summary>
/// Excel 工作簿.
/// </summary>
private Excel.Workbook xlBook = null;

/// <summary>
/// Excel 工作表.
/// </summary>
public Excel.Worksheet xlSheet = null;

// 启动 Excel.
xlApp = new Excel.ApplicationClass();

// 打开文件.
xlBook = xlApp.Workbooks.Open(excelFile,
vk_update_links, vk_missing, vk_format, vk_password,
vk_write_res_password, vk_ignore_read_only_recommend, vk_origin,
vk_delimiter, vk_editable, vk_notify, vk_converter, vk_add_to_mru,
vk_local, vk_corrupt_load);

// 取得第一个 Sheet.
foreach (Excel.Worksheet displayWorksheet in xlBook.Sheets)
{
xlSheet = displayWorksheet;
break;
}

你拿到 xlSheet 以后,就看看,应该有个 Name 的属性的。

上面这点代码,是VS2008下面的,如果你用的是 VS2010,那个xlApp.Workbooks.Open 就可以写得很简单。
那一大堆变量,也不用定义了。
解桑陌

2024-11-03 00:28:50

在读的时候只读第一个表的名称就好了
一丁温暖

2024-11-03 00:28:12

// 以数据库方式打开并输入数据
// 此方式将xls文件所在目录看作数据库,其中的xls文件看作数据库表,表名即文件名(不加扩展名)。
// 函数importExcelToDataSet(string FilePath,string sheet)功能:从xls中读出数据到DataSet中,并返回DataSet对象。
private DataSet importExcelToDataSet(string FilePath/*即文件目录的路径*/, string sheet/*表名即文件名(不加扩展名)*/)

{
string strConn;
string getsheet;

getsheet = "SELECT * FROM [" + sheet + "]" ;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FilePath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter myCommand = new OleDbDataAdapter(getsheet, strConn);
DataSet myDataSet = new DataSet();
try
{
myCommand.Fill(myDataSet);
}
catch (Exception ex)
{
MessageBox.Show("该Excel文件的工作表的名字不正确," + ex.Message);
}
return myDataSet;
}
/// <summary>
/// C#中获取Excel文件的第一个表名
/// Excel文件中第一个表名的缺省值是Sheet1$, 但有时也会被改变为其他名字. 如果需要在C#中使用OleDb读写Excel文件, 就需要知道这个名字是什么. 以下代码就是实现这个功能的:
/// </summary>
/// <param name="excelFileName"></param>
/// <returns></returns>
public static string GetExcelFirstTableName(string excelFileName)
{
string tableName = null;
if (File.Exists(excelFileName))
{
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet." +
"OLEDB.4.0;Extended Properties=\"Excel 8.0\";Data Source=" + excelFileName))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
tableName = dt.Rows[0][2].ToString().Trim();
}
}
return tableName;
}