dashingly Ответов: 4

Исключение из HRESULT: ошибка 0x800A03EC


Я получаю ошибку "HRESULT: 0x800A03EC" при запуске надстройки Excel со следующим кодом:
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);


Когда происходит ошибка, X и Y устанавливаются в 1, таким образом, диапазон Excel не нарушается.
Я тщательно искал и пробовал несколько способов установки значения ячейки (например, Cells[x,y], range.set_Value()) но я не понимаю, почему происходит эта ошибка и как ее избежать.

Любая помощь будет очень признательна.

Ниже приведены сведения об исключениях:


----------


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: 

4 Ответов

Рейтинг:
28

dashingly

Я должен был проверить, является ли значение нулевым, но это работало только определенным образом:

if (rng.Value2 != null){}


Рейтинг:
14

EddyGuzman

Примерно через год с тех пор, как об этом спросили, но я получил ту же ошибку, и это была самая простая вещь...
Решение 1-это очевидная проблема, основанная на 0, но, как вы уже упоминали, у вас уже есть 1 вместо 0.
Решение 2...при экспорте в excel убедитесь, что у вас нет символа равенства (=) в начале любых данных...Excel распознает это как начало вызова или формулы, поэтому он пытается решить что-то, что, возможно, не существует или не может быть сделано.
Надеюсь, это поможет всем, у кого есть эта проблема.


Niels Van Extergem

Спасибо вам за ваш пост, даже спустя 5 лет! Мы довольно быстро решили производственную проблему из-за вашего поста. Кто бы мог подумать!

Рейтинг:
1

Zoltán Zörgő

Похоже, что вы не единственный: http://stackoverflow.com/questions/7099770/hresult-0x800a03ec-on-worksheet-range[^].

Согласно сообщению, эта ошибка возникает при работе со старой книгой (xls), открытой в Excel 2007 или 2010. Если это так, попробуйте сначала сохранить файл как книгу нового формата, прежде чем обращаться к ячейкам.


Рейтинг:
1

Member 4681297

У меня была такая же проблема. Моя проблема проистекала из моего кода. У меня была очень длинная строка кода, поэтому я нажал enter в нескольких местах, чтобы разбить код, и это вызвало мою проблему. Он пытался ввести невидимый обратный каррейдж в мою формулу excel и вызвал бы сбой программы. Удаление моих разрывов строк в коде исправило это.
Вот длинная очередь, которую я пытался разорвать. Теперь работает нормально.
newWorksheet.Cells[8, 7] = @"=TEXT(IF(ISNA(OFFSET(OFFSET(BGPM1000XX!M12,0,11*0),MATCH(BGPM1000XX!B5+0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0)),OFFSET(OFFSET(BGPM1000XX!M12,0,11*0),MATCH(BGPM1000XX!$B$5-0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0),OFFSET(OFFSET(BGPM1000XX!M12,0,11*0),MATCH(BGPM1000XX!$B$5+0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0)),""$#,#00"")& "" - "" &TEXT(IF(ISNA(OFFSET(OFFSET(BGPM1000XX!O12,0,11*0),MATCH(BGPM1000XX!B5+0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0)),OFFSET(OFFSET(BGPM1000XX!O12,0,11*0),MATCH(BGPM1000XX!$B$5-0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0),OFFSET(OFFSET(BGPM1000XX!O12,0,11*0),MATCH(BGPM1000XX!$B$5+0.001,BGPM1000XX!A12:OFFSET(BGPM1000XX!A12,7,0),-1),0)),""$#,#00"")";