2008-12-19 10 views
1

J'essaie de convertir un tableau HTML en Excel en Javascript en utilisant le nouveau ActiveXObject("Excel.application"). Bascially I boucle à travers les cellules de tableau et insérer la valeur de la cellule correspondante dans Excel:Comment personnaliser le format de date lors de la création de cellules Excel via javascript (activexobject)?

//for each table cell 
oSheet.Cells(x,y).value = cell.innerText; 

Le problème est que lorsque la cellule est dans un format de date du « jj-mm-aaaa » (par exemple 09/10/2008), Excel aurait lu comme «mm-jj-aaaa» (c'est à dire 09 oct 2008). J'ai essayé de préciser NumberFormat comme:

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy'; 

Mais il n'a pas d'effet. Il semble que cela n'affecte que la façon dont excel afficher la valeur, pas analyser. Ma seule solution est maintenant d'échanger la date comme:

var txt = cell.innerText; 
if(/^(\d\d)-(\d\d)-\d\d\d\d$/.test(txt)) txt = txt.replace(/^(\d\d)-(\d\d)/,'$2-$1'); 

Mais je suis inquiète que ce n'est pas générique et un réglage de la machine differnt échouerait cela.

Existe-t-il un moyen de spécifier comment exceller analyser la valeur d'entrée?

+0

Wh at est les paramètres régionaux Windows du PC? – Fionnuala

Répondre

0

VBscript, que nous utilisons pour résoudre ce problème en

If IsDate (Cell.Value) Then 
     Cell.Value = DateValue (Cell.Value) 
    End If 

Peut-être, en java script, vous devez également jouer avec la même approche.

0

Vous pouvez éviter l'analyse de la date Excel en entrant les données en utilisant son format de date «série» natif. par exemple «22 déc 08» est 39804 en tant que date de série Excel. (Voir here pour une bonne explication de ceux-ci)

Ensuite formatez la cellule comme vous le faisiez auparavant.

0
  1. déterminer quels formats de date culture neutre Excel prend en charge

  2. utiliser JavaScript pour analyser votre chaîne de date et de sortie dans le format approprié

Je ne sais pas quels sont les formats excellent prend en charge mais vous voulez quelque chose comme .net's round trip or sortable formats, où il sera toujours lu régulièrement. Pour le # 2, si vous pouvez faire confiance à javascript pour construire une date appropriée à partir de n'importe quelle chaîne que vous alimentez c'est bien. Si vous n'êtes pas sûr à ce sujet, vous pouvez regarder une bibliothèque comme datejs où vous pouvez être plus précis sur ce que vous voulez arriver.

-1

J'ai essayé votre code mais à la fin du processus, j'ai re-appliqué le format aux colonnes contenant des dates. Cela fonctionne bien, quelle que soit la langue locale que vous avez configurée pour votre machine.

être mon objet Excel défini comme 'modèle', dès que je l'ai données rempli, j'ai appliqué (juste par exemple):

template.ActiveSheet.Range("D10:F99").NumberFormat = "dd/MMM/yyyy;@"; 

meilleures salutations

+0

Votre réponse concerne l'affichage de ces valeurs, tandis que la question est de savoir comment indiquer à Excel d'analyser les valeurs différemment. –

0

Au lieu de

oSheet.Cells(x,y).NumberFormat = 'dd-mm-yyyy'; 

ensemble ceci:

oSheet.Cells(x,y).NumberFormat = 14; 
Questions connexes