Excel 打开 xml sdk - 在单元格之间复制带有范围修改的公式
Excel Open xml sdk - Copy formula between cells with range modification
我有一个包含公式 (CellFormula) 的单元格。我不知道公式内容(可能是 Sum、ifs 或任何其他计算)。
该公式可能包括范围。
当您将单元格拖到其他单元格时(在 excel 应用程序本身手动),公式范围会更新。
我希望公式程序化副本的行为方式相同。
如果公式包含范围说明符,我想将它们更新到当前行。
有没有一些内置的方法可以做到这一点而无需正则表达式操作?
我不知道这是否是一个涵盖所有可能性的好解决方案,但是...
//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;
});
}
我有一个包含公式 (CellFormula) 的单元格。我不知道公式内容(可能是 Sum、ifs 或任何其他计算)。
该公式可能包括范围。
当您将单元格拖到其他单元格时(在 excel 应用程序本身手动),公式范围会更新。
我希望公式程序化副本的行为方式相同。
如果公式包含范围说明符,我想将它们更新到当前行。
有没有一些内置的方法可以做到这一点而无需正则表达式操作?
我不知道这是否是一个涵盖所有可能性的好解决方案,但是...
//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;
});
}