在C#中获取Excel边框样式

本文关键字:边框 样式 Excel 获取 | 更新日期: 2023-09-27 18:21:26

C#中的Excel边框样式在互联网上得到了很好的探索(在Stack上和任何地方一样多),但我完全找不到任何涉及获取样式值的文档;我发现的每个问题、页面和PDF都只讨论设置

如何以有用的形式从excel边框中获取样式数据 (例如,字符串)

我确信,这个问题与我是一个绝对的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文档非常迟钝:没有明确指示Color属性的成员是什么,也没有明确指示我希望它返回什么类型的对象。

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

感谢

在C#中获取Excel边框样式

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

尽管我不理解为什么需要将样式转换为字符串的实际问题,但您仍然可以制作多个方法,每个方法都接受一个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;
    }

对于线条样式和诸如此类的。。。希望这能帮助您