C#中的Excel边框样式在well上explored 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 ...然后,这很可能完全是错误的方法。
由于
答案 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 statements
或switch 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;
}
你可以为线条样式重复这一点......希望这有助于你