2017-09-06 1 views
0

Je souhaite supprimer et réorganiser les sections d'un document Word à l'aide de office.js. Par exemple, un document Word comporte trois sections. Et voici la liste des en-têtes de sections:OfficeJS -Supprimer et réorganiser des sections dans un document Word

  1. section Rocking Un
  2. section Rocking Deux
  3. section Rocking Trois

utilisateur a changé à:

  1. section Rocking Trois
  2. Section de basculement One

Enfin, je veux voir l'impact dans mon document Word. Je peux facilement montrer à l'utilisateur la liste des en-têtes des sections. Et l'utilisateur peut modifier (réorganiser ou supprimer) la liste des en-têtes. J'ai essayé un moyen de le faire. J'ai changé le items de sections et j'ai essayé de charger le sections. Voici le code:

function RearrangeSections(sectionHeaderList) { 
    Word.run(function (context) { 

     var sections = context.document.sections; 
     context.load(sections); 
     return context.sync() 
      .then(function() { 
       if (sections != null) {       
        var headers = []; 
        for (var i = 0; i < sections.items.length; i++) { 

         // Grab the header from the current section 
         var header = sections.items[i].getHeader('primary'); 

         // Add loading this header to the queue 
         context.load(header); 

         // Push this header into the headers collection 
         headers.push(header); 
        } 


        var sectionItems = sections.items; //Get section items into a new list 
        context.sync().then(function() { 
         for (var i = 0; i < sectionHeaderList.length; i++) { 

          for (var j = 0; j < headers.length; j++) { 
           var targetHeader = sectionHeaderList[i].name; // 
           if (headerText == targetHeader) { 
            context.document.sections.items[i] = sectionItems[j]; // Change the section items 
           } 
          } 
         } 
         context.load(context.document.sections); // Finally load the sections 
         return context.sync().then(function() { 
          // 
         }); 
        }); 
       } 

      }).catch(function (myError) { 
       //otherwise we handle the exception here!      
      }); 


    }).catch(errorHandler); 

} 

Dans le paramètre de méthode, sectionHeaderList est une liste d'objets qui a la liste d'en-tête mis à jour (après le changement d'utilisateur). Ici, j'ai juste essayé de réorganiser.

Ce code ne fait rien. Est-ce que j'essaie correctement?

Merci d'avoir lu. Tout type de conseil/aide est le bienvenu!

Répondre

0

J'ai résolu le problème. J'ai choisi le Ooxml des corps de section puis efface le corps du document et place les corps de section comme ma séquence. J'ai utilisé la première ligne du corps de la section pour faire correspondre les sections. Vous pouvez utiliser l'en-tête de section. Cela fonctionnera aussi. Voici l'exemple de code:

function RearrangeSections(sectionHeaderList) { 
    Word.run(function (context) { 
     var body = context.document.body; 
     var sections = context.document.sections; 
     context.load(body); 
     context.load(sections); 
     return context.sync() 
      .then(function() { 
       if (sections != null) { 
        var itemsCount = sections.items.length; 
        var bodies = []; 
        var bodiesOoxml = []; 
        for (var i = 0; i < sections.items.length; i++) { 

         var body = sections.items[i].body; 
         context.load(body);        
         bodies.push(body); 
        } 

        // Sync/Exectute the queued actions      
        var sectionItems = []; 
        sectionItems = sections.items; 

        context.sync().then(function() { 
         for (var i = 0; i < bodies.length; i++) { 
          var ooxml = bodies[i].getOoxml(); 
          bodiesOoxml.push(ooxml); 
         } 


         context.sync().then(function() {         
          context.document.body.clear(); 
          for (var i = 0; i < sectionHeaderList.length; i++) { 
           for (var j = 0; j < bodies.length; j++) { 

            var bodyText = bodies[j].text; 
            var headerText = bodyText.split("\r")[0]; 
            var targetHeader = sectionHeaderList[i].name; 


            if (headerText == targetHeader) { 
             var val = bodiesOoxml[j].value; 
             body.insertOoxml(val, Word.InsertLocation.end); 
            } 
           } 
          } 
          context.load(context.document.sections); 
          return context.sync().then(function() { 
           console.log("Done"); 
          }) 
         });        
        }).catch(function (e) { 
         //Show error 

        }); 
       } 

      }).catch(function (myError) { 

       //Show error 
      }); 


    }).catch(errorHandler); 

}