C# 如何獲取處于運(yùn)行中的Excel、Word對(duì)象
今日在寫項(xiàng)目的過程中,涉及到對(duì)Excel和Word的操作,考慮到程序的健壯性,需要對(duì)一些特殊情況作出處理,通常情況下,Excel和Word是通過winform下的openfiledialog打開的,這種情況去獲取對(duì)于對(duì)象是十分方便的。
但是有些Word或者Excel由用戶自己先行打開了,后面程序再去打開這些文檔,就會(huì)出現(xiàn)問題,這種情況需要獲取Excel或者Word對(duì)象該怎么辦呢?
通過查閱資料發(fā)現(xiàn),以下代碼可以解決。
private void OpenFileDialog()
{
// 聲明一個(gè)對(duì)象
Excel._Application objExcel;
OpenFileDialog fileDialog = new OpenFileDialog();
fileDialog.Multiselect = false;
fileDialog.Title = "請(qǐng)選擇文件";
// 此處只打開word類型文件,對(duì)過濾參數(shù)進(jìn)行設(shè)置
fileDialog.Filter = "Excel文件|*.xls;*.xlsx";
if ( fileDialog.ShowDialog() == DialogResult.OK )
{
try
{
// 獲取到當(dāng)前處于活躍狀態(tài)的Excel對(duì)象(即已經(jīng)打開的)
objExcel = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
// 根據(jù)選擇到的文件名去匹配工作對(duì)象
Excel._Workbook workbook = _Excel.Workbooks.Open(fileDialog.FileName);
objExcel.Visible = true;
}
catch (System.Runtime.InteropServices.COMException e)
{
// 假如沒有被打開,則new一個(gè)對(duì)象
objExcel = new Excel.Application();
// 根據(jù)選擇到的文件名去匹配工作對(duì)象
Excel._Workbook workbook = objExcel.Workbooks.Open(fileDialog.FileName);
objExcel.Visible = true;
}
}
}
利用try catch,首先獲取處于活躍狀態(tài)的對(duì)象,獲取到Excel對(duì)象,然后用Excel文件名去匹配,獲取到工作對(duì)象。如果拋出異常,則說明目前沒有Excel被打開,于是新建一個(gè)對(duì)象來操作。
注意,此處catch里面的異常,必須要寫為"System.Runtime.InteropServices.COMException",因?yàn)槿绻麅H僅是Exception的話,如果捕捉到其他異常,也會(huì)執(zhí)行catch里面的操作。
我們的本意是如果沒有處于活躍狀態(tài)的Excel才進(jìn)行new操作,而不是任何異常都進(jìn)行new對(duì)象操作。
補(bǔ)充:C# 獲取打開的EXCEL中某列的行數(shù)
背景
在通過C#操作EXCEL時(shí)
獲取行數(shù)
int iRowCount = worksheet.get_Range("A65535", oMissing).get_End(MExcel.XlDirection.xlUp).Row;
改為:
int iRowCount = worksheet.get_Range("A65535", "A65535").get_End(MExcel.XlDirection.xlUp).Row;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
C#動(dòng)態(tài)生成PictureBox并指定圖片的方法
這篇文章主要介紹了C#動(dòng)態(tài)生成PictureBox并指定圖片的方法,實(shí)例分析了C#圖形控件的動(dòng)態(tài)生成及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
c# winform treelistview的使用(treegridview)實(shí)例詳解
這篇文章主要介紹了c# winform treelistview的使用(treegridview),本文通過實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2017-12-12
C# SendInput 模擬鼠標(biāo)操作的實(shí)現(xiàn)方法
C# SendInput 模擬鼠標(biāo)操作的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-04-04
利用Aspose.Cells和Excel模板導(dǎo)出統(tǒng)計(jì)數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了利用Aspose.Cells和Excel模板導(dǎo)出復(fù)雜的統(tǒng)計(jì)數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)繞任意軸任意角度旋轉(zhuǎn)向量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01

