下午好,
我尝试通过脚本代码将表提取到csv文件中。在互联网上,我只能找到如何提取完整的工作表,但我想创建一个csv仅仅某个范围“B8:K500”。
代码创建一个CSV文件,但只有一个单元格并且说“未定义”。没有其他的。不是我想要创建的表格中的数字。
在convertRangeToCsvFile_(csvFileName, sheet)
中似乎有些错误。我是编码的新手。只是尝试应用我在网上找到的东西。
function ExportCSV() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var range = ss.getSheets()[0].getRange("B8:K500");
SpreadsheetApp.setActiveRange(range);
// create a folder from the name of the spreadsheet
var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
for (var i = 0 ; i < sheets.length ; i++) {
var sheet = sheets[i];
// append ".csv" extension to the sheet name
fileName = sheet.getName() + ".csv";
// convert all available sheet data to csv format
var csvFile = convertRangeToCsvFile_(fileName, sheet);
// create a file in the Docs List with the given name and the csv data
folder.createFile(fileName, csvFile);
}
Browser.msgBox('Files are waiting in a folder named ' + folder.getName());
}
function convertRangeToCsvFile_(csvFileName, sheet) {
// get available data range in the spreadsheet
var range = sheet.getRange("B8:K500");
var values = SpreadsheetApp.getActiveSheet().getRange("B8:K500").getValues();
var csvFile = values;
DriveApp.createFile("mycsv.csv", csvFile);
}
答案 0 :(得分:0)
你在这里使用的.getValues函数......
var values = SpreadsheetApp.getActiveSheet().getRange("B8:K500").getValues();
...将在数组中返回一个数组,内部数组是行,外部数组就是这样的列:
[["A1","B1","C1"],["A2","B2","C2"],["A3","B3","C3"]]
其中&#34; A1&#34;,&#34; B1&#34;等等是单元格A1,B1 ......
中的任何值要删除括号并用逗号和分号/新行替换它们/您正在使用的其他分隔符,您可以使用某种for循环。
有多种方法。虽然这可能不是最有效的方法,但我可能会这样做:
var row=0
var col=0
var csvFile=""
for (row=0; row<values.length; row++) {
for (col=0; col<values[0].length; col++) {
//insert comma just before the values if it's not the first value
if (col != 0) {
csvFile+=","
}
//get value at column and row and add it to csvFile
csvFile+=values[row][col]
}
//insert semicolons (or whatever you want) between whole rows
csvFile+=";"
}