Nếu tôi có một tham chiếu đến Worksheet
và tôi đóng nó là phụ huynh Workbook
, tham chiếu sẽ không biến mất. Nhưng tôi không thể tìm ra cách tôi nên kiểm tra để chắc chắn rằng những tờ này không tồn tại. Kiểm tra null
không hoạt động.Trong Excel VSTO, làm cách nào tôi có thể kiểm tra xem một trang tính thuộc về một bảng tính đã đóng?
Ví dụ:
Workbook book = Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet sheet = (Worksheet)book.Worksheets[1]; // Get first worksheet
book.Close(); // Close the workbook
bool isNull = sheet == null; // false, worksheet is not null
string name = sheet.Name; // throws a COM Exception
Đây là ngoại lệ tôi nhận được khi tôi cố gắng truy cập vào tờ:
System.Runtime.InteropServices.COMException was caught
HResult=-2147221080
Message=Exception from HRESULT: 0x800401A8
Source=MyProject
ErrorCode=-2147221080
StackTrace:
at Microsoft.Office.Interop.Excel._Worksheet.get_Name()
at MyCode.test_Click(Object sender, RibbonControlEventArgs e) in c:\MyCode.cs:line 413
InnerException:
này sẽ thậm chí không phải là một vấn đề nếu tôi có thể kiểm tra một workbook xóa sự kiện, nhưng Excel không cung cấp một (mà là thực sự gây phiền nhiễu).
Có cách nào thuận tiện để đảm bảo tôi không sử dụng các trang tính này không?
Điều này có tác dụng, nhưng chỉ khi nào tôi có 'Sổ làm việc' vào lúc đó. Mã ví dụ của tôi rất đơn giản, nhưng trong thực tế, tôi có một số phương thức chỉ lấy một đối tượng 'Worksheet'. Tuy nhiên, tôi sẽ chấp nhận câu trả lời của bạn kể từ khi tôi đã làm một cái gì đó tương tự. Cụ thể, tôi đã kiểm tra 'Application.Workbooks.Count> 0'. Vì tôi chỉ gặp vấn đề này khi không có sổ làm việc nào được mở, kiểm tra này đủ cho nhu cầu của tôi. Cảm ơn cho đầu vào của bạn mặc dù. –