例外:ドキュメントにアクセスできません。後でもう一度やり直してください。Google Scripts

Chelcea Claudiu

私は一日中これを修正しようとしてきました、そして私はそれを解決することができません。

問題は、ファイルをコピーした後にファイルを開こうとすると、generatePDF関数にあります。DriveAppはGoogleドキュメントのみをサポートしているため、ドキュメントはWordに変換されているため、開くことができません。私にいくつかの解決策を見つけてください。

テンプレートファイルを開くことができないため、間違っている唯一の関数はgeneratePDF()です。その関数では、participant_row変数を「2」に設定します。これは、少なくとも1人のユーザーに対してのみ機能させたいためです。そのためです。

// Global variables
var PDF_FOLDER_ID = "1OiCzqoHChrBoPKBo2n8rf-xhpc71S86G";
var TMP_FOLDER_ID = "11mtvVbt4qNUmfWK-zlZHE0W60O14aBB5";
var TEMPLATE_DOCS_FILE_ID = "1fVOB5sdkSGvEhjGYPlJsYiOGgPMcyqGo";
var sheet_name = "Foaie1";
var FIRST_NAME = 2;
var SECOND_NAME = 3;
var email_position = 7;
var PARTICIPANT_ADDRESS = 8;
var PARTICIPANT_CITY = 9;
var PARTICIPANT_POSTAL_CODE = 10;
var PARTICIPANT_COUNTRY = 11;
var PARTICIPANT_ID = 29;
var yesno_position = 30;

// Open spreadsheet
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name).activate();
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

// Get person's email
function get_email(spreadsheet, participant_row)
{
  //                               ROW        , COLUMN
  return spreadsheet.getRange(participant_row, email_position).getValue();
}


// Dont send the same email to the same person
function check_already_sent(spreadsheet, participant_row)
{
  var bool_alreadySentEmail = spreadsheet.getRange(participant_row, yesno_position).getValue();
  if(bool_alreadySentEmail.toString().toUpperCase() == "YES") {
    Logger.log("Skipped " + spreadsheet.getRange(participant_row, email_position).getValue());
    return 1.
  }
  else {
    Logger.log("Sending to " + spreadsheet.getRange(participant_row, email_position).getValue());
    return 0;
  }
}


// Return person's name
function get_name(spreadsheet, participant_row) {
  return spreadsheet.getRange(participant_row, FIRST_NAME).getValue() + " " + spreadsheet.getRange(participant_row, SECOND_NAME).getValue();
}


// Generate custom PDF for every person
function generatePDF(spreadsheet, participant_row)
{
  participant_row = 2;
  // Get files
  var pdfFolder = DriveApp.getFolderById(PDF_FOLDER_ID);
  var tmpFolder = DriveApp.getFolderById(TMP_FOLDER_ID);
  var templateDocs = DriveApp.getFileById(TEMPLATE_DOCS_FILE_ID);

  // Make temporary files in the tmpFolder
  var newTMP_File = templateDocs.makeCopy(tmpFolder);

  // Change values
  var opened_Docs = DocumentApp.openById(newTMP_File.getId());
  var get_body = opened_Docs.getBody();

  // Execute replacements
  get_body.replaceText("{{First Name}}",spreadsheet.getRange(participant_row, FIRST_NAME));
  get_body.replaceText("{{Second Name}}",spreadsheet.getRange(participant_row, SECOND_NAME));
  get_body.replaceText("{{ID}}",spreadsheet.getRange(participant_row, PARTICIPANT_ID));
  get_body.replaceText("{{Address}}",spreadsheet.getRange(participant_row, PARTICIPANT_ADDRESS));
  get_body.replaceText("{{City}}",spreadsheet.getRange(participant_row, PARTICIPANT_CITY));
  get_body.replaceText("{{Postal Code}}",spreadsheet.getRange(participant_row, PARTICIPANT_POSTAL_CODE));
  get_body.replaceText("{{Country}}",spreadsheet.getRange(participant_row, PARTICIPANT_COUNTRY));


  // Create PDF with the modified temporary file
  var newPDF = newTMP_File.getAs(MimeType.PDF);
  var savedPDF_File = pdfFolder.createFile(newPDF).setName("JEE_Summer_Conference_Invoice " + FIRST_NAME + "_" + SECOND_NAME);
}


