如何通过MySQL查询结果生成数据表并绘制图表?
解决方案:从MySQL查询结果生成图表并上传到Drive
方法1:使用Google Apps Script Charts服务(循环添加行)
完全可以通过循环遍历查询得到的数组,调用addRow()构建数据表。以下是整合查询、绘图、上传Drive的完整代码:
function useDBAndGenerateChart() { // 1. 连接MySQL并查询数据 var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my_connection_name","user","password"); const stmt = conn.createStatement(); let query = stmt.executeQuery('SELECT * FROM my_table'); let arr = []; while(query.next()){ arr.push([ query.getString(1), query.getFloat(2) ]); } conn.close(); // 务必关闭数据库连接,避免资源泄漏 // 2. 初始化图表数据表并添加列定义 var dataTable = Charts.newDataTable() .addColumn(Charts.ColumnType.STRING, "标签") // 对应查询结果第一列(字符串类型) .addColumn(Charts.ColumnType.NUMBER, "数值") // 对应查询结果第二列(浮点型) .build(); // 循环遍历数组,批量添加数据行 arr.forEach(row => { dataTable.addRow(row); }); // 3. 创建图表(示例为柱状图,可替换为折线图/饼图等) var chart = Charts.newColumnChart() .setDataTable(dataTable) .setTitle("MySQL查询结果图表") .setXAxisTitle("分类") .setYAxisTitle("数值") .setDimensions(600, 400) // 设置图表像素尺寸 .build(); // 4. 将图表上传至Google Drive var targetFolder = DriveApp.getFolderById("你的目标文件夹ID"); // 替换为实际文件夹ID var chartBlob = chart.getAs('image/png'); var chartFile = targetFolder.createFile(chartBlob) .setName("查询图表_" + new Date().toISOString().slice(0,10)); // 按日期命名文件 // 输出并返回Drive文件链接,供Appsheet调用 Logger.log("图表访问链接:" + chartFile.getUrl()); return chartFile.getUrl(); }
方法2:使用Google Visualization DataTable(更灵活的批量处理)
如果需要更复杂的数据转换或图表配置,可以直接使用Google Visualization的DataTable,支持批量添加行,无需手动循环:
function useVisualizationAndGenerateChart() { // 1. 连接MySQL并查询数据(同方法1) var conn = Jdbc.getCloudSqlConnection("jdbc:google:mysql://my_connection_name","user","password"); const stmt = conn.createStatement(); let query = stmt.executeQuery('SELECT * FROM my_table'); let arr = []; while(query.next()){ arr.push([ query.getString(1), query.getFloat(2) ]); } conn.close(); // 2. 创建Visualization DataTable并批量添加行 var data = new google.visualization.DataTable(); data.addColumn('string', '标签'); data.addColumn('number', '数值'); data.addRows(arr); // 直接传入数组批量添加所有行 // 3. 转换为Charts服务兼容的数据表格式 var chartData = Charts.newDataTable(data).build(); // 4. 创建并上传图表(同方法1) var chart = Charts.newColumnChart() .setDataTable(chartData) .setTitle("Visualization生成的查询图表") .setDimensions(600, 400) .build(); var targetFolder = DriveApp.getFolderById("你的目标文件夹ID"); var chartBlob = chart.getAs('image/png'); var chartFile = targetFolder.createFile(chartBlob) .setName("Visualization图表_" + new Date().toISOString().slice(0,10)); Logger.log("图表访问链接:" + chartFile.getUrl()); return chartFile.getUrl(); }
关键注意事项
- 需在Apps Script编辑器的「资源」>「高级Google服务」中,启用Charts API和Drive API。
- 图表类型可按需替换,例如
newLineChart()、newPieChart()等。 - 确保Drive目标文件夹设置了合适的共享权限,保证Appsheet能正常访问生成的图片链接。
内容的提问来源于stack exchange,提问作者Andrewncf
相关产品推荐
相关产品推荐

