(使用 Apose.Cells 8.3.2.1)
我们有大量 Excel 97-2003 电子表格,其中包含大量命名范围。我们需要将它们全部升级到 Excel 2010。不幸的是,许多命名范围的形式ABC1234
现在是 Excel 2010 中的有效单元格引用,因此我们正在尝试重命名所有命名范围并使用 Aspose 修复相关公式。细胞。
我们遇到的问题是带有外部链接的公式没有保存。
这是我一直在测试的代码:
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 电子表格,每个电子表格中只有一个单元格。A1
在 Book1.xls 中包含值“1337”,工作簿有一个引用 A1 的命名范围,称为“MyNamedRange”。A1
Book2.xls 中包含公式"='C:\Temp\Book1.xls'!MyNamedRange"
。
当我运行上面的代码时,Book1 中的命名范围会更新,但 Book2 中的公式保持不变,即使我知道“cell.Formula = newformula”这一行实际上已在该公式上运行。
这是怎么回事?这是一个错误,还是我遗漏了什么?