Estoy tratando de crear rangos con nombre en Excel con OpenXML. Puedo agregar un DefinedName en la colección DefinedNames, pero eso no parece hacer nada. Observé un lugar en ExtendedFileProperties donde se guardan los nombres de los rangos, una estructura llamada "TitlesOfParts". He intentado agregar una entrada allí pero eso hace que Excel arroje un error y no se crea el rango con nombre. Aquí está el código que estoy utilizando:Rangos con nombre en 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++;
}
"Soy capaz de añadir un DefinedName en la colección DefinedNames, pero eso no parece hacer nada" - que debería ser todo lo que tiene que hacer - ¿De qué manera no hace nada? Cuando guarda el documento y lo abre en Excel, ¿aparece su rango con nombre en la lista desplegable? Si abre xlsx como un archivo comprimido, ¿puede encontrar su rango con nombre en workbook.xml? – Ben
Apuesto a que no calificas los valores correctamente. Su pNamedRangeName debe parecerse a "myrangename" y pNamedRangeRef debe verse como "Sheet1! $ A $ 1". –