C# Interop PPT Microsoft Graph 图表使用经验

作者:V君 发布于:2013-10-28 16:56 Monday 分类:挖坑经验

过去的录制宏的方式已经不适用
-- 只能看到选定项, 更改格式的代码没有录制出来...
但通过一边编辑, 一边查看变量值的方式
甚至要将界面上的中文翻译成英文来搜索 (依据数点分颜色-咕狗翻译-Vary colors by point)
不过最后还是要归功于.NET Reflector -- 把interop库丢进去 用关键字搜索类名/成员
总算跌跌撞撞的走过来啦
▲环境
Visual Studio 2012
Office 2003

▲引用程序集(COM)
Microsoft Office 11.0 Object Library
Microsoft PowerPoint 11.0 Object Library
Microsoft Graph 11.0 Object Library

using Microsoft.Office.Core;
using Interop = Microsoft.Office.Interop;

略去创建PPT实例初始化过程, 网上很多资料
这里只贴出查不到的, 自己尝试的成果
- 废话少说直接上代码 -
//创建对象
var sh = sl.Shapes.AddOLEObject(
    Lefttemplate.Left,
    Toptemplate.Top,
    Widthtemplate.Width,
    Heighttemplate.Height,
    ClassName"MSGraph.Chart",
    LinkMsoTriState.msoFalse
);

var ch = (Interop.Graph.Chart)sh.OLEFormat.Object;


//填充数据
var ds = ch.Application.DataSheet;
ds.Columns.Clear(); //清除默认示例数据
//开始填充
ds.Cells[12= "Col1"//首列保留, 虽不懂但亲测
ds.Cells[13= "Col2";

ds.Cells[22= "123";
ds.Cells[23= "234";


//清除图例
ch.Legend.Clear();

//设置背景色
ch.ChartArea.Interior.Color = RGB(Color.White);

//图表标题
ch.HasTitle = true//不设置将会发生异常
ch.ChartTitle.Text = "TOTAL " + strCountryAbbr + " SPEND";

//坐标轴/背景墙设置
//ch.HasAxis[1] = true; //只留下横坐标轴
ch.HasAxis[2= false;
ch.HasAxis[3= false;
ch.Walls.Border.LineStyle =
    Interop.Graph.XlLineStyle.xlLineStyleNone;

//横坐标轴只留文字
var a1 = (Interop.Graph.Axis)ch.Axes(1);
a1.TickLabels.Font.Size = 12;
a1.Border.LineStyle =
    Interop.Graph.XlLineStyle.xlLineStyleNone;

var a2 = (Interop.Graph.Axis)ch.Axes(2);
a2.HasMajorGridlines = false;

//数值标到图形上,还有调整数值格式(科学转千分位)
var s1 = (Interop.Graph.Series)ch.SeriesCollection(1);
s1.HasDataLabels = true;
var l1 = (Interop.Graph.DataLabel)s1.DataLabels(1);
var l2 = (Interop.Graph.DataLabel)s1.DataLabels(2);
l1.NumberFormat =
l2.NumberFormat =
        "#,##0_);(#,##0)";//这里是为啥我也不清楚, 界面调好之后查看变量值的..
l1.Font.Size =
l2.Font.Size =
        12;//调小一点字体避免换行


//3D调整
//尼玛ppt界面里归纳到数据系列, 代码却是Chart的属性...
//我不会说在这里找了半个小时 -- 自己挨个属性尝试
ch.DepthPercent = 100;
ch.Elevation = 15;
ch.GapDepth = 100;


//边框 && 基底颜色
ch.ChartArea.Border.LineStyle = Interop.Graph.XlLineStyle.xlContinuous;
ch.Floor.Interior.Color = RGB(Color.White);


//柱形颜色 - 依数据点分颜色
//这里我折腾了两个小时, 尝试各种颜色设定值 -- 咕狗没有答案
var cg = (Interop.Graph.ChartGroup)ch.ChartGroups(1);
cg.VaryByCategories = true;

//------------- 常用功能 ----------------

//转换成互操作专用的RGB值 从StackOverflow抄来的,原帖的十六进制还错了
public static int RGB(this Color c)
{
    return c.R + 0x100 * c.G + 0x10000 * c.B;
}

//格字体设置 ※单元格必须不为空,至少要有一个空格,否则赋值无效
public static void SetFontSize(
    this Interop.PowerPoint.Table tbl
    , float sz
)
{
    for (int i = 1i <= tbl.Rows.Counti++)
        for (int j = 1j <= tbl.Columns.Countj++)
            tbl.Cell(ij).Shape.TextFrame.TextRange.Font.Size = sz;
}
- 代码结束 -
ps:消灭这个月的0文章~

标签: 软件开发 C# Office Interop PPT MicrosoftGraph Winform

引用地址:

发表评论:

Powered by emlog 去你妹的备案 sitemap