2010-05-27 4 views
3

Je travaille sur la création de classeurs Excel en XML, par le biais de XMLSS, et je me suis retrouvé coincé dans un endroit particulier.XMLSS Style Inheritance

Selon la documentation de http://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx#odc_xmlss_ss:style, la balise <ss:Style /> possède une propriété disponible, ss:Parent, qui permet au style donné d'hériter des attributs d'un style précédemment défini. Cependant, j'ai du mal à faire fonctionner ça.

Je ne reçois aucune erreur quand j'ouvre le classeur, et les attributs du style enfant sont appliqués correctement, mais aucun des attributs du style parent n'est reporté.

Comme XMLSS n'est pas très bien documenté en dehors des documents MSDN, je viens à l'assistance de StackOverflow. Y at-il des mises en garde à l'utilisation de la poperty ss:Parent dans les éléments <ss:Style />?

Répondre

4

Salut user352078 (nom accrocheur qui est)

En fait, l'héritage des styles dans SpreadsheetML (via « ss: Parent = ») fonctionne (au moins il le fait pour moi) mais vous pourriez avoir rencontré un - nulle part documenté, autant que je pouvais voir - problème: Si vous redéfinir un élément de style (dans l'exemple ci-dessous) vous n'hériterez pas les styles qui ont déjà été définis. Donc, sty_ProjektzeileStatus doit définir tous les aspects du style Borders, bien que j'ai le même style pour Bottom (c'est-à-dire LineStyle: "Dash" etc.).

Donc, si Borders se redéfinie dans un style héritant, tous les styledefinitions existants pour les frontières sont jetés et doivent être définis (ce qui est en fait pas trop mal parce que comme vous n'avez pas supprimer explicitement les styles existants de le style parent dans les styles héritiers).

<Style ss:ID="sty_ProjektzeileTexte" ss:Name="Texte"> 
    <Font ss:Bold="1" /> 
    <NumberFormat ss:Format="Standard" /> 
    <Borders> 
     <Border ss:Position="Bottom" ss:LineStyle="Dash" ss:Weight="1" /> 
    </Borders> 
</Style> 

<Style ss:ID="sty_ProjektzeileStatus" ss:Parent="sty_ProjektzeileTexte"> 
    <!-- Overwrites original definition --> 
    <NumberFormat ss:Format="0" /> 
    <!-- Although only Right line is added to the original definition from the parent style, 
     all 'sides' of the border element need to be defined, 
     even style for Bottom that is unchanged --> 
    <Borders> 
     <Border ss:Position="Bottom" ss:LineStyle="Dash" ss:Weight="1" /> 
     <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2" /> 
    </Borders> 
    <!-- Only fontstyle Bold is actually inherited --> 
</Style> 

J'espère que cela répond à votre question. Je me souviens juste de rencontrer une fois un problème avec le paramétrage des noms (ss: Name =) dans les deux styles parent et enfant qui ont eu des conséquences inattendues, mais je ne me souviens pas si cela a aussi entrainé un héritage corrompu).

HTH

Andreas

+0

Ce bogue existe encore dans Excel: @ l'héritage de style est tout simplement cassé en XML Excel. – trojanfoe

+0

Merci pour la confirmation de mon analyse. Je ne suis pas sûr si cela est vraiment cassé ou supposé fonctionner de cette façon (pour une raison quelconque). –