MSVisio 字符自定义颜色

MSVisio Characters custom color

我知道,我可以通过这种方式更改形状中所有文本的颜色:

Shape.CellsU["Char.Color"].FormulaForceU = "RGB(255,255,255)";

还有一种方法可以改变形状中某些字符的颜色:

Characters.Begin = 2;
Characters.End = 5;    
Characters.set_CharProps((short)MSVisio.VisCellIndices.visCharacterColor, (short)MSVisio.VisDefaultColors.visRed;);

但我找不到任何方法将颜色的自定义 RGB(或 HEX 或任何类型)值传递给特定形状的字符。我不想把形状切成小形状。

你能帮忙吗?谢谢

CharProps 属性 允许您在预定义文档颜色集合中设置索引。对于自定义 RGB,您可以通过首先使用 CharPropsRow 获取行索引来设置相应的单元格公式,如下所示:

    var shp = vApp.ActiveWindow.Selection.PrimaryItem;
    var shpChars = shp.Characters;

    shpChars.Begin = 2;
    shpChars.End = 5;
    //shpChars.set_CharProps((short)Visio.VisCellIndices.visCharacterColor, (short)Visio.VisDefaultColors.visRed);

    var targetRow = shpChars.CharPropsRow[0];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter, 
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(40,220,40)";

这应该会给你类似的结果:

[更新] 以上假定您针对现有格式并对其进行更改。要添加新的 运行,您可以先使用 CharProps 添加行,然后使用 CharPropsRow 来定位新的 运行。因此,您可以 运行 此代码针对新页面:

    var vPag = vApp.ActivePage;
    var shp = vPag.DrawRectangle(3,3,5,4);
    shp.Text = "GoodMorning";

    var shpChars = shp.Characters;

    shpChars.Begin = 0;
    shpChars.End = 4;
    var targetRow = shpChars.CharPropsRow[(short)Visio.VisCharsBias.visBiasLetVisioChoose];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter,
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(220,40,40)";

    shpChars.Begin = 4;
    shpChars.End = 11;
    shpChars.set_CharProps((short)Visio.VisCellIndices.visCharacterColor, (short)Visio.VisDefaultColors.visBlack);
    targetRow = shpChars.CharPropsRow[(short)Visio.VisCharsBias.visBiasLetVisioChoose];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter,
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(40,200,40)";

...这将导致以下结果: