2017-08-21 1 views
0

J'essaie de mettre en forme une plage de cellules associées à une feuille nouvellement créée.Appliquer la mise en forme de bordure

Mon dernier 2 (failed) tentatives sont:

Excel.run(function (context) { 
    const newSheet = context.workbook.worksheets.add("New sheet 1"); 
    newSheet.activate(); 
    const values = [ 
     ["Row 1", "Row 1", "Row 1"], 
     ["Row 2", "Row 2", "Row 2"] 
    ] 
    newSheet.getRange("A1").getResizedRange(values.length - 1, values[0].length - 1).values = values; 
    context.sync().then(function() { 
     newSheet.getRange("A2").getResizedRange(0, output[0].length - 1).foramt = {borderTopStyle: "thin"}; 
     return context.sync(); 
    }); 
}); 

Et:

Excel.run(function (context) { 
    const newSheet = context.workbook.worksheets.add("New sheet 1"); 
    newSheet.activate(); 
    const values = [ 
     ["Row 1", "Row 1", "Row 1"], 
     ["Row 2", "Row 2", "Row 2"] 
    ] 
    newSheet.getRange("A1").getResizedRange(values.length - 1, values[0].length - 1).values = values; 
    context.sync().then(function() { 

     // The difference is here 
     newSheet.getRange("A2").getResizedRange(0, values[0].length - 1).foramt.borderTopStyle = "thin"; 
     return context.sync(); 
    }); 
}); 

Quelle est la bonne façon de style une gamme de cellules?

Répondre

1

D'abord, quelques commentaires/suggestions concernant la structure globale/contenu du code affiché:

  • Assurez-vous d'inclure toujours la logique de gestion des erreurs, sinon les choses peuvent échouer en mode silencieux sans que vous sachiez ce qui a mal tourné .
  • Pour votre scénario, un seul context.sync() est nécessaire (à la fin), car les opérations que vous effectuez avant (écrire des données sur la feuille et appliquer le formatage à la feuille) peuvent simplement être mises en file d'attente et exécuté tous ensemble dans un seul context.sync() à la fin.
  • Votre code contient une faute de frappe (foramt au lieu du format) et fait référence à un nom de propriété qui n'existe pas sur l'objet RangeFormat (borderTopStyle). Si vous utilisiez TypeScript au lieu de Javascript simple, les erreurs de ce type seraient automatiquement signalées pour vous.

Voici un extrait de code qui montre comment vous pouvez définir la frontière pour une plage spécifiée (en fonction de la structure du code affiché, mais modifié pour y intégrer les commentaires ci-dessus):

Excel.run(function (context) { 

    // create new sheet, add 2 rows of data 
    const newSheet = context.workbook.worksheets.add("New sheet 1"); 
    newSheet.activate(); 
    const values = [ 
     ["Row 1", "Row 1", "Row 1"], 
     ["Row 2", "Row 2", "Row 2"] 
    ] 
    newSheet.getRange("A1").getResizedRange(values.length - 1, values[0].length - 1).values = values; 

    // set top border for the second row of data 
    newSheet.getRange("A2").getResizedRange(0, values[0].length - 1).format.borders.getItem('EdgeTop').style = 'Continuous'; 

    return context.sync(); 
}) 
    .catch(function (error) { 
     console.log('error: ' + error); 
     if (error instanceof OfficeExtension.Error) { 
      console.log('Debug info: ' + JSON.stringify(error.debugInfo)); 
     } 
    }); 
} 
+0

Cool, ça a marché! Aussi, comment puis-je fusionner 2 cellules ensemble? – avi12

+0

Pouvez-vous s'il vous plaît créer un nouveau post ici sur Stack Overflow pour la nouvelle question sur la fusion de cellules? En créant un post distinct pour chaque sujet/question, vous augmentez la probabilité que les personnes qui connaissent la réponse la voient (et y répondent) et la rendent plus probable que d'autres puissent en bénéficier (à partir de cette question/réponse)) A l'avenir. Merci! –

+0

Merci beaucoup! Voici la question: https://stackoverflow.com/questions/45805035 – avi12