2013-07-08 69 views
0

Excel的边框样式wellexploredinternet(这里堆栈不亚于任何地方),但我已经完全找不到覆盖越来越样式值的任何文件;每个问题,页面和PDF我发现只讨论设置获取Excel的边框样式在C#在C#

如何从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中发生了什么时,它不会立即有用......然后再一次,这可能完全是错误的方法。

感谢

回答

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; 

    } 

你可以重复线样式和这样...希望可以帮助你

+0

这似乎没有设置边框样式,只检查它是否等于另一个值(这真的只是得到了风格,我认为)。不过,我可能会误解。你能再解释一下吗? –

+0

也许我并不完全理解你的意思是'边界样式'这会让你围绕'范围'的边界你是否只专门寻找边界的颜色? – chancea

+0

我试图*得到*各种边框样式(颜色,样式,宽度)。例如,如果(在Excel应用程序中)我将单元格边框的颜色设置为全红,我希望我的函数为该单元格返回一个“String”:“rgb(255,0,0)”(通过到“范围”参数的功能)。类似的'样式',我想能够设置一个单元格的边框为虚线(或任何),并为我的函数返回字符串“虚线”。 –