Excel.Application:Excel應用程式
Excel.Workbook:應用程式裡的活頁簿,預設情況下,不管你開幾個Excel檔案,在工作管理員裡只會出現一個Excel.exe
Excel.Worksheet:活頁簿裡的工作表
Excel.Range:工作表裡的儲存格,一格也是Range,多格也是Range,用法Excel.Range[“A1”];
Excel.Range.Cells:這是儲存格的最小單位,代表一格的Range,用法Excel.Range.Cells[1,1];
//是否有Excel.exe 正在執行
void initailExcel()
{
//檢查PC有無Excel在執行
bool flag = false;
foreach (var item in Process.GetProcesses())
{
if (item.ProcessName == "EXCEL")
{
flag = true;
break;
}
}
if (!flag)
{
this._Excel = new Excel.Application();
}
else
{
//引用已在執行的Excel
object obj = Marshal.GetActiveObject("Excel.Application");
_Excel = obj as Excel.Application;
}
//設false效能會比較好
this._Excel.Visible = true;
}
開始讀Excel
void openExcel(string filepath)
{
Excel.Workbook book = null;
Excel.Worksheet sheet = null;
Excel.Range range = null;
DataTable arrdt = null;
DataSet ds = new DataSet();
string path = filepath;
bool flag = false;
try
{
book = _Excel.Workbooks.Open(path);//開啟舊檔案
var sheetCount =book.Sheets.Count;
//讀所有Sheet
for(int i=1;i<=sheetCount;i++)
{
arrdt = new DataTable();
sheet = (Excel.Worksheet)book.Sheets[i];
//sheet = (Excel.Worksheet)book.Sheets[1];//指定活頁簿,代表Sheet1
//sheet = (Excel.Worksheet)book.Sheets["Sheet1"];//也可以直接指定工作表名稱
Excel.Range xRange = sheet.UsedRange;
//利用obj物件儲存值
object[,] valueArray = (object[,])xRange.get_Value(
Excel.XlRangeValueDataType.xlRangeValueDefault);
if (valueArray.Length > 0) //陣列資料總個數大於零
{
int y = valueArray.GetLength(0); //取得維度1的長度,即列數
int x = valueArray.GetLength(1); //取得維度2的長度,即欄數
//建立欄名
for (int arri = 1; arri <= x; arri++)
{
if (valueArray.GetValue(1, arri) != null)
arrdt.Columns.Add(valueArray.GetValue(1, arri).ToString());
else
arrdt.Columns.Add("");
}
DataRow arrdr;
//建立資料
for (int arrj = 2; arrj <= y; arrj++)
{
flag = false;
arrdr = arrdt.NewRow();
for (int arrk = 1; arrk <= x; arrk++)
{
arrdr[arrk - 1] = (valueArray.GetValue(arrj, arrk) == null) ? "" : valueArray.GetValue(arrj, arrk).ToString();
if (arrdr[arrk - 1].ToString() != "")
flag = true;
}
if(flag)
arrdt.Rows.Add(arrdr);
}
}
ds.Tables.Add(arrdt);
}
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
GridView2.DataSource = ds.Tables[1];
GridView2.DataBind();
}
finally
{
book.Close();
book = null;
}
}
來源:
http://www.dotblogs.com.tw/yc421206/archive/2012/03/09/70624.aspx