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



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

现在我得到了这个:

js代码;

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;

<!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中读取数据并将其导入到谷歌工作表中,但我得到的是数组而不是表。

这就是我要导入到谷歌表单的内容:

[{"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端完成吗?我也想说,我是编程界的新手,所以请用最简单的方式告诉我该怎么做。

谨致问候!

我相信你的目标如下。

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

修改点:

  • 在脚本中,当XLSX数据中有多个工作表时,只有最后一个工作表的值会发送到Google Apps脚本。因为workbook.SheetNames.forEach()中会覆盖其他图纸的值。
    • 但从你的回复来看,我可以理解你认为XLSX数据只有一张纸。因此,在这种情况下,您的脚本会变得更加简单
  • 在脚本中,document.getElementById('upload').addEventListener('click', handleFileSelect).value出现错误
  • 为了将这些值放入电子表格,我建议使用setValues而不是appendRow。当使用setValues时,可以通过一个调用来放置多行和多列的值。
    • 在这种情况下,值必须是二维数组

当以上几点反映到您的脚本中时,它变成如下。

修改的脚本:

谷歌应用程序脚本端:

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端:

<!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应用程序中。请小心

参考文献:

  • appendRow(rowContents(
  • setValues(值(

最新更新