我在工作表上从D3单元格开始添加一个新的ListObject,然后创建列并用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成为表格的左上角!此外,如果D1,D2和E2单元具有值,则生成表的额外列,称为#34; Column2&#34;。似乎Excel尝试将表格上方范围内的所有数据包含到ListObject中。怎么预防呢?
答案 0 :(得分:1)
事实证明,我必须指定指向相同范围的Destination
和Source
个参数。
var tableCell = sheet.get_Range("D3");
listObject = sheet.ListObjects.Add(SourceType: Excel.XlListObjectSourceType.xlSrcRange, Source: tableCell, Destination: tableCell, XlListObjectHasHeaders: Excel.XlYesNoGuess.xlNo);
答案 1 :(得分:0)
这里可能需要明确说明Source
所在的位置,否则Excel将自己选择最近的单元格作为源。在以下代码中,Source
设置为Range[D3]
。希望这能正确使用您的xml数据。
Add
方法有一些其他参数Destination
,似乎用于指定表的左上角单元格,但我无法使其与source-Type {{1}一起使用}。
xlSrcXml