// Check for duplicate entry in the excel sheet
function count_duplicate(spreadsheet, participant_row)
{
  var duplicates = 0;
  var counter = 1;
  for(var i = participant_row; i >=0 ; i--)
    if(get_email(spreadsheet, participant_row).localeCompare(get_email(spreadsheet, participant_row - counter)) == 0) {
      duplicates++;
      counter++;
    }
    else
      break;
  
  return duplicates;
}

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Send PDFs').addItem('SEND PDFs','main').addToUi();
}

// Main function
function main()
{
  // GET THE INDEX OF THE LAST ROW
  var last_row = spreadsheet.getLastRow();

  // Generate PDF for every participant
  for(var participant_row = 2; participant_row <= last_row; ++participant_row) {
  
    // Check if we didn't already send an email to that person
    if(check_already_sent(spreadsheet, participant_row) == 1) {
        continue;
    }

    // Check duplicate
    if(participant_row < last_row && get_email(spreadsheet, participant_row).localeCompare(get_email(spreadsheet,participant_row+1)) == 0)
      continue;

    // Generate PDF
    generatePDF(spreadsheet, participant_row);

    // Mark the person as someone who has received the email to not receive another one
    spreadsheet.getRange(participant_row, yesno_position).setValue("YES");

    // Mark duplicates as sent as well
    var nr_of_duplicates = count_duplicate(spreadsheet, participant_row);
    for(var i=1; i<=nr_of_duplicates;i++) {
        var get_value = spreadsheet.getRange(participant_row,yesno_position).getValue();
        spreadsheet.getRange(participant_row - i, yesno_position).setValue(get_value);
    }
  }
}
iansedano

docxファイルをGoogleドキュメントに変換する方法。

このためには、Drive AdvancedServiceを有効にする必要があります。これにより、最新のv3ではなく、ドライブのv2が有効になることに注意してください。

ここに画像の説明を入力してください

サービスの横にある+ボタンを押します

ここに画像の説明を入力してください

Drive API、v2を選択し、識別子でその「ドライブ」を確認します。その後、以下のコードを実行できるはずです。

function convertDocx(id) {
  // Using the normal drive service to get the blob (binary data)
  const docx = DriveApp.getFileById(id)
  const blob = docx.getBlob()

  // Creating a new file
  const newDoc = Drive.newFile()
  // Setting the title
  newDoc.title = "New Converted Document"
  // Converting the docx file to GDoc
  const newGDoc = Drive.Files.insert(newDoc, blob, {convert:true})
  // Return the new id
  return newGDoc.id
}


function test(){
  console.log(convertDocx("[THE DOCUMENT ID]"))
}

このスクリプトは、docxファイルID(含まれているフォルダーではなくファイルIDである必要があります)を取得し、それをGoogleドキュメントに変換して、新しいIDを返します。

次にそれをPDFにエクスポートするには、次のようにします。

function convertToPdf(id) {
    docBlob = DocumentApp.openById(id).getAs('application/pdf');
    DriveApp.createFile(docBlob);
}

リファレンス

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

MSTeamsチャットボット-アプリにアクセスできません。もう一度やり直してください

セキュリティトークンが一致しませんでした。セキュリティ違反を防ぐために、リクエストは中止されました。もう一度やり直してください

GoogleAnalyticsにアクセスする際の「リソースが利用できません。後でもう一度やり直してください」というエラー

「アップロードできませんでした。もう一度やり直してください。」GooglePlayコンソールのエラー

PayuMoney Web Integration with PHPで、success.phpページにアクセスしていますが、「無効なトランザクションです。もう一度やり直してください」というメッセージが表示されます。

