D3セルから開始してワークシートに新しいListObjectを追加し、列を作成してXMLMapでバインドします。ここに私のコードは次のとおりです。ListObjectに追加後に余分なヘッダーが含まれています
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がテーブルの左上隅になります!さらに、D1、D2、およびE2セルに値がある場合、「Column2」と呼ばれるテーブル用の余分な列が生成されます。 Excelがテーブルの上の範囲からのすべてのデータをListObjectに含めるように見えます。それを防ぐ方法は?