L'ouverture d'un classur sauvegardé amène le classur actuel à lancer des exceptions

J'essaie d'ouvrir un classur Excel stocké tout en gardant une reference au classur actuel. Le problème est que dès que j'ouvre le classur sauvegardé, l'original lance une exception lors de l'access.

Voici un extrait de code à démontrer. Je l'ai mis dans un gestionnaire d'events pour un button de ruban pour le tester.

try { ssortingng 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 ssortingng name = current.Name; // throws an exception } catch (Exception ex) {} 

Si vous déboguez et mettez des montres sur le current , les sheets et les variables de name , vous pouvez voir que dès que le nouveau newWorkbook est instancié, les autres variables ont été lancées lors de l'access.

L'exception qui est lancée est

 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: 

La chose la plus étrange est que cela ne se produit que sur une nouvelle instance d'Excel. Si j'ouvre Excel, fermez le premier classur et ouvrez un nouveau, cela fonctionne très bien. C'est seulement si j'ai une instance nouvellement ouverte d'Excel que cela échoue. Je ne comprends vraiment pas pourquoi.

Est-ce que quelqu'un sait comment réparer ceci? Est-ce que je fais quelque chose de mal ici?

Je pense que ce pourrait être le bon comportement.

Si vous deviez démarrer manuellement une nouvelle session Excel (qui crée automatiquement un nouveau classur [Book1]), puis, sans rien faire sur Book1, ouvrez un classur existant, vous remarquerez que Book1 n'existe plus dans la session Excel.

Je suppose que vous rencontrez le même comportement via votre complément C #.

C'est le comportement correct tel que décrit par 'creamyegg'

Excel lâche le classur temporaire s'il n'est pas utilisé. Pour contourner ce problème, il vous suffit d'utiliser la feuille avant d'en ouvrir une autre.

Trouvez une cellule vide et modifiez-la! Votre cahier de travail restra et vous pourrez faire affaire avec vous. 🙂