2016-09-20 7 views
0

У меня есть проект надстройки над Word (API 1.3), где я могу вставлять таблицы и создавать элементы управления контентом. Я использую следующий код, чтобы узнать, нажимает ли пользователь внутри таблицы или выбирает любую из своих ячеек.Как получить выбранные строки и индекс столбца и число в Word JS

Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, 
 
    function() { 
 
    Word.run(function(ctx) { 
 
     var ctrl = ctx.document.getSelection().parentContentControl; 
 

 
     return ctx.sync() 
 
     .then(function() { 
 
      if (!ctrl.isNull) { // found - clicked inside the control 
 
      // ... load some properties, ... 
 
      ctrl.load('tag'); // How to get startRow, startCol, rowCount, colCount? 
 

 
      ctx.sync() 
 
       .then(function() { 
 
       console.log(ctrl.tag); 
 
       }).catch(function(err) { 
 
       console.log(err); 
 
       }); 
 
      } 
 
     }).catch(function(err) { 
 
      console.log(err); 
 
     }); 
 
    }); 
 
    });

Есть ли способ, чтобы получить StartRow, startCol, сверку, ColCount отсюда, как в обязательных обработчиков событий для SelectionChanged?

ответ

1

Спасибо, что поделились этим вопросом. 2 номера с кодом:

  1. Вы подписаны на изменение выбора документа, но вы действительно хотите выполнить изменение выбора привязки. Обратите внимание, что координаты возвращаются только в табличных привязках.
  2. После того, как вы привязываетесь к таблице и подписываетесь на нужный тип события, вам нужно добавить аргументы событий обработчику, чтобы получить доступ к требуемым значениям.

Заканчивать следующий код, чтобы увидеть, как создать связывание, а также как использовать EventArgs на обработчик, чтобы получить информацию, необходимую таблицу (также отметить, что вы получите не определено в строках, выступающих в качестве заголовков, если у вас есть заголовки, определенные в таблице):

Office.context.document.bindings.addFromSelectionAsync(Office.BindingType.Table, function (result) { 
 
      if (result.status == Office.AsyncResultStatus.Succeeded) { 
 
       // after creating the binding i am adding the handler for the BindingSelectionChanged, check out eventArgs usage.... 
 
       var binding = result.value; 
 
       binding.addHandlerAsync(Office.EventType.BindingSelectionChanged, function (eventArgs) { 
 
        app.showNotification('Selection Coordinates: ' + eventArgs.startColumn + " " + eventArgs.columnCount + " " + eventArgs.startRow + " " + eventArgs.rowCount); 
 
       }); 
 
      } 
 
     });

Надеется, что это ставит вас в правильном направлении. благодаря! Хуан.

+0

Я использую элементы управления содержимым для таблиц, и у меня нет привязок для них. Означает ли это, что если пользователь нажимает внутри таблицы, мне нужно найти элемент управления содержимым, который прикреплен к таблице, выбрать всю таблицу, сделать привязку с нее, а затем попросить пользователя снова выбрать ячейки, чтобы я мог получить столбцы и строки? Наличие привязки и контроля содержимого на столе в то же время звучит как перебор. –

+1

Если вы хотите получать события, вам нужно создать привязку, а в Word - создание элемента управления контентом. Обратите внимание, что привязка - это то, что вам нужно сделать только один раз, в этом случае, похоже, в то время, когда вы действительно вставляете таблицу в документ. После того, как вы создадите привязку и обработчики событий, событие просто запустится, вам не нужно будет предлагать пользователю повторно выбирать ячейки. –

+0

Я добавляю таблицу с таблицей «var table = ctx.document.body.insertTable (значение.length, значение [0] .length,« end », value); var myContentControl = table.insertContentControl(); ctx.sync() '. Затем найдите привязки в документе с помощью 'doc.bindings.getAllAsync', и у меня их нет. Нужно ли мне использовать 'doc.bindings.addFromSelectionAsync' в момент создания контроля контента, чтобы ваш предлагаемый способ работы? –