在C#中获取Excel边框样式

时间:2013-07-08 15:59:11

标签: c# excel border

C#中的Excel边框样式在wellexplored internet(此处在Stack上尽可能多)但我完全找不到任何涵盖<的文档em>获取样式值;我发现的每个问题,页面和PDF只讨论设置

如何以有用的形式从excel边框获取样式数据? (Say,String)

问题,我确定,这与我是一个绝对的C#新手这个事实有关。 Dynamic类型混淆并吓唬我(我想念Java),这个问题可能很好地围绕着这个问题。我试图从Excel中的范围中检索各种样式(范围可能是单元格,行或整个表格)并将它们转换为其他形式(出于演示目的,我已经重写了我的代码来编写HTML样式内联为字符串)。

using Excel = Microsoft.Office.Interop.Excel;

public static String rangeStyle2InlineHTMLStyle(Excel.Range range)
{
    String str = "";
    Excel.Style style = range.Style;

    Excel.Border border_top = style.Borders[Excel.XlBordersIndex.xlEdgeTop];
    Excel.Border border_left = style.Borders[Excel.XlBordersIndex.xlEdgeLeft];
    Excel.Border border_right = style.Borders[Excel.XlBordersIndex.xlEdgeRight];
    Excel.Border border_bottom = style.Borders[Excel.XlBordersIndex.xlEdgeBottom];

    Console.WriteLine(border_top.Color.ToString());

    str += "border-top-color:" + color2CSSRGB(border_top.Color) + "; ";
    str += "border-left-color:" + color2CSSRGB(border_left.Color) + "; ";
    str += "border-right-color:" + color2CSSRGB(border_right.Color) + "; ";
    str += "border-bottom-color:" + color2CSSRGB(border_bottom.Color) + "; ";

    return "style='" + str + "'";
}

public static String color2CSSRGB(Object c)
{
    return "rgb(" + c.R + "," + c.G + "," + c.B + ")";
}

Excel.Style下面的所有内容似乎都是dynamic类型,我有 没有 线索如何使用它。 MSDN documentation非常迟钝:没有明确指出Color属性的成员是什么,或者我期望它返回的对象类型。

我想这是故意的,这样就可以使用甚至返回多种不同颜色类型中的任何一种颜色,但是当我想知道的是什么正在发生时,它并不是立即有用的在边界x ...然后,这很可能完全是错误的方法。

由于

1 个答案:

答案 0 :(得分:1)

我会根据新信息彻底重做我的回答,因为我之前误解了这个问题:

虽然我不明白为什么需要将样式转换为字符串的实际问题,但仍然可以创建多个方法,每个方法都接受Excel.Border,然后返回相应的string值你渴望

获取颜色

你可以拥有像

这样的东西
    public static String getBorderColor(Excel.Border border)
    {
        String retval = "";
        retval += " rgb(";
        System.Drawing.Color color = Color.FromArgb((int)border.Color);
        retval += color.R + ",";
        retval += color.G + ",";
        retval += color.B + ")";
        return retval;
    }

获得重量,因为所有线条样式和重量样式基本上都是integers,因此它们不会根据您的需要转换为strings。它们将显示为已分配的numeric值,因此您将不得不使用if statementsswitch case语句并遍历所有样式...所以类似于:

    public static String getWeight(Excel.Border border)
    {
        String retval = "weight = ";
        int weight = border.Weight;

        const int xlThick = (int)Excel.XlBorderWeight.xlThick;

        switch (weight)
        {
            case xlThick:
                retval += "thick";
                break;
            //... continue for all border weights
        }

        return retval;

    }

你可以为线条样式重复这一点......希望这有助于你