ListObject在添加后包含额外的标头

我从D3单元格开始在工作表上添加一个新的ListObject,然后创build列并使用XMLMap绑定它们。 这是我的代码:

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"); 

和SetColumn方法:

  private void SetColumn(Excel.ListColumn column, Excel.XmlMap map, string header, string path) { column.Name = GetColumnCaption(header); column.XPath.SetValue(map, path); } 

此代码在空工作表上按预期方式工作,但如果表格中有任何数据(例如D2单元格有值),则列表将向上移动,D2将成为表格的左上angular! 另外,如果D1,D2和E2单元格具有值,则会生成表格的额外列,称为“列2”。 看起来Excel试图将范围上方的所有数据包括到ListObject中。 如何预防呢?

原来我必须指定指向相同范围的DestinationSource参数。

 var tableCell = sheet.get_Range("D3"); listObject = sheet.ListObjects.Add(SourceType: Excel.XlListObjectSourceType.xlSrcRange, Source: tableCell, Destination: tableCell, XlListObjectHasHeaders: Excel.XlYesNoGuess.xlNo); 

在这里,可能需要明确地说出Source所在的位置,否则Excel将自己select最接近的单元格作为源。 在下面的代码中, Source设置为Range[D3] 。 希望这将正确地与你的xml数据一起工作。

Add方法有一些其他的参数Destination ,它似乎被用来指定表格的左上方单元格,但是我无法使它与source-Type xlSrcXml

 listObject?.Delete(); listObject = sheet.ListObjects.Add(Source: ((Worksheet)sheet).Range["D3"]);