แสดงรายการไฟล์ Google Drive จากโฟลเดอร์ที่กำหนดบนหน้าเว็บ

ฉันกำลังมองหาวิธีแสดงรายการไฟล์ทั้งหมดในโฟลเดอร์ Google Drive โดยเฉพาะ ซึ่งจะอัปเดตรายการโดยอัตโนมัติและให้ทุกคนสามารถดูได้ ฉันพบบทความจำนวนมากที่สร้างสเปรดชีตเพื่อแสดงรายการ แต่ไม่ได้อัปเดต ฉันเข้าใจ JavaScript ได้เล็กน้อยว่าฉันพยายามแก้ไขโค้ดอื่น ๆ บางส่วนโดยไม่เกิดประโยชน์ นี่คือสิ่งที่ฉันได้ทำ

ฉันสร้างไฟล์ Google Apps Script

function doGet(e){
return HtmlService.createHtmlOutputFromFile('list.html');}

และภายใน list.html

<!DOCTYPE html>
<html>
  <head>
  <script type="text/javascript">
    var dir = "SpinFest2016 KPDS Clips"

    function listFilesInFolder(dir) {

      var folder = DriveApp.getFoldersByName(dir).next();
      var contents = folder.getFiles();
      var file;
      var name = [];
      var date = [];
      var desc = [];

      for (var i = 0; i < contents.length; i++) {

      file = contents[i];

      name[i] = file.getName();
      date[i] = file.getDateCreated();
      desc[i] = file.getDescription();

      };
    };
  </script>
  </head>
      <table style ="width: 100%">
      <tr>
          <th>이름</th>
          <th>제출일</th>
          <th>비고</th>
      <tr>
          <td><p id="name"></p></td>
          <td><p id="date"></p></td>
          <td><p id="desc"></p></td>
      </tr>
      <script type="text/javascript">
          document.getElementById("name").innerHTML = name;
      </script>

      </table>
  </body>
</html>

ฉันพยายามแสดงรายการเฉพาะชื่อไฟล์ก่อน แต่ก็ไม่ได้ผล และฉันไม่รู้ว่าเกิดอะไรขึ้น หากคุณสามารถชี้ให้ฉันเห็นว่าส่วนไหนผิดและฉันต้องทำอะไร ฉันจะขอบคุณมากที่คุณช่วยเหลือ หากมีวิธีอื่นที่ดีกว่า (ไม่เพียงแต่ google-apps-script แต่ยังรวมถึงวิธีอื่นในการแสดงรายการไฟล์) ที่ตรงกับเงื่อนไขด้านล่าง ฉันจะขอบคุณมาก

  • แสดงรายการชื่อไฟล์ใน Google Drive
  • ทุกคนที่มีลิงก์สามารถดูรายการได้
  • รายการอัปเดตโดยอัตโนมัติ (ไม่ว่าจะเป็นระยะหรือเมื่อมีการเปลี่ยนแปลงใด ๆ เกิดขึ้น)

person Canor    schedule 14.03.2016    source แหล่งที่มา


คำตอบ (2)


ตามที่เขียนไว้ doGet ของคุณมอบหน้า HTML ให้กับเว็บเบราว์เซอร์โดยมีโค้ด JS บางส่วนฝังอยู่ในนั้น ซึ่งเบราว์เซอร์จะพยายามดำเนินการ และล้มเหลว เนื่องจากเว็บเบราว์เซอร์ไม่มีแนวคิดเกี่ยวกับ DriveApp; สามารถเรียกใช้ JavaScript ไม่ใช่ Apps Script

เป็นไปได้ที่จะเรียกใช้โค้ด Apps Script ในสคริปต์ที่ฝังอยู่ในหน้า ให้บริการโดย doGet แต่ไวยากรณ์ต้องใช้เวลาสักพักเพื่อทำความคุ้นเคย

สำหรับเพจง่ายๆ เช่นของคุณ ฉันจะสร้าง HTML ทั้งหมดภายในฟังก์ชัน doGet และให้บริการนั้น ดูตัวอย่างของฉัน

มีอีกหนึ่งปัญหากับรหัสของคุณ: folder.getFiles() ส่งคืน ตัววนซ้ำไฟล์ ไม่ใช่อาร์เรย์ นี่คือสิ่งที่คุณวนซ้ำโดยใช้วิธี hasNext และถัดไป ดังที่แสดงด้านล่าง

function doGet(e) {
  var template = '<table style ="width: 100%"><tr><th>name</th><th>Date</th><th>Description</th></tr>APPS_SCRIPT_CONTENT</table>';
  var dir = 'SpinFest2016 KPDS Clips';
  var folder = DriveApp.getFoldersByName(dir).next();
  var contents = folder.getFiles();
  var file, name, date, desc, list = []; 
  while (contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    date = file.getDateCreated();
    desc = file.getDescription();
    list.push('<tr><td>' + name + '</td><td>' + date + '</td><td>' + desc + '</td></tr>');
  }
  var output = HtmlService.createHtmlOutput(template.replace('APPS_SCRIPT_CONTENT', list.join('')));
  return output.setTitle('Directory List').setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

สิ่งนี้จะให้บริการไฟล์ HTML แบบคงที่พร้อมสแน็ปช็อตปัจจุบันของไดเร็กทอรี หากผู้ใช้โหลดซ้ำ พวกเขาจะได้รับสำเนาที่ใหม่กว่า ไฟล์จะไม่อัพเดตด้วยตัวเองหากเนื้อหาไดเร็กทอรีมีการเปลี่ยนแปลง ฉันไม่คิดว่าสิ่งนี้จะเกิดขึ้นได้บนแพลตฟอร์มนี้ ด้วยสคริปต์ที่รันโค้ด Apps Script เราอาจพยายามอัปเดตเป็นระยะๆ แต่ดูเหมือนว่าจะใช้งานไม่ได้จริง: เหตุใดจึงต้องเสียโควต้าเวลาดำเนินการ Apps Script ให้กับผู้ใช้ที่เปิดหน้าเว็บของคุณและออกไปเดินเล่น

person Community    schedule 14.03.2016

getFiles() จะส่งกลับ FileIterator อาจไม่มีคุณสมบัติ .length เปลี่ยนการวนซ้ำเป็น while-loop และตรวจสอบว่าตัววนซ้ำ hasNext เป็น true หรือไม่ ด้วยวิธีนี้มันจะวนซ้ำ นอกจากนี้ ให้ลองเปลี่ยนวิธีที่คุณพุชรายการต่างๆ เข้าไปในอาเรย์ ดูตัวอย่างที่แก้ไขแล้ว หวังว่าจะได้ผล

while (contents.hasNext()){

    file = contents.next();

    name.push(file.getName());
    date.push(file.getDateCreated());
    desc.push(file.getDescription());

};

จะเกิดอะไรขึ้นหลังจากนี้ คุณจะแสดงมันอย่างไรก็ขึ้นอยู่กับคุณ

person adjuremods    schedule 23.03.2016