Erreur Excel HRESULT: 0x800a03ec en essayant d'obtenir la portée avec le nom de la cellule
je travaille avec Window Service project. qui doivent écrire des données à une feuille dans le fichier Excel dans des temps de séquence.
mais parfois, juste parfois, le service jeter l'exception" Exception de HRESULT: 0x800A03EC " alors qu'il essaie d'obtenir la gamme avec le nom de la cellule.
j'ai mis le code d'ouverture de la feuille excel, et d'obtenir la cellule ici.
- système d'exploitation: windows server 2003 Office:
- Microsoft Office 2003 sp2
1: Ouverture de la feuille excel
m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5,
"", "", true, Excels.XlPlatform.xlWindows, ";",
true, false, 0, true, 0, 0);
2: Obtenir une cellule pour écrire
protected object m_MissingValue = System.Reflection.Missing.Value;
Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue);
// error from this method, and cell name is string.
11 réponses
le code d'erreur 0x800A03EC
(ou -2146827284) signifie NAME_NOT_FOUND; en d'autres termes, vous avez demandé quelque chose, et Excel ne peut pas le trouver.
c'est un code générique, qui peut s'appliquer à beaucoup de choses qu'il ne peut pas trouver par exemple en utilisant des propriétés qui ne sont pas valides à ce moment-là comme PivotItem.SourceNameStandard
jette cela quand un pivot n'a pas un filtre appliqué. Worksheets["BLAHBLAH"]
lance ceci, quand la feuille n'existe pas etc. En général, vous demandez quelque chose avec un le nom spécifique et il n'existe pas. Quant à savoir pourquoi, il va falloir creuser un peu de votre part.
Vérifier votre fiche n'a absolument avoir la Gamme que vous demandez, ou que le .CellName
est certainement redonner le nom de la plage que vous demandez.
j'ai rencontré cette erreur parce que j'essayais d'écrire une chaîne à une cellule qui commençait par un"=".
la solution était de mettre un "'" (apostrophe) avant le signe égal, ce qui est une façon de dire à excel que vous n'êtes pas, en fait, en train d'écrire une formule, et que vous voulez juste imprimer le signe égal.
j'ai trouvé une solution possible ici: http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15
Edit:
si vous automatisez Microsoft Excel avec Microsoft Visual Basic .NET, Microsoft Visual C# .NET, ou Microsoft Visual C++, vous pouvez recevoir les erreurs suivantes lors de l'appel de certaines méthodes parce que la machine a la locale réglée à quelque chose d'autre que L'Anglais US (locale ID ou LCID 1033):
Exception de HRESULT: 0x800a03ec
et / ou
bibliothèque de type ancien ou invalide
SOLUTION 1:
pour contourner cette erreur, vous pouvez définir CurrentCulture à en-US lors de l'exécution du code lié à Excel et réinitialiser de nouveau à votre originale en utilisant ces 2 fonctions.
//declare a variable to hold the CurrentCulture
System.Globalization.CultureInfo oldCI;
//get the old CurrenCulture and set the new, en-US
void SetNewCurrentCulture()
{
oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
}
//reset Current Culture back to the originale
void ResetCurrentCulture()
{
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
}
SOLUTION 2:
une autre solution qui pourrait fonctionner, créer un répertoire 1033 sous Microsoft Office\Office11 (ou votre office-version correspondante), copiez excel.exe dans le répertoire 1033, et renommé en xllex.DLL.
bien que vous pourriez résoudre le problème en utilisant une de ces solutions, lorsque vous appelez le modèle D'objet Excel dans des locales autres que L'Anglais Américain, le modèle D'objet Excel peut agir différemment et votre code peut échouer de façons que vous ne pouvez pas avoir la pensée de. Par exemple, vous pouvez avoir un code qui fixe la valeur d'une plage à une date:
yourRange.Valeur2 = "10/10/09"
selon la localisation ce code peut agir différemment résultant en Excel mettant dans la gamme l'une des valeurs suivantes:
10 octobre 2009 Le 10 septembre 2009 9 octobre 2010
j'ai obtenu l'erreur avec un espace dans un nom de feuille:
using (var range = _excelApp.Range["Sheet Name Had Space!$A"].WithComCleanup())
Je l'ai corrigé en mettant des guillemets autour des noms de feuilles avec des espaces:
using (var range = _excelApp.Range["'Sheet Name Had Space'!$A"].WithComCleanup())
j'ai eu ce problème lorsque j'ai essayé d'utiliser la gamme.AddComment () function. J'ai pu résoudre ça en appelant range.ClearComment () avant d'ajouter le commentaire.
Le sens de l'complètement sans-papiers", 151940920" erreur 800A03EC (honte à Microsoft!) est quelque chose comme"opération non prise en charge".
Il se peut
- lorsque vous ouvrez un document qui a un contenu créé par une nouvelle version Excel, que votre version Excel actuelle ne comprend pas.
- lorsque vous enregistrez un document sur le même chemin où vous l'avez chargé (le fichier est déjà ouvert et verrouillé)
mais la plupart du temps, vous verrez cette erreur due à grave bugs dans Excel.
- par exemple Microsoft.Bureau.Interop.Excel.Picture possède une propriété "Enabled". Lorsque vous appelez, vous devriez recevoir une valeur booléenne. Mais à la place vous obtenez une erreur 800A03EC. C'est un bug.
- et il y a un bug très gros dans Exel 2013 et 2016: Lorsque vous automatisez un processus Excel et définir
Application.Visible=true
etApplication.WindowState = XlWindowState.xlMinimized
alors vous obtiendrez des centaines d'erreurs 800A03EC de différentes fonctions (comme la gamme.Merge(), Une Case À Cocher.Un Texte, Une Forme.TopLeftCell, Shape.Verrouillé et beaucoup plus). Ce bogue n'existe pas dans Excel 2007 et 2010.
j'ai rencontré ce code d'erreur en énumérant les noms et en appelant la feuille de travail.get_Range(nom). Il semble se produire lorsque le nom ne s'applique PAS à une plage, dans mon cas, c'est le nom d'une macro.
j'ai eu ça quand j'ai oublié de ne pas protéger le cahier ou la feuille.
en utilisant la réponse de Dominic j'ai trouvé que la réponse à mon problème était spécifiquement une donnée invalide dans les données source avant qu'elle ne soit appliquée à la gamme. Quelque part entre la base de données, .NET et Excel la conversion de la date par défaut vers le bas à "1/1/1899 12:00:00 AM". J'ai dû le vérifier et le convertir en chaîne vide et il l'a réparé pour moi.
if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM")
{
objectArray[row, col] = string.Empty;
}
c'est probablement un exemple assez spécifique, mais j'espère qu'il sauvera quelqu'un d'autre un certain temps si ils essaient de retrouver des données invalides.
j'ai couru à une erreur similaire en exécutant Excel dans VBA, ce que j'ai appris est que lorsque je tire des données de MSSQL, puis en utilisant get_range
et .Value2
appliquer il est hors de la gamme, toute valeur qui était de type uniqueidentifier
(GUID) a entraîné cette erreur.
Ce n'est que lorsque j'ai moulé la valeur à nvarcahr(max)
qu'il a fonctionné.
si vous pouvez copier l'ensemble de l'exception, ce serait beaucoup mieux, mais une fois que j'ai fait face à cette Exception et c'est parce que la fonction appelant à partir de votre fichier dll qui je suppose est Aspose.dll n'a pas été signée. Je pense que ce serait le double possible de ce
pour information, afin de savoir si votre dll n'a pas été signé bien, vous devez droit-cliquer dessus et aller à la signature et il vous dira si elle a été signature électronique bonne ou mauvaise.