有朋友問道:
代碼public ArrayList ExcelSheetName(string filepath)
{
ArrayList al = new ArrayList();
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\";";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable sheetNames = conn.GetOleDbSchemaTable
(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
conn.Close();
foreach (DataRow dr in sheetNames.Rows)
{
al.Add(dr[2]);
}
return al;
}
這個方法擷取的EXCEL表名是按字母順序排列的,如果我要獲得EXCEL的第一個工作表名,怎麼做?
其實利用Framework提供的Excel 物件模型很容易解決這個問題,下面是邀月的測試過程及代碼:
建立一控制台項目,添加兩個dll
Microsoft.Office.Interop.Excel
Microsoft.VisualBasic
添加代碼:
using System;
using System.Collections.Generic;
using System.Text;
//add namespace
using Microsoft.Office.Interop.Excel;
namespace ReadFirstSheetNameDemo
{
public class Program
{
public static void Main(string[] args)
{
//Get Xth SheetName of Excel File
Console.WriteLine(GetFirstSheetNameFromExcelFileName("C:\\test.xls",1));
Console.ReadKey();
}
public static string GetFirstSheetNameFromExcelFileName(string filepath,int numberSheetID)
{
if (!System.IO.File.Exists(filepath))
{
return "This file is on the sky??";
}
if (numberSheetID <= 1) { numberSheetID = 1; }
try
{
Microsoft.Office.Interop.Excel.Application obj = default(Microsoft.Office.Interop.Excel.Application);
Microsoft.Office.Interop.Excel.Workbook objWB = default(Microsoft.Office.Interop.Excel.Workbook);
string strFirstSheetName = null;
obj = (Microsoft.Office.Interop.Excel.Application)Microsoft.VisualBasic.Interaction.CreateObject("Excel.Application", string.Empty);
objWB = obj.Workbooks.Open(filepath, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing,Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing,Type.Missing, Type.Missing);
strFirstSheetName = ((Microsoft.Office.Interop.Excel.Worksheet)objWB.Worksheets[1]).Name;
objWB.Close(Type.Missing, Type.Missing, Type.Missing);
objWB = null;
obj.Quit();
obj = null;
return strFirstSheetName;
}
catch (Exception Err)
{
return Err.Message;
}
}
}
}
結果:
參考資料:
http://www.cnblogs.com/downmoon/archive/2008/08/20/1272185.html
http://msdn.microsoft.com/zh-cn/library/aa168292%28office.11%29.aspx#EDAA