Excel Open xml sdk - копирование формулы между ячейками с изменением диапазона

У меня есть ячейка с формулой (CellFormula). Я не знаю содержания формулы (может быть сумма, если или любой другой расчет).
Формула может включать диапазон.
При перетаскивании ячейки в другие ячейки (вручную в самом приложении Excel) диапазон формул обновляется.
Я хочу, чтобы программная копия формулы вела себя так же.
Если формула содержит спецификаторы диапазона, я хочу обновить их до текущей строки.
Есть ли какой-то встроенный способ сделать это без манипуляций с регулярными выражениями?

1 ответ

Решение

Я не знаю, если это хорошее решение, которое охватывает все возможности, но...

//Formula update
if (cloneFromCell.CellFormula != null && (cloneFromCell.CellFormula.FormulaType == null || !cloneFromCell.CellFormula.FormulaType.HasValue || cloneFromCell.CellFormula.FormulaType.Value == CellFormulaValues.Normal))
{
    uint cloneRowIndex = OXMLTools.GetRowIndex(cloneFromCell.CellReference);
    uint offset = rowIndex - cloneRowIndex;
    exCell.CellFormula.Text = OXMLTools.GetUpdatedFormulaToNewRow(cloneFromCell.CellFormula.Text, offset);
}

public static string GetUpdatedFormulaToNewRow(string formula, uint offset)
{
    return Regex.Replace(formula, @"[A-Za-z]+\d+", delegate(Match match)
    {
      //Calculate the new row for this cell in the formula by the given offset
      uint oldRow = GetRowIndex(match.Value);
      string col = GetColumnName(match.Value);
      uint newRow = oldRow + offset;

      //Create the new reference for this cell
      string newRef = col + newRow;
      return newRef;
    });
 }
Другие вопросы по тегам