2010-10-29 13 views
2

Je tente de mettre en forme une cellule en format Excel. Je vais donc dans Excel, enregistrer une macro de moi en convertissant une cellule ordinaire en un format de monnaie, jetez un oeil au script vb et voir qu'il génère ce qui suit:Format de devise Excel Interop

NumberFormat = "$ #, ## 0.00"

Donc, je prends ce format et le coller dans mon code, cela fonctionne dans la mesure où je reçois le caractère monétaire avant les valeurs dans ma feuille Excel. Cependant, le format de la cellule est toujours un nombre et excel place un petit triangle vert en bas à gauche de la cellule m'informant que le format est incorrect (ce qui est, cos étant supposé être monnaie, mais son ensemble au nombre) Y a-t-il un moyen de mettre la cellule dans un format "Devise"?

grâce

Répondre

0

pas sûr de comprendre votre question:
Dans Excel toutes les valeurs numériques, y compris monnaie, entiers et date/heure ont lieu en double virgule flottante. Le format d'une valeur contrôle uniquement la manière dont elle est présentée dans la couche de rendu (visible).
Les tests du triangle vert n'incluent pas les tests de mise en forme.
Le problème est-il que vous créez une valeur de texte plutôt qu'une valeur numérique?

+0

Aucune des valeurs im définissant les cellules n'est numérique. Pour mieux comprendre ma question, si vous faites un clic droit sur une cellule dans Excel, et cliquez sur la cellule de format, il y a une liste de différents formats qui incluent "Numéro" et "Monnaie" et d'autres types, est-il un moyen pour moi cellules formatage à "monnaie" en utilisant l'interop excel, j'ai essayé de le faire en utilisant NumberFormat, mais il ne semble pas fonctionner –

+0

Vous pouvez essayer de définir le style à la monnaie.
Mais je ne pense pas que ce soit le formatage numérique qui pose problème car il n'y a pas de contrôle du triangle vert pour le formatage, mis à part celui qui vérifie les nombres stockés sous forme de texte.
Peut-être que vous devriez publier votre code. –

+0

BTW, Si un nombre est entré en tant que chaîne/texte ou formaté en tant que texte, le formatage ultérieur en tant que devise ne le convertit pas en un nombre. –

2

Ok, j'ai essayé beaucoup de ces codes et j'ai trouvé que cela fonctionne mieux que d'autres sur n'importe quel langue/paramètres régionaux.

numberFormat = @"_-[$$-409]* #,##0.00_ ;_-[$$-409]* -#,##0.00 ;_-[$$-409]* ""-""??_ ;[email protected]_ "; 
+0

Qui a résolu mon problème – joab

6

L'objet de gamme a une propriété « Style » ... les métadonnées intelisense dit qu'il est « Retourne un objet que vous pouvez utiliser » seulement, mais vous pouvez aussi simplement définir le style avec cette propriété. Pour obtenir le style "Currency" intégré, utilisez la propriété "Styles" de (par exemple) un objet Workbook.

Exemple:

using Excel = Microsoft.Office.Interop.Excel; 

... 

var excel = new Excel.Application(); 
var wb = excel.Workbooks.Add(); 
var sheet = (Excel.Worksheet)wb.Sheets[1]; 
((Excel.Range)sheet.Cells[3, 4]).Style = wb.Styles["Currency"]; 

En fait, vous pouvez simplement le mettre à la chaîne « monnaie » qui peut être ce que Charles suggérait.

((Excel.Range)sheet.Cells[3, 4]).Style = "Currency";