为什么Aspose.Cells没有保存包含外部引用的更新公式?

时间:2015-02-06 13:06:59

标签: c# excel aspose-cells

(使用Apose.Cells 8.3.2.1)

我们有大量的Excel 97-2003电子表格,其中包含大量命名范围。我们需要将它们全部升级到Excel 2010.不幸的是,许多命名范围的格式为ABC1234,现在是Excel 2010中的有效单元格引用,因此我们尝试重命名所有命名范围并修复与Aspose.Cells相关的公式。

我们遇到的问题是具有外部链接的公式不会保存。

这是我一直在测试的代码:

var workbooks = new List<Workbook>
    {
        new Workbook(@"C:\Temp\Book1.xls"),
        new Workbook(@"C:\Temp\Book2.xls")
    };

var regex = new Regex(@"!([A-Za-z0-9_]+)");

foreach (var workbook in workbooks)
{
    // Named Ranges -> "FIX_" + name
    foreach (var name in workbook.Worksheets.Names)
    {
        name.Text = "FIX_" + name.Text;
    }

    // Update Formula References to renamed Named Ranges
    foreach (var worksheet in workbook.Worksheets)
    {
        foreach (Cell cell in worksheet.Cells)
        {
            if (!cell.IsFormula || cell.IsInTable || (cell.IsInArray && !cell.IsArrayHeader)) continue;
            if (!regex.IsMatch(cell.Formula)) continue;
            var newformula = regex.Replace(cell.Formula, "!FIX_$1");
            cell.Formula = newformula;
        }
    }
}

foreach (var workbook in workbooks)
{
    workbook.Save(workbook.FileName, SaveFormat.Excel97To2003);
}

“Book1.xls”和“Book2.xls”是excel 97-2003电子表格,每个电子表格只有一个单元格。 Book1.xls中的A1包含值“1337”,并且工作簿具有引用A1的单个命名范围,称为“MyNamedRange”。 Book2.xls中的A1包含公式"='C:\Temp\Book1.xls'!MyNamedRange"

当我运行上面的代码时,Book1中的命名范围会更新,但Book2中的公式保持不变,即使我知道“cell.Formula = newformula”这一行实际上已在该公式上运行。

发生了什么事?这是一个错误,还是我缺少的东西?

0 个答案:

没有答案