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

