0

C# 中的 Excel 边框样式在Internet上得到了很好的 探索(在 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 中发生了什么时,它并不是立即有用的……再说一次,它只是很可能这完全是错误的方法。

谢谢

4

1 回答 1

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 statementsorswitch 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;

    }

您可以对线条样式等重复此操作...希望对您有所帮助

于 2013-07-08T16:08:53.667 回答