我想在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」。 –