3

.csv を Google ドキュメント リストに配置せずに、ローカル ハード ドライブに保存されている .csv ファイルから Google スプレッドシートにデータを直接アップロードするスクリプトを作成しようとしています。

Googleスプレッドシートにはこれを行うための機能がすでにあることを認識していますが、ここでの最終的なゲームは、ローカルドライブの.csvからスクリプトに毎日データをアップロードし、それを並べ替え、必要な情報のみを返すことができるようにすることですスプレッドシート。

現在、スプレッドシートで .csv データを文字列として返すことにより、readDSR (アップロードされた .csv を読み取る必要があります) 関数をテストしようとしています。しかし、それはうまくいきません。これについて何か助けていただければ幸いです。私のコードは以下です

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = 
      [ {name:"Read Data", functionName:"readRows"},
        {name:"Upload DSR", functionName:"findDSR()"} ];

  sheet.addMenu("Du-par's", entries);
};

function findDSR() {
  var openFile = UiApp.createApplication();
  var formContent = openFile.createVerticalPanel();
  formContent.add(openFile.createFileUpload().setName("DSRfile"));
  formContent.add(openFile.createSubmitButton("Start Upload"));
  var form = openFile.createFormPanel();
  form.add(formContent);
  openFile.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(openFile);

}

function readDSR(e) {
  DSR = e.parameter.DSRfile;
  csvFile = DSR.getContentAsString();
  var sheet = getActiveSheet();
  var lastRow = sheet.getLastRow()+1;
  var lastCell = sheet.getLastCell("A"+lastRow);
  lastCell.setValue = csvFile;
  }
}

編集、9 月 14 日 22:48

素早い返信ありがとうございます。あなたが私に案内してくれた他の投稿の情報を考慮して、これが私の新しいスクリプトです。なんらかの理由でまだエラーが発生しますが、概念は理解できました。私は取得し続けます

「エラーが発生しました: 予期しないエラーが発生しました。」

これにより、「アップロードが完了しました」というメッセージが表示されるはずです。問題は、スプレッドシート内でスクリプトを実行している可能性がありますか? 問題は「readDSR」機能にあるに違いないと確信しています。

// Create Menu to Locate .CSV
function findDSR(e) {
  var app = UiApp.createApplication();
  var formContent = app.createVerticalPanel();
  formContent.add(app.createFileUpload().setName("DSRfile"));
  formContent.add(app.createSubmitButton("Start Upload"));
  var form = app.createFormPanel();
  form.add(formContent);
  app.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(app);

}

// Upload .CSV file
function readDSR(e)
{
  var DSRload = e.parameter.DSRfile;
  var Doc = DriveApp.createFile("DSRload");

  var app = UiApp.getActiveAplication();

  // Display a confirmation Messege
  var label = app.createLable("File Upload Successful");
  app.add(label);

  DocID = getDocId();
  MakeTranslationDoc = DocID;

  return app();
}
4

2 に答える 2

1

シンプルなUIフォームを使用してドライブにファイルをアップロードし、それを操作したいという共通のテーマですが、GASのこの段階で壊れている可能性があります。回避策は、Drive API を使用してアップロードしたばかりのファイルにアクセスし、そのメカニズムを使用してデータを取得することです。

詳しいやり方はこちらの記事にまとめていますので、よろしければご覧ください。テキストファイルを除いて、あなたと同様の問題であり、問​​題なくcsvファイルに拡張できるはずです。

アップロードされたテキスト ファイルを処理した後、Google ドライブに新しいドキュメントを作成する

それがあなたにとってどのように機能するか教えてください

于 2013-09-14T04:31:48.593 に答える
0

これらの答えは単純な理由で機能しません:fileUploadウィジェットを使用するには、「予期しないエラー」のためのdoGet/doPost Ui デザインの一部である必要があります。

function doGet() {
  var app = UiApp.createApplication();
  var formContent = app.createVerticalPanel();
  formContent.add(app.createFileUpload().setName("DSRfile"));
  formContent.add(app.createSubmitButton("Start Upload"));
  var form = app.createFormPanel();
  form.add(formContent);
  app.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(app);

}

function doPost(e){
  var DSRload = e.parameter.DSRfile;
  var Doc = DriveApp.createFile(DSRload);
  DocID = Doc.getId();
//  MakeTranslationDoc = DocID;
  var app = UiApp.getActiveApplication();

  // Display a confirmation Message
  var label = app.createLabel("File Upload Successful");
  var clickHandler = app.createServerHandler('close');
  app.add(label).add(app.createButton('close this window', clickHandler));
  return app;
}

function close(){
  return UiApp.getActiveApplication().close();
}
于 2013-11-28T17:39:52.337 に答える