2015-10-29 1 views
2

Je lis une valeur de XML:Numéro Arrondi de XML vers Excel

<DocumentSetNumber>20151027301060001</DocumentSetNumber> 

$DSN = $xml.metaBI.DocumentSetNumber 

puis écrire à Excel à l'aide PowerShell:

$ExcelWorkSheet.Cells.Item($Row,1).Value2 = $DSN 

Mais dans Excel, je reçois ce numéro: 2.0151E + 16

Si je change le format Excel je peux obtenir ceci: 20151027301060000

ce n'est pas le même nombre, et Je dois obtenir exactement la même chose.

J'ai essayé de jouer avec les formats Excel et aussi utiliser Tostring() sur variable, mais sans chance.

Que puis-je essayer?

PS. Si je copier et coller cette valeur, il fonctionne manuellement que j'utilise

destination match formatage

l'option

dans Excel.

Comment puis-je définir cette option à partir de PowerShell?

Répondre

3

Vous allez devoir mettre ce long DSN dans la cellule sous forme de chaîne. Excel a un 15 digit precision et arrondit tous les nombres de plus de 15 chiffres à l'espace réservé le plus proche.

Compte tenu de votre code, il semble que le préfixe $DSN avec une seule citation (par exemple ' ou ASCII 039) comme Range.PrefixCharacter property devrait suffire. Alternativement, vous pouvez changer le format numérique de la cellule de réception à Texte mais je pense qu'un préfixe forcé est le meilleur. Depuis une seule citation (aka cochez) est utilisé comme un opérateur de devis dans PowerShell, nous devons l'introduire en tant que [char]39.

$tic = [char]39 
$DSN = $xml.metaBI.DocumentSetNumber 
$ExcelWorkSheet.Cells.Item($Row,1).Value2 = $tic + $DSN 
# write-host $tic$dsn <~~ this outputs correctly but apparently not correct for XL cell value. see comments. 

Cela devrait changer à 20151027301060001'20151027301060001 et Excel acceptera comme chaîne de texte sans essayer de forcer en nombre.

+0

ok, $ tic + $ DSN fonctionne – Alexan

+0

Merci de clarifier ce qui fonctionne réellement. Je n'ai pas mis en place un banc de test XL complet et je me suis appuyé sur 'write-host $ tic $ dsn' qui semblait envoyer la bonne chaîne concaténée. Je vais ajuster ma réponse ci-dessus en fonction de votre expérience. – Jeeped