Vis. js JSON данные в диапазоне электронных таблиц Google - PullRequest
2 голосов
/ 26 марта 2020

У меня небольшая проблема при попытке получить данные из Vis. js (здесь пример!) положения узлов и ребер, связанных с идентификатором, в диапазон Google SpreadSheets.

Вот код (HTML и ГАЗ)

let nodeArray = []

data.forEach(element => {
  let obj = {}
  obj.id = element[0]
  obj.label = element[1]
  obj.title = element[2]
  obj.group = element[3]
  obj.x = element[4]
  obj.y = element[5]

  nodeArray.push(obj)
  return element
})
//Logger.log(nodeArray);
return nodeArray;
}

function lineArray() {

  const data = ss.getSheetByName("Conecciones").getRange(2, 1, ss.getLastRow() - 1, 5).getValues();

  let edgArray = []

  data.forEach(element => {
    let obj = {}
    obj.from = element[0]
    obj.label = element[2]
    obj.dashes = element[3]
    obj.to = element[4]
    edgArray.push(obj)
    return element
  })
  //Logger.log(edgArray);
  return edgArray;
}
<html>

<head>
  <script type="text/javascript" src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>


</head>

<body>

  <div id="mynetwork"></div>
  <input type="button" id="export_button" onclick="exportNetwork()" value="export">
  <p id="input_output" style="height: 680px;"></p>

  <script type="text/javascript">
    function init() {

      container = document.getElementById('mynetwork');
      exportArea = document.getElementById('input_output');
      network = google.script.run.withSuccessHandler(([nodes, edges]) => new vis.Network(container, {
        nodes: nodes,
        edges: edges
      }, options)).sample();

    };

    function addConnections(elem, index) {
      elem.connections = network.getConnectedNodes(index);
    }

    function exportNetwork() {
      var nodes = objectToArray(network.getPositions());
      nodes.forEach(addConnections);
      var exportValue = JSON.stringify(nodes, undefined, 2);
      exportArea.innerHTML = exportValue;
    }

    function objectToArray(obj) {
      return Object.keys(obj).map(function(key) {
        obj[key].id = key;
        return obj[key];
      });
    }

    init();
  </script>
</body>

</html>

Я думаю, что проблема здесь, в HTML Side ?

function addConnections(elem, index) {                                                                          
    elem.connections = network.getConnectedNodes(index);
  }

  function exportNetwork() {
    var nodes = objectToArray(network.getPositions());
    nodes.forEach(addConnections);
    var exportValue = JSON.stringify(nodes, undefined, 2);
    exportArea.innerHTML = exportValue;
  }

  function objectToArray(obj) {
    return Object.keys(obj).map(function (key) {
    obj[key].id = key;
    return obj[key];
    });
  }

Резюме:

В На данный момент, у меня проблемы с чтением данных со стороны скрипта Google (проверено на 100%, работает без «предполагаемой проблемной части»)

Заранее спасибо большое!

1 Ответ

2 голосов
/ 26 марта 2020

Как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • Когда я увидел ваш сценарий, я заметил следующую часть. К сожалению, google.script.run не возвращает значений. Поэтому я думаю, что когда network используется в функции exportNetwork(), ошибка возникает в network.getPositions(). Я подумал, что это может быть причиной вашей проблемы.

    network = google.script.run.withSuccessHandler(([nodes, edges]) => new vis.Network(container, {
      nodes: nodes,
      edges: edges
    }, options)).sample();
    

Модифицированный скрипт:

Когда ваш скрипт модифицируется, как насчет следующей модификации?

От:
function init() {

  container = document.getElementById('mynetwork');
  exportArea = document.getElementById('input_output');
  network = google.script.run.withSuccessHandler(([nodes, edges]) => new vis.Network(container, {
    nodes: nodes,
    edges: edges
  }, options)).sample();

};
До:
let network;  // Added

function init() {
  container = document.getElementById('mynetwork');
  exportArea = document.getElementById('input_output');
  network = google.script.run.withSuccessHandler(([nodes, edges]) => {
      network = new vis.Network(container, {nodes: nodes, edges: edges}, options);  // Modified
  }).sample();
};

Ссылка:

К сожалению, я не могу проверить о вашей реальной ситуации. Поэтому, если это не было прямым решением вашей проблемы, я прошу прощения.

...