【问题标题】:Issues with setting query ranges on google charts在谷歌图表上设置查询范围的问题
【发布时间】:2017-07-10 19:26:36
【问题描述】:

我对使用 google 图表/javascript 进行编码相当陌生,由于某种原因,当我尝试从电子表格中提取数据时,我无法指定范围。我使用的是一个很小的示例电子表格,但它仍然不会不工作。我的java代码在下面,我已经尝试了我能找到的每一个url修改。使用 'https://docs.google.com/spreadsheets/d/1BHeR6LetK5ztqvgIm53OpbNFjMttRICBBDR8j1yEAjg/edit#gid=0range=2:5' 不会改变结果。

使用 'https://docs.google.com/spreadsheets/d/1BHeR6LetK5ztqvgIm53OpbNFjMttRICBBDR8j1yEAjg/gviz/tq?range=2:5' 不会生成图表,即使排除范围也会。

整个java代码都在这里,我做错了什么?:

google.charts.load('current', {
  'packages': ['line', 'corechart', 'table']
});
google.charts.setOnLoadCallback(drawChart);

function drawChart() {

  var queryString =  encodeURIComponent('SELECT A, H, O, Q, R, U LIMIT 5 OFFSET 8');
  var query = new google.visualization.Query(
    'https://docs.google.com/spreadsheets/d/1BHeR6LetK5ztqvgIm53OpbNFjMttRICBBDR8j1yEAjg/edit#gid=0range=A1:C2' + queryString);
  query.send(handleSampleDataQueryResponse);
}

function handleSampleDataQueryResponse(response) {

  if (response.isError()) {
    alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
    return;
  }

  var data = response.getDataTable();


  var materialOptions = {
    chart: {
      title: 'Example Data'
    },
    width: 900,
    height: 500,
    series: {
      0: {
        axis: 'Miles'
      },
      1: {
        axis: 'Heartrate'
      }
    },
    axes: {
      y: {
        Miles: {
          label: 'Miles Run'
        },
        Heartrate: {
          label: 'Heart rate(BPM)'
        }
      }
    }
  };

  function drawMaterialChart() {
    var chartDiv = document.getElementById('chart_div');
    var materialChart = new google.charts.Line(chartDiv);
    materialChart.draw(data, materialOptions);
  }
  drawMaterialChart();
}

【问题讨论】:

    标签: javascript google-sheets google-visualization


    【解决方案1】:

    url上的参数需要用-->&隔开

    例如--> .../edit#gid=0&range=A1:C2

    请参阅以下工作 sn-p...

    google.charts.load('current', {
      callback: drawChart,
      packages: ['line', 'corechart', 'table']
    });
    
    function drawChart() {
      var query = new google.visualization.Query(
        'https://docs.google.com/spreadsheets/d/1BHeR6LetK5ztqvgIm53OpbNFjMttRICBBDR8j1yEAjg/edit#gid=0&range=A1:C2');
      query.send(handleSampleDataQueryResponse);
    }
    
    function handleSampleDataQueryResponse(response) {
    
      if (response.isError()) {
        alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
      }
    
      var data = response.getDataTable();
    
    
      var materialOptions = {
        chart: {
          title: 'Example Data'
        },
        width: 900,
        height: 500,
        series: {
          0: {
            axis: 'Miles'
          },
          1: {
            axis: 'Heartrate'
          }
        },
        axes: {
          y: {
            Miles: {
              label: 'Miles Run'
            },
            Heartrate: {
              label: 'Heart rate(BPM)'
            }
          }
        }
      };
    
      function drawMaterialChart() {
        var chartDiv = document.getElementById('chart_div');
        var materialChart = new google.charts.Line(chartDiv);
        materialChart.draw(data, materialOptions);
      }
      drawMaterialChart();
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div"></div>

    注意:如果您要包含查询字符串,
    选择语句需要在 url 上设置的范围内
    目前,范围仅包括列 AC
    但是sql有H, O, Q, R, U


    编辑

    删除范围并尝试使用方法setQuery 来使用SQL 语句...

    query.setQuery('SELECT A, B, C LIMIT 3');
    

    请参阅以下工作 sn-p...

    google.charts.load('current', {
      callback: drawChart,
      packages: ['line', 'corechart', 'table']
    });
    
    function drawChart() {
      var query = new google.visualization.Query(
        'https://docs.google.com/spreadsheets/d/1BHeR6LetK5ztqvgIm53OpbNFjMttRICBBDR8j1yEAjg/edit#gid=0');
      query.setQuery('SELECT A, B, C LIMIT 3');  
      query.send(handleSampleDataQueryResponse);
    }
    
    function handleSampleDataQueryResponse(response) {
    
      if (response.isError()) {
        alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
        return;
      }
    
      var data = response.getDataTable();
    
    
      var materialOptions = {
        chart: {
          title: 'Example Data'
        },
        width: 900,
        height: 500,
        series: {
          0: {
            axis: 'Miles'
          },
          1: {
            axis: 'Heartrate'
          }
        },
        axes: {
          y: {
            Miles: {
              label: 'Miles Run'
            },
            Heartrate: {
              label: 'Heart rate(BPM)'
            }
          }
        }
      };
    
      function drawMaterialChart() {
        var chartDiv = document.getElementById('chart_div');
        var materialChart = new google.charts.Line(chartDiv);
        materialChart.draw(data, materialOptions);
      }
      drawMaterialChart();
    }
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="chart_div"></div>

    【讨论】:

    • 感谢您的帮助,我不敢相信我忘记了 & 符号,但我注意到即使使用 & 符号,它仍然产生的点数超过 A1:C2 允许的范围,即在示例中,您显示 C 应该有 2 个点,当它应该有 2 个点时,当我将相同的逻辑扩展到具有 5 个列的表时,它只请求 3 个它忽略了范围。你是怎么解决这个问题的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多