2016-07-11 1 views
3

Bonjour Je crée une application en utilisant office.js qui sera utilisée dans Excel et Excel. écrit du code qui donne en fait le texte de la cellule entière par cellule. mais comme mon exigence était de maintenir les styles et de chaque cellule et de les stocker dans la base de données de sorte que quand encore addin fonctionne, il devrait charger les données dans le même format, il a été stocké. Actuellement, c'est juste le texte que je reçois en réponse. J'ai posé une question similaire à celle-ci, qui consistait à obtenir le texte avec les styles de la cellule actuelle qui fonctionne vraiment bien. How do I get the formatting the Current cell of the table in Word using office.jsRécupère les valeurs des cellules des lignes actuelles une par une sur l'événement "BindingSelectionChanged" de la table au format html dans Word en utilisant office.js

Il y a une autre chose s'il est possible d'obtenir la cellule html par position de ligne et de colonne qui résoudra également le problème. Merci!

Répondre

0

Salut j'ai trouvé la solution de mon problème, mais c'est la solution pour mot que cela ne fonctionne pas dans Excel, mais cela fonctionnait pour moi donc je suis en train d'écrire ici: -

function Addtable() { 
    var document = Office.context.document; 
    var headers = [["Cities"]]; 
    var rows = [['<b>Hello there</b> <ul><li>One</li><li>Two</li></ul>'], ['Roma'], ['Tokyo'], ['Seattle']]; 
    var html = '<table>'; 
    html += '<thead>'; 
    for (var i = 0; i < headers.length; i++) { 
     html += '<tr>'; 
     var cells = headers[i]; 
     for (var j = 0; j < cells.length; j++) { 
      html += '<th>' + cells[j] + '</th>'; 
     } 
     html += '</tr>'; 
    } 
    html += '</tr>'; 
    html += '</thead>'; 
    html += '<tbody>'; 
    for (var i = 0; i < rows.length; i++) { 
     html += '<tr>'; 
     var cells = rows[i]; 
     for (var j = 0; j < cells.length; j++) { 
      html += '<td>' + cells[j] + '</td>'; 
     } 
     html += '</tr>'; 
    } 
    html += '</tbody>'; 
    html += '</table>'; 

    Office.context.document.setSelectedDataAsync(html, { coercionType: Office.CoercionType.Html }, function (asyncResult) { 
     document.bindings.addFromSelectionAsync(Office.BindingType.Table, function (result) { 
      console.log(result); 

      var binding = result.value; 
      binding.addHandlerAsync(Office.EventType.BindingSelectionChanged, onBindingSelectionChanged); 
     }); 
    }); 
} 

Ce qui précède est la fonction que j'appelle quand je veux générer une table avec des valeurs html dedans.

et ci-dessous est le code que j'utilise pour obtenir la valeur de la cellule actuelle et le remplacer par une valeur fictive.

var onBindingSelectionChanged = function (results) { 
    if (!isExecuted) { 
     Word.run(function (context) { 
      var tableCell = context.document.getSelection().parentTableCell; 
      context.load(tableCell); 

      return context.sync() 
       .then(function() { 
        if (tableCell.isNull == true) { 
         //selection is not within a cell..... 
         console.log("selection not in a header"); 
        } 
        else { 
         // the selection is inside a cell! lets get the content.... 
         var body = tableCell.body; 
         var html = tableCell.body.getHtml(); 

         var tableHtml = tableCell.body.getHtml(); 

         context.sync() 
          .then(function() { 
           var cellHtml = html.value; 
           var newHtml = "<table><tr><td><ul><li>yellow</li></ul></td></tr></table"; 

           // Option 1 
           body.insertHtml(newHtml, Word.InsertLocation.replace); 

           // Option 2 
           //body.clear(); 
           //body.insertHtml(newHtml, Word.InsertLocation.end); 

           return context.sync().then(function() { 
            console.log('HTML was successfully replaced.'); 
           }).catch(function (e) { 
            console.log(e.message); 
           }); 
          }).catch(function (e) { 
           console.log(e.message); 
          }); 

        } 
       }).catch(function (e) { 
        console.log(e.message); 
       }); 
     }); 
     isExecuted = true; 
    } 
    else { 
     isExecuted=false; 
    } 

}; 

Merci!