l'écriture de données à partir de C# pour Excel interrompu par l'ouverture de la Fenêtre Excel

Alors que mon programme C# écrit des données en continu vers une feuille de calcul Excel, si l'utilisateur clique sur le menu supérieur droit et ouvre le
Excel Options de la fenêtre, ce qui provoque un Système.Moment de l'exécution.InteropServices.COMException avec HRESULT: 0x800AC472 qui interrompt les données
sur la feuille de calcul.

Idéalement, l'utilisateur doit être autorisé à le faire sans provoquer une exception.

La seule solution que j'ai trouvé ce code d'erreur a été de boucle et d'attendre jusqu'à ce que l'exception s'en alla:
Exception de HRESULT: 0x800AC472
qui entraîne le blocage de l'application, les données ne sont pas écrites Excel et l'utilisateur est laissé dans l'ignorance du problème.

J'ai pensé à désactiver le menu principal d'Excel lors de l'écriture, mais ne peut pas trouver une référence sur la façon de le faire.

Mon application prend en charge Excel 2000 à 2013.

Ici est de savoir comment reproduire le problème:

À l'aide de Visual Studio Express 2013 pour Windows Desktop .NET 4.5.1 sur Windows 7 64-bit avec Excel 2007.

Créer une nouvelle Application Console Visual C# du projet.

Ajouter une référence à "Microsoft ExceL 12.0 Object Library" (pour Excel) et de "Système.De Windows.Les formes" (pour messagebox).

Voici le code complet:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading.Tasks;
using System.Threading; //for sleep
using System.IO;
using System.Runtime.InteropServices;
using System.Reflection;
using Microsoft.Win32;
using Excel = Microsoft.Office.Interop.Excel; 
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int i = 3; //there is a split pane at row two
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
try 
{ 
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlApp.Visible = false;
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlApp.Visible = true;
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//next 2 lines for split pane in Excel:
xlWorkSheet.Application.ActiveWindow.SplitRow = 2; 
xlWorkSheet.Application.ActiveWindow.FreezePanes = true;
xlWorkSheet.Cells[1, 1] = "Now open the";
xlWorkSheet.Cells[2, 1] = "Excel Options window";
}
catch (System.Runtime.InteropServices.COMException)
{
System.Windows.Forms.MessageBox.Show("Microsoft Excel does not seem to be installed on this computer any longer (although there are still registry entries for it). Please save to a .tem file. (1)");
return;
}
catch (Exception)
{
System.Windows.Forms.MessageBox.Show("Microsoft Excel does not seem to be installed on this computer any longer (although there are still registry entries for it). Please save to a .tem file. (2)");
return;
}
while(i < 65000)
{
i++;
try
{
xlWorkSheet.Cells[i, 1] = i.ToString();
Thread.Sleep(1000);
}
catch (System.Runtime.InteropServices.COMException)
{
System.Windows.Forms.MessageBox.Show("All right, what do I do here?");
}
catch (Exception) 
{
System.Windows.Forms.MessageBox.Show("Something else happened.");    
}
}
Console.ReadLine(); //Pause
}
}
}

Lanch l'app, Excel s'affiche et les données sont écrites. Ouvrir Excel fenêtre de dialogue des options de menu et qu'apparaît le message d'erreur:

Une exception de type 'System.Moment de l'exécution.InteropServices.COMException' s'est produite dans mscorlib.dll et n'a pas été traité avant géré/native limite

Informations supplémentaires: Exception de HRESULT: 0x800AC472

Cliquez sur Continuer et mon messagege case "Tous les droits, que dois-je faire ici?" s'affiche.

Veuillez informer?

Meilleures salutations,
Bertrand

All right, what do I do here? - si vous ne pouvez pas éviter l'exception d'être lancé alors vous avez besoin d'une façon de le gérer. The only solution I found to this error code was to loop and wait until the exception went away ou I thought about disabling the main menu of Excel while writing to it, but cannot find a reference on how to do this. - pouvez-vous ne pas aller en Plein Écran dans Excel ou désactiver le ruban?
Sonne comme de la merde. Si vous êtes prêt à désactiver le menu, une alternative serait de créer un 99% transparent éternuer garde qui suit la fenêtre excel, mais cela laisse tout de même la question de l'accès au clavier. Je dirais que la meilleure solution est de mettre une info-bulle type d'avis de laisser l'utilisateur de savoir que vous êtes dans votre exception de la boucle.
comment me: vous obtenez la même erreur dans les versions antérieures d'Excel avec pas de ruban par l'ouverture de la fenêtre à Propos, il n'est donc pas un ruban question.
Mark Robbins: la désactivation du menu est possible, mais pas souhaitable solution. Je voudrais résoudre l'exception, vraiment.
Le problème avec excel est chaque carnet de travail est mono-thread, donc il ne peut pas travailler de manière asynchrone. Comme d'autres l'ont mentionné, vous êtes le meilleur désactiver le verrouillage de l'utilisateur à partir de la feuille de calcul pendant que vous travaillez. ou chiot un message qui dit s'il vous plaît ne pas le faire à l'instant, je suis en train de travailler

OriginalL'auteur Bertrand_Szoghy | 2014-05-22