c# - interopservices - hresult 0x800a03ec solucion
Error de Excel HRESULT: 0x800A03EC al intentar obtener el rango con el nombre de la celda (10)
He encontrado este código de error al enumerar nombres y llamar a worksheet.get_Range (name). Parece ocurrir cuando el nombre NO se aplica a un rango, en mi caso es el nombre de una macro.
Estoy trabajando con el proyecto de servicio de ventana. que tiene que escribir datos en una hoja en un archivo de Excel en una secuencia veces.
Pero a veces, solo algunas veces, el servicio arroja la excepción "Excepción de HRESULT: 0x800A03EC" mientras intenta obtener rango con el nombre de la celda.
He puesto el código para abrir la hoja de Excel y obtener la celda aquí.
- OS: Windows Server 2003 Office:
- Microsoft Office 2003 sp2
1: Hoja de apertura de Excel
m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5,
"", "", true, Excels.XlPlatform.xlWindows, ";",
true, false, 0, true, 0, 0);
2: Obtener celda para escribir
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.
El código de error 0x800A03EC
(o -2146827284) significa NAME_NOT_FOUND; en otras palabras, ha pedido algo y Excel no puede encontrarlo.
Este es un código genérico, que puede aplicarse a muchas cosas que no puede encontrar, por ejemplo, usar propiedades que no son válidas en ese momento, como PivotItem.SourceNameStandard
arroja esto cuando un PivotItem no tiene un filtro aplicado. Worksheets["BLAHBLAH"]
arrojan esto, cuando la hoja no existe, etc. En general, estás pidiendo algo con un nombre específico y no existe. En cuanto a por qué, eso llevará un poco de excavación de tu parte.
Verifique que su hoja definitivamente tenga el Rango que está solicitando, o que el .CellName
definitivamente esté devolviendo el nombre del rango que está solicitando.
Encontré una posible solución aquí: http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15
Editar:
Si automatiza Microsoft Excel con Microsoft Visual Basic .NET, Microsoft Visual C # .NET o Microsoft Visual C ++, puede recibir los siguientes errores al llamar a ciertos métodos porque la máquina tiene la configuración regional configurada en un idioma que no sea inglés estadounidense (ID de configuración regional o LCID 1033):
Excepción de HRESULT: 0x800A03EC
y / o
Formato antiguo o biblioteca de tipo no válido
SOLUCIÓN 1:
Para evitar este error, puede establecer CurrentCulture en en-US al ejecutar el código relacionado con Excel y reiniciar de nuevo a su original utilizando estas 2 funciones.
//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;
}
SOLUCIÓN 2:
Otra solución que podría funcionar, crear un directorio 1033 en Microsoft Office / Office11 (o su versión de oficina correspondiente), copiar excel.exe en el directorio 1033 y cambiarle el nombre a xllex.dll.
Aunque puede resolver el problema utilizando una de estas soluciones, cuando llama al modelo de objetos de Excel en entornos distintos al inglés de los EE. UU., El modelo de objetos de Excel puede actuar de forma diferente y su código puede fallar de formas que quizás no haya pensado. Por ejemplo, puede tener un código que establece el valor de un rango en una fecha:
yourRange.Value2 = "10/10/09"
Dependiendo de la configuración regional, este código puede actuar de forma diferente, lo que hace que Excel ponga en el rango cualquiera de los siguientes valores:
10 de octubre de 2009 10 de septiembre de 2009 9 de octubre de 2010
Obtuve el error con un espacio en un Nombre de hoja:
using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup())
Lo arreglé poniendo comillas simples alrededor de los nombres de las hojas con espacios:
using (var range = _excelApp.Range["''Sheet Name Had Space''!$A$1"].WithComCleanup())
Tuve este problema cuando intentaba usar la función range.AddComment (). Pude resolver esto llamando a range.ClearComment () antes de agregar el comentario.
Me encontré con este error porque estaba intentando escribir una cadena en una celda que comenzó con un "=".
La solución fue poner un "''" (apóstrofo) antes del signo igual, que es una manera de decirle a Excel que no está, de hecho, tratando de escribir una fórmula, y solo quiere imprimir el signo de igual.
Obtuve esto cuando olvidé desproteger el libro de trabajo o la hoja.
Si puede copiar la excepción completa, sería mucho mejor, pero una vez que me enfrenté a esta Excepción, esto se debe a que la función que llama desde su archivo dll, que creo que es Aspose.dll, no se ha firmado correctamente. Creo que sería el posible duplicado de esto
FYI, para saber si su dll no se ha firmado bien, debe hacer clic derecho sobre eso e ir a la signiture y le dirá si se ha firmado electrónicamente bien o no.
El significado del error 800A03EC completamente indocumentado (¡lástima de Microsoft!) Es algo así como "FUNCIONAMIENTO NO APOYADO".
Puede pasar
- cuando abre un documento que tiene un contenido creado por una versión de Excel más nueva, que su versión actual de Excel no comprende.
- cuando guarda un documento en la misma ruta desde donde lo ha cargado (el archivo ya está abierto y bloqueado)
Pero, en su mayoría, verá este error debido a errores graves en Excel.
- Por ejemplo Microsoft.Office.Interop.Excel.Picture tiene una propiedad "Activado". Cuando lo llames, deberías recibir un valor bool. Pero en su lugar se obtiene un error 800A03EC. Este es un error.
- Y hay un error muy gordo en Exel 2013 y 2016: cuando automatiza un proceso de Excel y establece
Application.Visible=true
yApplication.WindowState = XlWindowState.xlMinimized
entonces obtendrá cientos de errores 800A03EC de diferentes funciones (como Range.Merge (), CheckBox.Text, Shape.TopLeftCell, Shape.Locked y muchos más). Este error no existe en Excel 2007 y 2010.
Usando la respuesta de Dominic, encontré que la respuesta a mi problema era específicamente un DateTiime no válido en los datos de origen antes de que se aplicara al rango. En algún lugar entre la base de datos, .NET y Excel, la conversión de la fecha predeterminada a "1/1/1899 12:00:00 AM". Tuve que comprobarlo y convertirlo en una cadena vacía y lo arreglé para mí.
if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM")
{
objectArray[row, col] = string.Empty;
}
Este es probablemente un ejemplo bastante específico, pero con suerte le ahorrará a alguien más algo de tiempo si está tratando de rastrear un dato no válido.