it-roy-ru.com

Добавление формулы в Excel с помощью C # - создание формулы

Я хотел добавить формулы в таблицу Excel.
Мне удалось сделать это с помощью свойства Formula .

Проблема в том, что когда я открываю лист в Excel, я вижу, что формула работает, но я вижу только результат в ячейке. Я не вижу формулу, которая была рассчитана на панели формул в верхней части Excel.

Очевидно, что если я введу формулу в самом Excel, то смогу увидеть результат в ячейке, а формулу - в строке формул.

Некоторые из моего кода: 

for (int i = 0; i < nOfColumns / 3; i++)
{
    Range cells = workSheet.Range[workSheet.Cells[2, i * 3 + 3], workSheet.Cells[lastRowNumber, i * 3 + 3]];
    cells.FormulaR1C1 = "=IF(EXACT(RC[-2],RC[-1]),TRUE,ABS(RC[-2]/RC[-1]-1))";
}

ниже тестовый код. даже после сохранения книги - FormulaHidden имеет значение false, и я могу успешно извлечь введенную формулу. действительно разочарован

        Microsoft.Office.Interop.Excel.Application excelApp = null;
        Workbooks workBooks = null;
        Workbook workBook = null;
        Worksheet workSheet;

        try
        {

            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.DisplayAlerts = false;

            workBooks = excelApp.Workbooks;
            workBook = workBooks.Open(filePath, AddToMru: false);
            workSheet = workBook.Worksheets.get_Item(1);

            int nOfColumns = workSheet.UsedRange.Columns.Count;
            int lastRowNumber = workSheet.UsedRange.Rows.Count;

            Range rng = workSheet.Range["C1"];
            rng.Formula = "=SUM(B2:B4)";
            String formula = rng.Formula; //retrieve the formula successfully

            rng.FormulaHidden = false;
            workSheet.Unprotect();

            workBook.SaveAs(filePath, AccessMode: XlSaveAsAccessMode.xlExclusive);

            formula = rng.Formula;  //retrieve the formula successfully
            bool hidden = rng.FormulaHidden;

        }
        catch (Exception e)
        {
            throw;
        }
        finally
        {
            if (workBook != null)
            {
                workBook.Close();
                workBook = null;
            }
            if (workBooks != null)
            {
                workBooks.Close();
                workBooks = null;
            }
            if (excelApp != null)
            {
                excelApp.Quit();
                excelApp = null;
            }
        }
    }

Кто-нибудь знает, как сделать формулу, показанную, при добавлении формул программно ?

9
Amico

в конце концов !!! догадаться. Такое поведение вызвано флагами SaveAs. Изменен 

workBook.SaveAs (filePath, AccessMode: XlSaveAsAccessMode.xlExclusive);

в 

workBook.SaveAs (filePath, AccessMode: XlSaveAsAccessMode.xlShared);

теперь осталось только понять, что именно отличается между этими двумя флагами. :)

3
Amico

Если скрыть формулу (установив флажок «Скрытый» в диалоговом окне «Формат ячеек») и защитить рабочий лист (после этого), формула не будет отображаться на панели формул.

Пример кода VBA

Range("C1").FormulaHidden = True    'set this property to false to make formula visible.
Sheet1.Protect

Правка: чтобы увидеть формулу в строке формул

Range("C1").FormulaHidden = False
Sheet1.Unprotect
1
shahkalpesh

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

Некоторое время назад, работая в Excel, у меня сложилось впечатление, что формулы сохраняются на локализованном языке (я использовал итальянский), а затем подвергаются преобразованию при компиляции. Это может иметь смысл, потому что локализованные константы являются важной частью данных электронной таблицы.

Извините, у меня сейчас нет Excel, поэтому я не могу быть более точным, но я думаю, что вы можете попытаться перевести вашу электронную таблицу на английский или установить текст формулы на вашем родном языке.

0
CapelliC

Перейдите на вкладку «Формула» на панели инструментов и нажмите «Показать формулы».

enter image description here

0
BG100