(使用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”这一行实际上已在该公式上运行。
发生了什么事?这是一个错误,还是我缺少的东西?