C#使用_关于xml表格_Styles节点

来源:互联网 发布:qq老密码数据库 编辑:程序博客网 时间:2024/05/24 01:37
 

<Styles>

  <Style ss:ID="Default" ss:Name="Normal">

   <Alignment ss:Vertical="Bottom"/>

   <Borders/>

   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>

   <Interior/>

   <NumberFormat/>

   <Protection/>

  </Style>

 </Styles>

这个我估计是最简单的Styles节点了,它只包含一个styleDefault。它有什么属性呢?

1Alignment

Alignment有两个可以设置文字停靠位置的属性,ss:Horizontalss:Vertical。分别表示一个单元格里的文字在水平方向和竖直方向上向哪边靠。用Excel打开我们的xml表格文件,在A1单元格上右击,单击设置单元格格式,在弹出的对话框中选择对齐标签,可以看到有个文本对齐方式,也分为水平对齐和垂直对齐两种,分别对应于我们的ss:Horizontalss:Vertical,比如我们可以选择靠左(缩进),保存文件,用记事本打开,我们发现,Styles节点变成如下样子:

<Styles>

  <Style ss:ID="Default" ss:Name="Normal">

   <Alignment ss:Vertical="Bottom"/>

   <Borders/>

   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>

   <Interior/>

   <NumberFormat/>

   <Protection/>

  </Style>

  <Style ss:ID="s21">

   <Alignment ss:Horizontal="Left" ss:Vertical="Bottom"/>

  </Style>

 </Styles>

它增加了一个ID21Style节点,该节点的Alignment属性正如我们所设置的。(在后面我们会看到,A1节点正是使用了该Style,另外,对于ID的编号我一直没搞明白是按什么样的规则取名的)

 

但是这种改变只能使使用该Style的单元格变成靠左,如果我们想让默认的Style也变成靠左,则需要改变Default StyleAlignment属性为ss:Horizontal="Left" ss:Vertical="Bottom"。但是要注意的是,在这种情况下,s21这个Style的存在就没有意义了,因为它和Default Style的属性相同,因此可以去掉。(设置默认Style对应的操作为,单击菜单栏中的格式,选择样式,在弹出的对话框中修改样式名为常规的即可)

 

对于Horizontal,可选的枚举值有:无值(常规),Left(靠左(缩进)),Center(居中),Right(靠右(缩进)),Fill(填充),Justify(两端对齐),CenterAcrossSelection(跨列居中)和Distributed(分散对齐(缩进))

对于Vertical,可选的枚举值有:Top(靠上),Bottom(靠下),Center(居中),Justify(两端对齐)和Distributed(分散对齐)

 

当我们在Excel中设置了缩进值为5后,在xml表格中我们发现,Alignment变成了:

<Alignment ss:Horizontal="Distributed" ss:Vertical="Distributed" ss:Indent="5"/>

 

相应的:文字的旋转角度对应于ss:Rotate。若设置了自动换行,则ss:WrapText="1"。文字方向对应于ss:ReadingOrder,有LeftToRightRightToLeft两个值。

 

2Border

Border是设置单元格的边框效果,我们将所有的边框设置上,线条的样式设置为双横线,颜色为红色。得到的效果是

<Borders>

    <Border ss:Position="Bottom" ss:LineStyle="Double" ss:Weight="3"/>

    <Border ss:Position="Left" ss:LineStyle="Double" ss:Weight="3"/>

    <Border ss:Position="Right" ss:LineStyle="Double" ss:Weight="3"/>

    <Border ss:Position="Top" ss:LineStyle="Double" ss:Weight="3"/>

    <Border ss:Position="DiagonalLeft" ss:LineStyle="Double" ss:Weight="3"/>

    <Border ss:Position="DiagonalRight" ss:LineStyle="Double" ss:Weight="3"/>

   </Borders>

其实颜色的设置没起作用,当我们返回Excel中查看该单元格的格式属性时,会发现刚才设置成红色的地方又变成自动了,即默认的颜色。

 

3Font

设置单元格的字体相关属性。我们看看下面的设置

<Font ss:FontName="Times New Roman" x:Family="Roman" ss:Size="14"

    ss:Color="#FF0000" ss:Bold="1" ss:Italic="1" ss:StrikeThrough="1"

ss:VerticalAlign="Superscript" ss:Underline="Single"/>

它表示,使用了Times New Roman的字体,字号14,颜色为红色,粗体,斜体,有删除线,上标,有单下划线。

 

4Interior

设置单元格的底色以及使用Pattern的样式和颜色

<Interior ss:Color="#FF0000" ss:Pattern="VertStripe" ss:PatternColor="#FFFF00"/>

表示,使用了红色的底色,VertStripePatternPattern的颜色为黄色

5NumberFormat

设置数值的显示效果

当设置为数值,小数点后3位,使用千分位符时:

<NumberFormat ss:Format="#,##0.000_ "/>

数值,小数点后2位,不使用千分位符:

<NumberFormat ss:Format="0.00_ "/>

货币,货币符号¥,2位小数