キャプチャソリューションが正しくありませんでした。もう一度やり直してください

「まだ準備ができていません。後でもう一度やり直してください」のRESTAPIでHTTPステータスコードを選択するにはどうすればよいですか?

PayPalサンドボックス申し訳ありませんが、現時点では機能していないようです。後でもう一度やり直してください

プライベートリンクとプライベートエンドポイントでのAzureCosmosDBエラー「コレクションリストの更新に失敗しました。後でもう一度やり直してください」

チーム:「サインインできませんでした。もう一度やり直してください。」ループ中

エンタープライズアプリがエンタープライズサイトからインストールされない(「---アプリ」をインストールできません後でもう一度やり直してください)

Huaweiプッシュキット:プッシュキットの初期化でスタックしました。後でもう一度やり直してください

'path.scripts'にアクセスできません

Google Scripts For Loop

「投稿が共有されませんでした。もう一度やり直してください」というエラーの解決方法(Google+)

ゾーンには、要求を満たすのに十分なリソースがありません。別のゾーンを試すか、後でもう一度やり直してください

MS Teams:タブ設定を保存できませんでした。もう一度やり直してください

おっと、もう一度やり直してください。はいというメッセージで関数が失敗しました。「シャットダウン」を返すはずだったのに「はい」を返しました

ログイン試行は成功しませんでした。もう一度やり直してください。-Visual Studio 2015

PayPalクレジットカード取引エラー:支払いに失敗しました。システムエラー。後でもう一度やり直してください

APIが応答を返したときに「ログインに失敗しました。もう一度やり直してください」というメッセージを角度付きで表示する方法

特定のSQLをデバッグする方法により、BigQueryで「リクエストがタイムアウトしました。もう一度やり直してください」という結果になることがあります。

Wordpress-メディアギャラリーアップロード中にエラーが発生しました。後でもう一度やり直してください

Google Scriptsにアクセスしようとすると、「このページにアクセスできません」というエラーが表示されます

「react-scripts」:「^ 4.0.3」がインストールされていますが、それでもCssモジュールを使用できません

予期しないエラーが発生しました。後でもう一度やり直してください。(738369013)PlayStoreに送信する場合

Linux-SSH-アクセスが拒否されました。もう一度やり直してください

Django:EMAIL_HOSTにipv4を強制しますか?(GMail:421、 '4.7.0後でもう一度やり直して、接続を閉じてください。')

Drupal jQueryの依存関係により、「Webサイトで予期しないエラーが発生しました。後でもう一度やり直してください。」というエラーがスローされます。

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    どのように関係なく、それがどのように「悪い」、すべてのSSL証明書でのHttpClientを使用しないように

  3. 3

    Modbus Python Schneider PM5300

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  6. 6

    System.Data.OracleClient.OracleException:ORA-06550:行1、列7:

  7. 7

    インデックス作成時のドキュメントの順序は、Elasticsearchの検索パフォーマンスを向上させますか?

  8. 8

    scala.xmlノードを正しく比較する方法は?

  9. 9

    NGX-ブートストラップ:ドロップダウンに選択したアイテムが表示されない

  10. 10

    Elasticsearch - あいまい検索は、提案を与えていません

  11. 11

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  12. 12

    Elasticsearchの場合、間隔を空けた単語を使用したワイルドカード検索

  13. 13

    Elasticsearchでサーバー操作を最適化:低いディスク透かしに対処する

  14. 14

    ラベルとエントリがpythontkinterに表示されないのはなぜですか?

  15. 15

    変数値を含むElasticSearch検索結果

  16. 16

    グラフ(.PNG)ファイルをエクスポートするZabbix

  17. 17

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  18. 18

    Audacity:プロジェクトではなく、サウンドファイルのみを保存します

  19. 19

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  20. 20

    Excelは、メモ帳データの複数の列を1つの列として解釈します

  21. 21

    ブラウザがHTMLテンプレートを解釈しない

ホットタグ

アーカイブ