2012-04-23 42 views
6

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, sheetsname 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?

+0

Hiện tại được đặt thành gì sau khi bạn đặt nó thành ActiveWorkbook? –

+0

@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. –

+0

Đó 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ù. –

Trả lời

6

Tôi nghĩ rằng đây có thể là hành vi đúng.

Nếu bạn bắt đầu phiên Excel mới (tự động tạo sổ làm việc mới [Book1]) và sau đó, mà không làm bất cứ điều gì để Book1 mở sổ làm việc hiện có, bạn sẽ nhận thấy rằng Book1 không còn tồn tại trong Excel phiên.

Tôi đoán bạn đang gặp phải hành vi tương tự thông qua bổ trợ C# của bạn.

2

Đây là hành vi đúng như được mô tả bởi 'creamyegg'

Excel sẽ hủy sổ làm việc tạm thời nếu nó không được sử dụng. Để giải quyết vấn đề này, bạn chỉ cần sử dụng trang tính trước khi mở trang tính khác.

Tìm một ô trống và sửa đổi nó! Sổ làm việc của bạn sẽ vẫn còn và bạn có thể đi về doanh nghiệp của bạn. :)

Các vấn đề liên quan