Tôi đang cố gắng mở sổ làm việc Excel lưu trong khi vẫn giữ tham chiếu đến sổ làm việc hiện tại. Vấn đề là ngay sau khi tôi mở sổ làm việc đã lưu, bản gốc sẽ ném ngoại lệ khi truy cập.Mở sổ làm việc đã lưu làm sổ làm việc hiện tại để ném ngoại lệ
Đây là đoạn mã để minh họa. Tôi đặt điều này trong một trình xử lý sự kiện cho một nút ribbon để kiểm tra nó.
try
{
string workbookPath = @"C:\Temp\Test.xlsx";
Workbook current = Globals.ThisAddIn.Application.ActiveWorkbook;
Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(workbookPath);
current.Activate(); // throws an exception
Sheets sheets = current.Worksheets; // throws an exception
string name = current.Name; // throws an exception
}
catch (Exception ex) {}
Nếu bạn gỡ lỗi và đặt đồng hồ trên current
, sheets
và name
biến mà bạn có thể thấy rằng càng sớm càng newWorkbook
được khởi tạo, các biến khác ném ngoại lệ khi truy cập.
Trường hợp ngoại lệ đó là ném là
System.Runtime.InteropServices.COMException was caught
Message=Exception from HRESULT: 0x800401A8
Source=WorkbookTest
ErrorCode=-2147221080
StackTrace:
at Microsoft.Office.Interop.Excel._Workbook.Activate()
at WorkbookTest.Ribbon1.button1_Click(Object sender, RibbonControlEventArgs e) in C:\Temp\WorkbookTest\WorkbookTest\Ribbon1.cs:line 25
InnerException:
Điều kỳ lạ là này chỉ xảy ra trên một trường hợp mới của Excel. Nếu tôi mở Excel, đóng sổ làm việc đầu tiên và mở một sổ làm việc mới, nó hoạt động tốt. Chỉ khi tôi có một phiên bản Excel mới mở thì điều này không thành công. Tôi thực sự không hiểu tại sao.
Có ai biết cách sửa lỗi này không? Tôi có làm gì sai ở đây không?
Hiện tại được đặt thành gì sau khi bạn đặt nó thành ActiveWorkbook? –
@DougGlancy Tôi không chắc chắn ý của bạn là gì. Nó được đặt thành sổ làm việc hoạt động. "Book1" theo mặc định. Đó là một đối tượng Workbook. –
Đó là ý của tôi. Đôi khi addin là activebook ngay khi nó bắt đầu, mặc dù tôi không nghĩ như vậy ở đây, vì bạn đang gọi từ một nút. Worth một shot mặc dù. –