2012-10-03 35 views
46

sto ottenendo "HRESULT: 0x800A03EC" errore durante l'esecuzione di Excel add-in con codice seguente:Eccezione da HRESULT: 0x800A03EC errore

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); 

Quando l'errore accade X e Y sono impostati a 1, quindi gamma Excel è non violato Ho cercato in modo estensivo e ho provato un certo numero di modi per impostare il valore della cella (ad esempio Cells [x, y], range.set_Value()) ma sono in perdita perché questo errore si verifica e come evitarlo.

Qualsiasi aiuto è molto apprezzato.

Qui di seguito sono i dettagli di eccezione:


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

Hai ricevuto o trovato una risposta a questo problema? – scifirocket

+0

Questo errore è molto "generico" e può essere causato da molte ragioni. Il motivo per cui è successo per me è stato il salvataggio di un tipo di dati del cliente in C# per eccellere. Ho avuto questo errore durante il tentativo di salvare un oggetto wrapper di date; Immagino che excel api richieda che i dati siano di tipo primitivo C# altrimenti potrebbe causare problemi. – stt106

risposta

86

Got stesso errore in questa linea

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

risolto con non-zero basano indice

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

Come è possibile che i ragazzi che hanno creato questa libreria pensato che fosse una buona idea usare indicizzazione basata su zero?

+29

IMO, potrebbe essere correlato al fatto che lo schema di denominazione delle celle di Excel è in realtà non a base zero ("R1C1") ... –

+17

indici BASIC da 1. Excel incluso BASIC molto presto (negli anni '80) come linguaggio macro/scripting, che in seguito ha portato a Visual Basic, Applications Edition. Questo era prima dell'uso diffuso dei linguaggi C-like con la loro indicizzazione a base zero più matematicamente corretta, che è diventata di uso comune negli anni '90 grazie alla tecnologia web tra cui Java, Perl e Javascript. –

3

Vai a Opzioni di Excel> Salva> Salva file in questo formato> Selezionare "cartella di lavoro Excel (* xlsx.)". Questo problema si verifica se si utilizza una versione precedente del file excel (.xls) anziché .xlsx. La versione precedente non consente più di 65k righe nel foglio Excel.

Una volta salvato come .xslx, provare di nuovo ad eseguire il codice.

modificare ----

Guardando più nel vostro problema, sembra che il problema potrebbe essere specifico locale. Il codice funziona su un'altra macchina? Che valore ha la cella? È un formato datetime? Date un'occhiata qui:

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

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

+1

Grazie per il suggerimento, ma questa non è la causa. Sto lavorando in Excel2010 e l'eccezione si è verificata anche dopo che ho salvato come "xlsx". La parte più strana è che non accade sempre, ma solo per determinate combinazioni di dati. Non riesco a trovare un modello che lo causa però. –

+1

puoi per favore pubblicare il tuo codice per ThisAddin al link 354? Stai cercando di tagliare il valore nelle celle? Inoltre, sei sicuro che Cells [x, y] non inizi a partire da 0? I valori delle celle partono da 1 e non sono a base zero in Excel. – tranceporter

+0

Viene visualizzato quando il nome di un file è troppo lungo (non sono sicuro quale sia il limite) – steveo40

8

Controlla gli indici di inizio. Inizia da 1 non 0 per gli oggetti intervallo Microsoft.Office.Interop.Excel. Avevo ricevuto lo stesso errore a causa del mio valore di avvio del loop.

13

Questo è un errore COM di Excel comune ma scarsamente documentato. L'ho visto documentato come "NAME_NOT_FOUND", il che significa che il livello COM di Excel è disabilitato e non riesce a trovare la proprietà COM o il nome del metodo.

Viene visualizzato questo errore in modo coerente quando si esegue il codice COM mentre Excel è "occupato", ad esempio se si imposta un timer che avvia il codice e il codice inizia a funzionare mentre l'utente sta modificando una cella o premendo verso il basso pulsante del mouse, quindi riceverai sempre questo errore. Questo errore si verifica solo quando il codice viene eseguito sul thread Excel principale, ma sembra essere l'equivalente dell'errore VBA_E_IGNORE = 0x800AC472, che si ottiene quando si chiama il modello oggetto COM di Excel da un altro thread, mentre Excel è "occupato".

L'unica soluzione sembra essere di riprovare (con qualche piccolo ritardo) la chiamata COM fino a quando non riesce - quando Excel non è più 'occupato'.

+0

Sembra che su questo sia corretto. Sfortunatamente, sto ancora affrontando il problema dopo un milione e più record. –

+0

Se l'utente è impegnato a modificare una formula, questo errore può persistere indefinitamente. – Govert

1

Ho ricevuto lo stesso errore durante l'utilizzo delle DLL di Excel 2003 e ho provato a scrivere sulla 257a colonna. Excel 2003 limita la colonna massima per foglio di lavoro a 256, sollevando in tal modo questa eccezione.

Per le limitazioni dettagliate di Excel 2003, vedere http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspx

A partire da Excel 2007, limitazione della colonna è aumentata a 16384 colonne, vedere http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP010073849.aspx

2

ottenuto lo stesso errore quando ha cercato di esportare un file di grandi dimensioni di Excel (~ 150.000 righe) fisso con il seguente codice

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

ottenuto questo errore anche ....

si verifica quando Salva percorso file contiene caratteri non validi, nel mio caso:

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

nota l'esistenza sia \ e /

* Inoltre può verificarsi se si cerca di salvarlo nella directory che doesn' già esiste

2

abbiamo avuto lo stesso problema e trovato per noi la soluzione:

Si prega di fare questa cartella. C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop · Windows 2008 Server x86
Si prega di fare questa cartella. C: \ Windows \ System32 \ config \ systemprofile \ Desktop

Problemi correlati