<NumberFormat ss:Format="&quot;&quot;#,##0.00;&quot;&quot;/-#,##0.00"/>

货币,货币符号$2位小数

<NumberFormat ss:Format="/$#,##0.00;/-/$#,##0.00"/>

货币,货币符号US$2位小数

<NumberFormat ss:Format="&quot;US$&quot;#,##0.00;/-&quot;US$&quot;#,##0.00"/>

货币,货币符号£2位小数

<NumberFormat ss:Format="[$£-809]#,##0.00;/-[$£-809]#,##0.00"/>

因此,其规律是:表示符号的字符串+千分位号(#,##+小数位号(2位:0.00+;/(内部为负数时的情况)/

一般情况下,单位的字符串都是&quot;+单位符号+&quot;,其中&quot;表示双引号

 

会计专用,货币符号¥,2位小数

<NumberFormat

ss:Format="_ &quot;&quot;* #,##0.00_ ;_ &quot;&quot;* /-#,##0.00_ ;_ &quot;&quot;* &quot;-&quot;??_ ;_ @_ "/>

 

日期 短日期格式

<NumberFormat ss:Format="Short Date"/>

日期 XXXXXX

<NumberFormat ss:Format="[DBNum1][$-804]yyyy&quot;&quot;m&quot;&quot;d&quot;&quot;;@"/>

百分比

<NumberFormat ss:Format="Percent"/>

就列举这么多了,基本的规律就是通过给定的字符串来Format数字的输出格式,这些格式也可以自定义的。

 

6Protection

<Protection x:HideFormula="1" ss:Protected="0"/>

表示单元格没有锁定,但是隐藏了公式 若为默认值x:HideFormula="0" ss:Protected="1",则两者不显示在xml文档里。

注意:单元格锁定和隐藏公式都必须在工作表处于被保护状态才能生效,而当一个工作表处于被保护状态时,它是不能被保存为xml工作表的。因此,我认为此处是否锁定单元格以及隐藏公式是没有意义的。

代码实现,由于一个工作表可能会用到很多的style,style的结构是有规律可循的,因此我们可以自定义一些类来描述style

以下是我自定义的相关类的结构


StyleElement
类结构

public class StyleElement
    
{
        
public StyleElement(String id)
        
{
            mId = id;
            mName = 
null;
            mAlignment = 
null;
            mBorders = 
null;
            mFont = 
null;
            mInterior = 
null;
            mNumberFormat = 
null;
            mProtection = 
null;
        }

        
public String Id
        
{
            
get  return mId; }
        }

        
public String Name
        
{
            
get  return mName; }
            
set  { mName = value; }
        }

        
public AlignmentElement Alignment
        
{
            
get  return mAlignment; }
            
set  { mAlignment = value; }
        }

        
public BordersElement Borders
        
{
            
get  return mBorders; }
            
set  { mBorders = value; }
        }

        
public FontElement Font
        
{
            
get  return mFont; }
            
set  { mFont = value; }
        }

        
public InteriorElement Interior
        
{
            
get  return mInterior; }
            
set  { mInterior = value; }
        }

        
public NumberFormatElement NumberFormat
        
{
            
get  return mNumberFormat; }
            
set  { mNumberFormat = value; }
        }

        
public ProtectionElement Protection
        
{
            
get  return mProtection; }
            
set  { mProtection = value; }
        }

        
private String mId;
        
private String mName;
        
private AlignmentElement mAlignment;
        
private BordersElement mBorders;
        
private FontElement mFont;
        
private InteriorElement mInterior;
        
private NumberFormatElement mNumberFormat;
        
private ProtectionElement mProtection;
    }

这里的AlignmentElementBordersElement等均为类名,表示相应的节点,以AlignmentElement为例,其结构如下

public class AlignmentElement
    
{
        
public AlignmentElement()
        
{
            mHorizontal = 
null;
            mVertical = 
null;
            mIndent = 
null;
            mRotate = 
null;
            mWrapText = 
null;
            mReadingOrder = 
null;
        }

        
public String Horizontal
        
{
            
get  return mHorizontal; }
            
set  { mHorizontal = value; }
        }

        
public String Vertical
        
{
            
get  return mVertical; }
            
set  { mVertical = value; }
        }

        
public String Indent
        
{
            
get  return mIndent; }
            
set  { mIndent = value; }
        }

        
public String Rotate
        
{
            
get  return mRotate; }
            
set  { mRotate = value; }
        }

        
public String WrapText
        
{
            
get  return mWrapText; }
            
set  { mWrapText = value; }
        }

        
public String ReadingOrder
        
{
            
get  return mReadingOrder; }
            
set  { mReadingOrder = value; }
        }

        
private String mHorizontal;
        
private String mVertical;
        
private String mIndent;
        
private String mRotate;
        
private String mWrapText;
        
private String mReadingOrder;
    }


其他的节点可类似的做定义。

最后我们需要将style写入xml文件中,无非是根据style的各个属性相应的写入xml文件中。这里就不赘述了。
原创粉丝点击