首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过web应用程序将Excel导入Google

如何通过web应用程序将Excel导入Google
EN

Stack Overflow用户
提问于 2020-10-13 04:42:21
回答 1查看 1.3K关注 0票数 1

我正在尝试制作一个web应用程序,它将导入excel文件并将其传递给google。想法是,不同的人将上传他们的表格(格式是相同的)通过网页应用到我的电子表格,我将在那里完成剩下的工作。

现在我得到了这个:

js代码;

代码语言:javascript
运行
复制
    function doGet(e) {
 
  Logger.log(e.parameter);
  return HtmlService.createHtmlOutputFromFile("index");
     
}

function toroku(userInfo){

 var url = "https://docs.google.com/spreadsheets/d/1gCMXhBTba-8PNeN5lk5wrumUGe_f4xNdip1DPCpaRSw/edit#gid=0";
 var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("upload");
 
  ws.appendRow([userInfo.table]);
        
 }

和html;

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
    var ExcelToJSON = function() {

      this.parseExcel = function(file) {
        var reader = new FileReader();

        reader.onload = function(e) {
          var data = e.target.result;
          var workbook = XLSX.read(data, {
            type: 'binary'
          });
          workbook.SheetNames.forEach(function(sheetName) {
            // Here is your object
            var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
            var json_object = JSON.stringify(XL_row_object);
            console.log(JSON.parse(json_object));
            jQuery( '#xlx_json' ).val( json_object );
          })
        };

        reader.onerror = function(ex) {
          console.log(ex);
        };

        reader.readAsBinaryString(file);
      };
  };

  function handleFileSelect(evt) {
    
    var files = evt.target.files; // FileList object
    var xl2json = new ExcelToJSON();
    xl2json.parseExcel(files[0]);
  }


 
</script>

<form enctype="multipart/form-data">
    <input id="upload" type=file  name="files[]">
</form>

    <textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>

    <script>
        document.getElementById('upload').addEventListener('change', handleFileSelect, false);
        document.getElementById('upload').addEventListener('click', handleFileSelect).value
        
        google.script.run.toroku(handleFileSelect);
        document.getElementById("upload").value = "";

    </script>
    
    <div class="form-row">
    <button id="btn">登録!</button>
    </div>
   
    <script>
   
    document.getElementById("btn").addEventListener("click",doStuff);
   
    function doStuff(){
   
    var userInfo = {};
   
   
    userInfo.table = document.getElementById("xlx_json").value;

    
     google.script.run.toroku(userInfo);
    document.getElementById("xlx_json").value = "";

   
    }
   
    </script>
    
  </body>
</html>

它从excel中读取数据并将其导入google,但我得到的是数组而不是表。

这就是我要导入谷歌页面的东西:

代码语言:javascript
运行
复制
[{"Product":"2132030501430 ","Customer":"A","Units":"1","Deliver":"1"},{"Product":"2188130546030 ","Customer":"B","Units":"2","Deliver":"3"},{"Product":"2132650259800 ","Customer":"A","Units":"1","Deliver":"5"},{"Product":"2138512138000 ","Customer":"B","Units":"0","Deliver":"6"},{"Product":"2132032500270 ","Customer":"A","Units":"-10","Deliver":"7"},{"Product":"2116104013159 ","Customer":"B","Units":"200","Deliver":"8"},{"Product":"2116102039910 ","Customer":"A","Deliver":"9"},{"Product":"2145710030310 ","Customer":"B","Deliver":"10"},{"Product":"2132630164760 ","Customer":"A","Deliver":"9"},{"Product":"2116105051990 ","Customer":"B","Units":"0","Deliver":"5"},{"Product":"2145721006510 ","Customer":"A","Units":"0","Deliver":"4"},{"Product":"2132030900430 ","Customer":"B","Units":"7","Deliver":"3"},{"Product":"2132031500270 ","Customer":"A","Units":"5","Deliver":"2"},{"Product":"2138506049100 ","Customer":"B","Units":"6","Deliver":"1"},{"Product":"2132042501730 ","Customer":"C","Units":"31","Deliver":"9"},{"Product":"2132030901470 ","Customer":"D","Units":"20","Deliver":"8"},{"Product":"2116101050089 ","Customer":"F","Units":"126","Deliver":"7"},{"Product":"2116104051870 ","Customer":"C","Units":"3","Deliver":"6"},{"Product":"2188131528030 ","Customer":"D","Units":"82","Deliver":"4"},{"Product":"2145718013050 ","Customer":"F","Deliver":"4"},{"Product":"2188140578030 ","Customer":"C","Units":"20","Deliver":"4"},{"Product":"2132640087170 ","Customer":"D","Deliver":"4"},{"Product":"2138506026000 ","Customer":"F","Units":"0","Deliver":"4"},{"Product":"2132042501770 ","Customer":"C","Units":"15","Deliver":"4"},{"Product":"2187106025940 ","Customer":"D","Units":"90","Deliver":"4"}]

