J'ajoute un nouvel objet ListObject sur la feuille de calcul à partir de la cellule D3, puis crée des colonnes et les lie avec XMLMap. Voici mon code:ListObject contient des en-têtes supplémentaires après l'ajout
Excel.Worksheet sheet = _workbook.Sheets["Data1"];
sheet.Activate();
sheet.get_Range("D3").Select();
var xmlMap = _workbook
.XmlMaps
.Add(collectionDatablock.GetSchema(), NetworkTree.RootName);
xmlMap.Name = collectionDatablock.Name;
var listObject = sheet
.ListObjects
.Cast<Excel.ListObject>()
.SingleOrDefault(l => l.Name == "ListName");
listObject?.Delete();
listObject = sheet.ListObjects.Add();
listObject.Name = "ListName";
var column = listObject
.ListColumns
.Cast<Excel.ListColumn>()
.First();
SetColumn(column, xmlMap, "Col1", "/Root/Region/@UniqueName");
var newColumn = listObject.ListColumns.Add();
SetColumn(newColumn, xmlMap, f, solution, "Col2", "/Root/Region/@Code");
Et méthode SetColumn:
private void SetColumn(Excel.ListColumn column, Excel.XmlMap map, string header, string path)
{
column.Name = GetColumnCaption(header);
column.XPath.SetValue(map, path);
}
Ce travail de code comme prévu sur la feuille de vide, mais s'il y a des données tableau ci-dessus (par exemple la cellule D2 a une valeur), la la table de liste est déplacée vers le haut et D2 devient le coin supérieur gauche de la table! De plus, si les cellules D1, D2 et E2 ont des valeurs, une colonne supplémentaire pour la table est générée, appelée "Colonne2". Semble Excel essayer d'inclure toutes les données de la plage au-dessus d'une table dans ListObject. Comment l'éviter?