2015-09-23 3 views
1

Я пытаюсь создать файл excel с помощью Interop.Excel, но у меня есть 2 локализации, где мне нужно запустить мое приложение WPF.Interop.Excel localization и Range.Formula vs Formulalocal

де-DE и EN-US

Для локализации де-DE моя программа работает отлично (также DE MS Office установлены на моем ноутбуке), но когда я пытаюсь запустить его на сервере EN-US затем У меня проблемы.

Вот фрагмент из исходного кода:

cell = "K" + rowCounter;   
Excel.Range ThisRange = xlWorkSheet.get_Range(cell, System.Type.Missing); 
string myFunction;   

if (Thread.CurrentThread.CurrentUICulture.IetfLanguageTag == "de-DE") 
    { 
    myFunction = "=+WENN(I" + rowCounter + "<=J" + rowCounter + ";J" + rowCounter + "-I" + rowCounter + ";\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))"; 

    ThisRange.FormulaLocal = myFunction;   
    } 
else 
    { 
    myFunction = "=+IF(I" + rowCounter + "<=J" + rowCounter + ";J" + rowCounter + "-I" + rowCounter + ";\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))"; 

    ThisRange.Formula = myFunction; 
    } 

И я всегда получаю вид этого исключения:

Исключение: System.Runtime.InteropServices.COMException (0x800A03EC): Исключение из HRESULT: 0x800A03EC на System.RuntimeType.ForwardCallToInvokeMember (String MemberName, BindingFlags флагов, целевой объект, Int32 [] aWrapperTypes, MessageData & msgData) при Microsoft.Office.Interop.Excel.Range.set_Formula (значение объекта)

Я также попытался изменить локализацию на de-DE при распознавании различной локализации - не помогло.

Знаете ли вы, что может быть неправильным?

Заранее спасибо.

+0

'Range.Formula' всегда использует обозначения формул в en_us. Таким образом, имена функций являются английскими, но и разделитель параметров - это запятая, а не точка с запятой. Попробуйте 'myFunction =" = + IF (I "+ rowCounter +" <= J "+ rowCounter +", J "+ rowCounter +" -I "+ rowCounter +", \ "24:00 \" + (J "+ rowCounter + "-I" + rowCounter + "))"; '. Btw. из-за 'Range.Formula' всегда используется обозначение формулы в en_us, нет необходимости различать локаль. –

ответ

0

Согласно комментарию от Axel, проблема была в разделителе:

Range.formula требует ,
Range.formulalocal требует ;

Я исправил это в своем исходном коде, и теперь он работает нормально.