В коде, о котором идет речь, отсутствует параметр в методе AddNode
: Office.MsoSmartArtNodePosition
, который указывает, где должен находиться новый узел относительно узла, к которому он добавляется.
В приведенном ниже примере кода используется .msoSmartArtNodeBelow
через, но также можно добавлять узлы до, после или выше. (Если бы использовалась более старая версия C #, код даже не скомпилировался бы, что говорит о попытке сделать язык «более прощающим», как языки VB ...)
Пример кода демонстрируетдва подхода:
- первый - цикл
for
для четырех узлов на втором уровне;один на третьем уровне вставляется индивидуально. Таким образом, этот последний относится к правильному узлу (первому), который назначается определенному SmartArtNode
объекту на первой итерации. - второй (закомментированный) вставляет и маркирует каждый узел отдельно.
Примечание. Поскольку нет необходимости удалять первый узел, этот код оставляет его без изменений, помечает его и присваивает его объекту SmartArtNode
(верхнего уровня).
var myLayout = excelApp.SmartArtLayouts[88];
var smartArtShape = ws.Shapes.AddSmartArt(myLayout, 50, 50, 200, 200);
if (smartArtShape.HasSmartArt == Office.MsoTriState.msoTrue)
{
Office.SmartArt smartArt = smartArtShape.SmartArt;
Office.SmartArtNodes nds = smartArt.AllNodes;
Office.SmartArtNode ndTop = null;
foreach (Office.SmartArtNode nd in nds)
{
if (nd.Level != 1)
{
nd.Delete();
}
else
{
ndTop = nd;
ndTop.TextFrame2.TextRange.Text = "Node 1";
}
}
Office.SmartArtNode ndLev2 = null;
Office.SmartArtNode ndLev2_1 = null;
for (int i = 1; i <= 4; i++)
{
ndLev2 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
if (i == 1) ndLev2_1 = ndLev2;
ndLev2.TextFrame2.TextRange.Text = "Node 1." + i;
}
//Office.SmartArtNode ndLev2_1 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
//ndLev2_1.TextFrame2.TextRange.Text = "Node 1.1";
//Office.SmartArtNode ndLev2_2 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
//ndLev2_2.TextFrame2.TextRange.Text = "Node 1.2";
//Office.SmartArtNode ndLev2_3 = ndTop.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
//ndLev2_3.TextFrame2.TextRange.Text = "Node 1.3";
Office.SmartArtNode ndLev2_1_1 = ndLev2_1.AddNode(Office.MsoSmartArtNodePosition.msoSmartArtNodeBelow);
ndLev2_1_1.TextFrame2.TextRange.Text = "Node 1.1.1";
}