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

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

проблема в том, что когда я открываю рабочий лист в 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))";
}

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

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

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

4 ответов


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

книги.SaveAs (путь к файлу, AccessMode: XlSaveAsAccessMode.xlExclusive);

до

книги.SaveAs (путь к файлу, AccessMode: XlSaveAsAccessMode.xlShared);

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


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

пример кода VBA

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

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

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

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

enter image description here


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

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

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