私はここにあるコードを使用しています: How to convert a Google Docs-File to an Excel-File (XLSX)、さらに具体的にはin this gistを使用してExcelファイルを作成しています。Googleスプレッドシートの行からExcel文書を作成する
コードを変更する必要があります。
- google スプレッドシートに新しい行が追加されるたびにExcelファイルを作成します。 現在作業中
- 新しいExcelファイルの行1は、ソーススプレッドシートのヘッダーであり、2行目は、 ソーススプレッドシートに追加された新しい行にする必要があります。
- ファイルの名前は、新しい行に見出される値に基づくべきで、列2 & 15.ワーキング今
- 新しいExcelファイルをフォルダ「フォームの回答」ID = 0B-eAmBjlnU16YTJIVVFpMjJoTzQに入れなければなりません。 ワーキング今
、列2 & 15と、新しく作成されたに移動(スプレッドシートの変更、編集、フォーム提出の場合)
function test_downloadXLS() {
var fileId = SpreadsheetApp.openById("ID").getId();
downloadXLS(fileId);
var range = SpreadsheetApp.getActiveSheet().getRange('A2:DI2');
var files = DriveApp.getRootFolder().getFiles();
while (files.hasNext()) {
var file = files.next();
var destination = DriveApp.getFolderById("0B-eAmBjlnU16YTJIVVFpMjJoTzQ");
destination.addFile(file);
var pull = DriveApp.getRootFolder();
pull.removeFile(file);
range.clear()
}
}
/**
* Downloads spreadsheet with given file id as an Excel file.
* Uses Advanced Drive Service, which must be enabled.
* Throws if error encountered.
*
* From https://stackoverflow.com/a/27281729/1677912
*
* @param {String} fileId File ID of Sheets file on Drive.
*/
function downloadXLS(fileId) {
var file = Drive.Files.get(fileId);
var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];
var options = {
headers: {
Authorization:"Bearer "+ScriptApp.getOAuthToken()
},
muteHttpExceptions : true /// Get failure results
}
var response = UrlFetchApp.fetch(url, options);
var status = response.getResponseCode();
var result = response.getContentText();
if (status != 200) {
// Get additional error message info, depending on format
if (result.toUpperCase().indexOf("<HTML") !== -1) {
var message = strip_tags(result);
}
else if (result.indexOf('errors') != -1) {
message = JSON.parse(result).error.message;
}
throw new Error('Error (' + status + ") " + message);
}
var ss = SpreadsheetApp.openById('16Vv_FqrZyeCmCoK9XAvujVRisa-5m3FabH5uNAKprYc');
var sh = ss.getSheets()[0];// access first sheet (0 indexed)
var row = sh.getLastRow();
var data = sh.getRange(row, 2).getValue();
var row2 = sh.getLastRow();
var data2 = sh.getRange(row, 15).getValue();
var doc = response.getBlob();
DriveApp.createFile(doc).setName(data + "-" + data2 + '.xlsx');
}
// A JavaScript equivalent of PHP’s strip_tags
// from http://phpjs.org/functions/strip_tags/
function strip_tags(input, allowed) {
allowed = (((allowed || '') + '')
.toLowerCase()
.match(/<[a-z][a-z0-9]*>/g) || [])
.join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
return input.replace(commentsAndPhpTags, '')
.replace(tags, function($0, $1) {
return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
});
}
(私がそれを期待したときに手動で起動しないと機能しません)
特定の範囲のみをExcelファイルとしてエクスポートする方法に関する情報が見つかりませんでした(手順2 )私はいくつかの成功と異なるアプローチを試みたが、別の問題に遭遇した。
最初のスプレッドシートと同じヘッダーを持つ2番目のスプレッドシートを作成しました。最初のスプレッドシートでは、私はこの新しいスプレッドシートに新しい行をコピーするには、次のコードを使用します。新しいスプレッドシートで
function initializeTrigger()
var sheet = SpreadsheetApp.getActive();
ScriptApp.newTrigger("myFunction")
.forSpreadsheet(sheet)
.onChange()
.create();
}
function myFunction(e){
Logger.log(e.changeType);
if(e.changeType=='INSERT_ROW'){
var ss = SpreadsheetApp.openById('ID');
var ssd = SpreadsheetApp.openById('ID');
var sourceSheet = ss.getSheetByName('Responses');
var lastrow = sourceSheet.getLastRow();
var sourceData = sourceSheet.getRange(lastrow, 1, 1, 53).getValues();
ssd.appendRow(sourceData[0]);
}
}
、二つ目は、私はこの記事の冒頭で見た元のコードを試してみましたが、そうではありませんワーキング。私は、ここでの問題は、行を追加してエクスポートしてから行を削除するという事実かもしれないと思うので、次回に新しい行がログにコピーされても、新しい行に関して新しいものは見られないでしょうか?
ここでもin this gistというコードを試してみましたが、手動で実行すると動作しますが、新しい行がコピーされるとすぐに動作するトリガーはわかりません。
有効な質問をするには、あなたの試行を見せてください。今のところあなたはコーディングを試みていないようです。 SpreadsheetAppのドキュメントを見てください。 –
ご意見ありがとうございます。私はいくつかの詳細を追加しました – user2748807
私は4つのステップのうちの3つが今働いています。ステップ2はおそらく最も難しいでしょう... – user2748807