string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
現在我想有多少工作表文件知道工作表側多少給?
我應該寫什麼代碼?
我怎麼知道?
感謝
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
現在我想有多少工作表文件知道工作表側多少給?
我應該寫什麼代碼?
我怎麼知道?
感謝
雖然問題指向哈里斯·哈桑將允許你提取表名稱,如果你只是想工作表的工作簿中的數量,下面將做的伎倆:
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
int numberOfSheets = 0;
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt != null)
{
foreach (DataRow row in dt.Rows)
{
if (row["TABLE_NAME"].ToString().EndsWith("$"))
{
numberOfSheets++;
}
}
}
}
編輯:
或者,對於較短的版本,使用以下(感謝JB爲助人爲樂摹我在這一個):
string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=no;IMEX=1;""", openFileDialog1.FileName);
int numberOfSheets = 0;
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt != null)
{
numberOfSheets = dt.AsEnumerable().Cast<DataRow>().Where(row => row["TABLE_NAME"].ToString().EndsWith("$")).Count();
}
}
如果你想爲了減少代碼,你可以使用'dt.Rows.Where(row => row [「TABLE_NAME」] .ToString()。EndsWith(「$」))。Count()' – 2012-05-06 19:52:17
@jb。我的組織仍然停留在.Net 2.0的黑暗時代,所以我對這些較新的方法的瞭解並不是很好,但我確信'DataRowCollection'沒有'Where()'方法。我已經讀過,要做你正在做的事情,需要在'DataTable'上使用'AsEnumerable()'。如果我錯了,請糾正我。 – 2012-05-06 20:28:39
看起來像我們都是對的。你可以做的是這個:'dt.Rows.AsQueryable()。Cast
看到這個http://stackoverflow.com/questions/1164698/using-excel-oledb-to-get-sheet-names-in-sheet-order – 2012-02-14 11:24:36