Добавление формулы в 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
Я думаю, что локализация может быть связана с этим странным поведением.
некоторое время назад, работая в Excel, у меня сложилось впечатление, что Формулы хранятся на локализованном языке (я использовал итальянский), а затем подвергаются преобразованию при компиляции. Это может иметь смысл, поскольку локализованные константы являются неотъемлемой частью данных электронной таблицы.
Мне жаль, что у меня сейчас нет Excel, поэтому я не могу быть более точным, но я думаю, что вы могли бы попытаться локализовать на английском языке электронная таблица, или установить текст формулы на вашем местном языке.