我的问题是如何把它转换成一张桌子?应该在html端完成吗?另外,我想说,我是编程世界的新手,所以请以最简单的方式告诉我,我应该如何处理这个问题。

诚挚的问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 05:42:43

我相信你的目标如下。

  • 当选择本地PC上的XLSX文件时,您希望检索XLSX数据并使用Javascript和xlsx.js将其放到xlsx.js中。
  • 当单击底部按钮时,您希望将textarea中的值发送到Google脚本端,并希望将这些值放到Google电子表格中。
  • Excel file has only one sheet with one simple table中,我了解到XLSX数据只有一个表。

修改要点:

  • 在您的脚本中,当XLSX数据中有多个工作表时,只将最后一个工作表的值发送到Google脚本。因为其他工作表的值是用workbook.SheetNames.forEach()覆盖的。
    • 但是从您的答复中,我可以理解您认为XLSX数据只有一个表。因此,在这种情况下,您的脚本变得更简单。

  • 在您的脚本中,document.getElementById('upload').addEventListener('click', handleFileSelect).value会发生错误。
  • 为了将值放到电子表格中,我建议使用setValues而不是appendRow。当使用setValues时,多行和多列的值可以通过一个调用来放置。
    • 在这种情况下,这些值必须是二维数组。

当以上要点反映到您的脚本中时,如下所示。

修改脚本:

Google脚本端:

代码语言:javascript
运行
复制
function doGet(e) {
  Logger.log(e.parameter);
  return HtmlService.createHtmlOutputFromFile("index");
}

function toroku(userInfo){
  var values = JSON.parse(userInfo.table);
  var url = "https://docs.google.com/spreadsheets/d/1gCMXhBTba-8PNeN5lk5wrumUGe_f4xNdip1DPCpaRSw/edit#gid=0";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("upload");
  ws.getRange(ws.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
}

HTML和Javascript方面:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>

<head>
  <base target="_top">
</head>

<body>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
  <form enctype="multipart/form-data">
    <input id="upload" type=file name="files[]">
  </form>
  <textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>
  <div class="form-row">
    <button id="btn">登録!</button>
  </div>

  <script>
    document.getElementById('upload').addEventListener('change', handleFileSelect, false);
    document.getElementById("btn").addEventListener("click", doStuff);
  
    var ExcelToJSON = function() {
      this.parseExcel = function(file) {
        var reader = new FileReader();
        reader.onload = function(e) {
          var data = e.target.result;
          var workbook = XLSX.read(data, {type: 'binary'});
          jQuery('#xlx_json').val(JSON.stringify(XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], {header: 1})));
        };
        reader.onerror = function(ex) {
          console.log(ex);
        };
        reader.readAsBinaryString(file);
      };
    };

    function handleFileSelect(evt) {
      var files = evt.target.files; // FileList object
      var xl2json = new ExcelToJSON();
      xl2json.parseExcel(files[0]);
    }

    function doStuff() {
      var userInfo = {};
      userInfo.table = document.getElementById("xlx_json").value;
      google.script.run.toroku(userInfo);
      document.getElementById("xlx_json").value = "";
    }
  </script>
</body>
</html>

注意:

  • 当您修改Web的脚本时,请将Web重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请小心点。

参考文献:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64328657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档