2009-10-06 18 views
1

Je suis en train d'écrire un outil qui génère une feuille de calcul ML (XML) pour créer une feuille de calcul Excel pour mes utilisateurs.Feuille de calcul ML Texte Couleur (couleur) Rendu

J'ai défini un style comme suit:

 
<Style ss:ID="GreenText"> 
    <Font ss:FontName="Arial" ss:Size="9" ss:Color="#8CBE50" /> 
</Style> 

Cela fonctionne dans une certaine mesure, mais quand je l'ouvre dans Excel la couleur rendu pour le texte n'est pas celui que je spécifié - c'est une version plus brillante . Je peux utiliser la même référence de couleur pour une bordure de cellule et la couleur est rendue correctement.

Quelqu'un peut-il faire la lumière sur pourquoi la couleur du texte n'est pas rendue correctement?

Merci!

Répondre

0

Excel est limité à une palette de 56 couleurs. Il stocke uniquement les index de couleur plutôt que les valeurs RVB réelles. Ils permettent des couleurs personnalisées dans la palette, mais Je ne sais pas comment les modifier par programme .

Edit:
Je ne l'ai pas utilisé les documents XML de bureau, mais cela pourrait aider (balise indexedColors pour palette définir):
http://openxmldeveloper.org/forums/thread/309.aspx

Aussi il y a une propriété Workbook.Colors pour changer la palette de VBA .

1

David a raison de dire qu'Excel 2003 et les versions antérieures d'Excel sont limitées à une palette de 56 couleurs. Excel 2007 a ajouté la prise en charge des couleurs 24 bits et des couleurs de thème. Excel 2007 peut écrire des classeurs xls qui contiennent ces informations de couleur supplémentaires et qu'Excel 2003 peut lire, mais Excel 2003 sera toujours limité à la palette de 56 couleurs. Excel 2007 peut charger ces classeurs et afficher les couleurs exactes.

prend en charge les nouvelles couleurs et couleurs de thème 24 bits, ainsi que les anciennes couleurs indexées de la palette, tout comme Excel 2007. Vous pouvez utiliser SpreadsheetGear pour créer un classeur avec des couleurs 24 bits qui s'afficheront correctement dans Excel 2007 ou modifier la palette et ils s'afficheront correctement dans Excel 2007 et Excel 2003. Vous trouverez ci-dessous un exemple des deux.

Vous pouvez télécharger un essai gratuit here et l'essayer vous-même.

Disclaimer: Je possède SpreadsheetGear LLC

Voici l'exemple de code:

  // Create a new empty workbook with one worksheet. 
      IWorkbook workbook = Factory.GetWorkbook(); 
      // Get the worksheet and change it's name to "Person". 
      IWorksheet worksheet = workbook.Worksheets[0]; 
      worksheet.Name = "Colors"; 
      // Put "Hello World!" into A1. 
      IRange a1 = worksheet.Cells["A1"]; 
      a1.Value = "Hello World!"; 
      a1.Font.Color = System.Drawing.Color.FromArgb(0x8C, 0xBE, 0x50); 
      // Save the workbook as xls (Excel 97-2003/Biff8) with default palette. 
      // 
      // This workbook will display the exact color in Excel 2007 and 
      // SpreadsheetGear 2009, but will only display the closest available 
      // palette indexed color in Excel 2003. 
      workbook.SaveAs(@"C:\tmp\GreenDefaultPalette.xls", FileFormat.Excel8); 
      // Save as xlsx/Open XML which will also display the exact color. 
      workbook.SaveAs(@"C:\tmp\GreenDefaultPalette.xlsx", FileFormat.OpenXMLWorkbook); 
      // Now, modify the palette and save. This workbook will display the exact 
      // color in Excel 2003 as well as in SpreadsheetGear 2009 and Excel 2007. 
      // 
      // Note that modifying the palette will change the color of any cells which 
      // already reference this palette indexed color - so be careful if you are 
      // modifying pre-existing workbooks. 
      workbook.Colors[0] = a1.Font.Color; 
      workbook.SaveAs(@"C:\tmp\GreenModifiedPalette.xls", FileFormat.Excel8);