2012-10-03 77 views
46

que estoy recibiendo "HRESULT: 0x800A03EC" error al ejecutar complemento de Excel con el siguiente código:excepción de HRESULT: 0x800A03EC error

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;     
string before = rng.Value2; 
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", ""); 
rng.set_Value(cleanV); 

Cuando el error ocurre X e Y se pone a 1, por lo tanto rango de Excel es no violado Realicé búsquedas exhaustivas e intenté varias formas de establecer el valor de la celda (por ejemplo, Células [x, y], Rango.set_Valor()) pero no entiendo por qué ocurre este error y cómo evitarlo.

Cualquier ayuda es muy apreciada.

A continuación se presentan detalles de la excepción:


System.Runtime.InteropServices.COMException was unhandled by user code 
    HResult=-2146827284 
    Message=Exception from HRESULT: 0x800A03EC 
    Source="" 
    ErrorCode=-2146827284 
    StackTrace: 
     at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) 
     at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value) 
     at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354 
     at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123 
     at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493 
     at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\Ribbon1.cs:line 55 
     at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control) 
     at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args) 
     at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args) 
     at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
     at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters) 
    InnerException: 
+2

¿Recibió o encuentra una solución a este problema? – scifirocket

+0

Este error es muy 'genérico' y puede deberse a muchas razones. La razón por la que sucedió para mí fue guardar un tipo de datos de cliente en C# para sobresalir. Tuve este error al intentar guardar un objeto contenedor de fecha; Creo que excel api requiere que los datos sean del tipo C# primitive, de lo contrario, puede causar problemas. – stt106

Respuesta

86

Tienes mismo error en esta línea

Object temp = range.Cells[i][0].Value; 

Resuelto con distinto de cero basados ​​en índices

Object temp = range.Cells[i][1].Value; 

¿Cómo es posible que los chicos que crearon esta biblioteca pensaron que era una buena idea usar indexación no basada en cero?

+29

IMO, podría estar relacionado con el hecho de que el esquema de nomenclatura celular de Excel no está basado en cero ("R1C1") ... –

+17

Índices BÁSICOS desde 1. Excel incluyó BASIC muy temprano (en la década de 1980) como macro/scripting language, que más tarde llevó a Visual Basic para Aplicaciones. Esto fue antes del uso generalizado de los lenguajes tipo C con su indexación matemáticamente correcta basada en cero, que entró en uso común en la década de 1990 gracias a la tecnología web que incluye Java, Perl y Javascript. –

3

Ir a Opciones de Excel> Guardar> Guardar archivos en este formato> Seleccione "Libro de Excel (* .xlsx.)". Este problema se produce si está utilizando una versión anterior del archivo de Excel (.xls) en lugar de .xlsx. La versión anterior no permite más de 65k filas en la hoja de Excel.

Una vez que haya guardado como .xslx, intente ejecutar su código de nuevo.

edición ----

Mirando más en su problema, parece que el problema podría ser específica para la localización. ¿Funciona el código en otra máquina? ¿Qué valor tiene la célula? ¿Es formato de fecha y hora? Echar un vistazo aquí:

http://support.microsoft.com/kb/320369

http://blogs.msdn.com/b/eric_carter/archive/2005/06/15/429515.aspx

+1

Gracias por la sugerencia, pero esta no es la causa. Estoy trabajando en Excel2010 y la excepción sucedió incluso después de guardar como "xlsx". Lo más extraño es que no ocurre todo el tiempo, sino solo para ciertas combinaciones de datos. Sin embargo, no puedo encontrar un patrón que lo cause. –

+1

¿puede publicar su código para ThisAddin en el enlace 354? ¿Estás tratando de recortar el valor en las celdas? Además, ¿estás seguro de que Cells [x, y] no está comenzando desde 0? Los valores de celda comienzan desde 1 y no están basados ​​en cero en Excel. – tranceporter

+0

Lo consigo cuando el nombre de un archivo es demasiado largo (aunque no estoy seguro de cuál es el límite) – steveo40

8

Verificar los índices de inicio. Su inicio desde 1 no es 0 para Microsoft.Office.Interop.Excel range objects. He recibido el mismo error debido a mi valor de inicio de bucle.

13

Este es un error COM de Excel común pero poco documentado. Lo he documentado como "NAME_NOT_FOUND", lo que significa que la capa COM de Excel está deshabilitada y no puede encontrar la propiedad COM o el nombre del método.

Recibo este error de forma consistente cuando ejecuto el código COM mientras Excel está 'ocupado', por ejemplo, si configura un temporizador que iniciará el código, y el código comienza a ejecutarse mientras el usuario está editando una celda o presionando botón del mouse, entonces siempre obtendrás este error. Este error solo ocurre cuando el código se ejecuta en el hilo principal de Excel, pero parece ser el equivalente al error VBA_E_IGNORE = 0x800AC472, que se obtiene al llamar al modelo de objetos COM de Excel desde otro hilo, mientras que Excel está 'ocupado'.

La única solución parece ser volver a intentar (con un pequeño retraso) la llamada COM hasta que tenga éxito, cuando Excel ya no esté 'ocupado'.

+0

Parece que puede estar en lo cierto al respecto. Lamentablemente, sigo atacando el problema después de un millón y más de registros. –

+0

Si el usuario está ocupado editando una fórmula, este error puede persistir indefinidamente. – Govert

1

Recibí el mismo error al usar archivos DLL de Excel 2003 e intentar escribir en la columna 257.o Excel 2003 limita la columna máxima por hoja de cálculo a 256, lo que plantea esta excepción.

Para conocer las limitaciones detalladas de Excel 2003, ver http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspx

A partir de Excel 2007, la limitación de la columna se incrementa a 16.384 columnas, ver http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP010073849.aspx

2

consiguió el mismo error al tratado de exportar un archivo grande de Excel (~ 150.000 filas) fijo con el siguiente código

Application xlApp = new Application(); 
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook; 
3

Llegamos a este error también ....

se produce cuando excepto a vía de archivo contiene caracteres no válidos, en mi caso:

path = "C:/somefolder/anotherfolder\file.xls"; 

nota la existencia de ambos \ y /

* También puede ocurrir si tratando de salvar al directorio, que doesn' t ya existe.

2

Tuvimos el mismo problema y encontrar la solución para nosotros:

Por favor haga esta carpeta. C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop · Windows 2008 Server x86
Haga esta carpeta. C: \ Windows \ System32 \ config \ systemprofile \ Desktop

Cuestiones relacionadas