我想在OpenXML中使用Excel创建命名范围。我可以在DefinedNames集合中添加一个DefinedName,但似乎没有任何作用。我注意到ExtendedFileProperties中的一个地方,其中名称范围正在保存,这是一个名为“TitlesOfParts”的结构。我曾尝试在其中添加一个条目,但这会导致excel引发错误,并且不会创建指定的范围。这里是我使用的代码:在Excel中命名范围OpenXML
public void AddNamedRange(string pNamedRangeRef, string pNamedRangeName)
{
DefinedName _definedName = new DefinedName() { Name = pNamedRangeName, Text = pNamedRangeRef };
_workbook.Descendants<DocumentFormat.OpenXml.Spreadsheet.DefinedNames>().First().Append(_definedName);
DocumentFormat.OpenXml.VariantTypes.VTLPSTR _t = new DocumentFormat.OpenXml.VariantTypes.VTLPSTR() { Text = pNamedRangeName };
_spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Append(_t);
_spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Size++;
}
“我可以在DefinedNames集合中添加一个DefinedName,但这似乎没有做任何事情” - 这应该就是你所需要做的 - 它以什么方式不做任何事情?当您保存文档并在Excel中打开它时,您的命名范围是否显示在下拉列表中?如果您打开xlsx作为zip文件,您是否可以在workbook.xml中找到您命名的范围? – Ben
我敢打赌,你没有适当地限定数值。你的pNamedRangeName应该看起来像“myrangename”,pNamedRangeRef应该看起来像“Sheet1!$ A $ 1”。 –