【问题标题】:Getting Excel Border Styles in C#在 C# 中获取 Excel 边框样式
【发布时间】:2013-07-08 15:59:10
【问题描述】:

C# 中的 Excel 边框样式在 internet 中是 well explored(在 Stack 和任何地方一样多),但我完全无法找到任何涵盖 getting 样式的文档价值观;我发现的每个问题、页面和 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 documentation 非常迟钝:没有明确的指示 Color 属性的成员是什么,或者我可以期望它返回哪种对象类型。

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

谢谢

【问题讨论】:

    标签: c# excel border


    【解决方案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;
    
        }
    

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

    【讨论】:

    • 这似乎没有设置边框样式,只检查它是否等于另一个值(我认为这实际上只是获取样式)。不过,我可能误读了。你能再解释一下吗?
    • 也许我不完全理解你所说的border style 是什么意思,这会让你得到range 周围的边框你只是在寻找边框的颜色吗?
    • 我正在尝试获取各种边框样式(颜色、样式、宽度)。例如,如果(在 Excel 应用程序中)我将单元格边框的颜色设置为全红色,我希望我的函数为该单元格返回一个 String: "rgb(255,0,0)"(如通过通过“范围”参数传递给函数)。同样对于style,我希望能够将单元格的边框设置为虚线(或其他),并让我的函数返回字符串“虚线”。
    • 抱歉:我刚刚意识到在我的第一条评论中我不小心说“设置边框样式”而不是“获取边框样式”。
    • @SandyGifford 我仍然不知道我是否理解你的问题,但我确实更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多