10

Tôi cảm thấy giống như một tổng số đăng bài ở đây. Tôi biết CSS, HTML và XML khá tốt nhưng luôn tránh JS. Tôi biết rất ít javascript và gần đây đã bắt đầu một khóa học Lynda.com để bắt kịp. Xin lỗi vì sự thiếu hiểu biết của tôi. Vì vậy, tôi thực sự đang gặp khó khăn khi tìm hiểu về Google Apps Script. Rõ ràng, tôi cần phải học JS trước khi tôi có thể hiểu được nó.Kịch bản để tự động tạo một bản sao của Tài liệu Google để chỉnh sửa

Trường tôi làm việc cho (5000 sinh viên) đã thiết lập một chương trình học trực tuyến. Tôi tạo ra các chương trình giảng dạy dưới hình thức hàng ngàn bảng tính tài liệu google. Các trang tính này được liên kết trên các trang web khác nhau.

Vấn đề chúng ta đang gặp phải là khi sinh viên mở tài liệu, họ phải tạo một bản sao của họ trước khi họ có thể chỉnh sửa chúng (tất nhiên tôi không muốn họ có thể chỉnh sửa bản gốc). Điều này thực sự khiến cho sinh viên sử dụng trình duyệt trên máy tính bảng của họ khi tạo bản sao trong Google Documents thực sự không hoạt động tốt khi sử dụng giao diện người dùng trên máy tính để bàn trên thiết bị di động.

Tôi biết loại điều này có thể được tự động hóa bằng tập lệnh. Tôi đã xem here, và thấp và nhìn, nó hoạt động! Tôi đang pissing quần của tôi với niềm vui như tôi đã được tìm kiếm các chức năng như vậy trong ba năm. (Vâng, tôi biết điều đó thật đáng buồn).

Vì vậy, những gì tôi yêu cầu là, mọi người sẽ sẵn sàng giúp đỡ một con số noob cách điều chỉnh mã này để sinh viên nhấp vào một nút trên một bài học trên trang web và tự động tạo và mở một bản sao của trang tính trong một tab mới?

/** 
* Copy an existing file. 
* 
* @param {String} originFileId ID of the origin file to copy. 
* @param {String} copyTitle Title of the copy. 
*/ 
function copyFile(originFileId, copyTitle) { 
    var body = {'title': copyTitle}; 
    var request = gapi.client.drive.files.copy({ 
    'fileId': originFileId, 
    'resource': body 
    }); 
    request.execute(function(resp) { 
    console.log('Copy ID: ' + resp.id); 
    }); 
} 

Chi tiêu cả ngày hôm qua học Javascript, tôi vẫn còn một chặng đường dài để đi. Không chắc tôi sẽ mất bao lâu để có thể tự mình hình dung ra điều này.

+1

Và câu hỏi của bạn chính xác là gì? – PeeHaa

+0

Về cơ bản, cần chức năng này để thực hiện bằng cách nhấp vào nút và nhận tài liệu để mở trong tab mới. Tìm kiếm người đủ loại để thích ứng với mã. – user1798533

+0

Đây không phải là mã Apps Script. Bạn đã cố gắng để tìm hiểu nó ở tất cả? (trước khi yêu cầu ai đó viết nó cho bạn) –

Trả lời

12

Bạn chắc chắn có thể thực hiện việc này với Apps Script. Chỉ mất một vài dòng. Trong thực tế, bạn có thể sử dụng chỉ là phiên bản tôi đã viết dưới đây.

Dưới đây là làm thế nào tôi sẽ làm điều đó -

  1. Đảm bảo bạn tài liệu gốc được ít nhất đọc kích hoạt cho các folks sẽ được truy cập vào nó.

    Access rights

  2. Grab các fileId từ URL -

    enter image description here

  3. Viết web app trong Apps Script với đoạn mã sau -

    function doGet(e) { 
        //file has to be at least readable by the person running the script 
        var fileId = e.parameters.fileId; 
        if(!fileId){ 
        //have a default fileId for testing. 
        fileId = '1K7OA1lnzphJRuJ7ZjCfLu83MSwOXoEKWY6BuqYitTQQ'; 
        } 
        var newUrl = DocsList.getFileById(fileId).makeCopy('File copied to my drive').getUrl(); 
        return HtmlService.createHtmlOutput('<h1><a href="'+newUrl+'">Open Document</a></h1>'); 
    } 
    
  4. Triển khai nó để chạy là người truy cập ứng dụng.

    deploy settings

Một điều quan trọng cần ghi nhớ là một ứng dụng web được xây dựng bởi Apps Script không thể ép buộc mở một cửa sổ mới tự động. Thay vào đó, chúng tôi có thể hiển thị liên kết có thể nhấp vào tài liệu ở chế độ chỉnh sửa.

Bạn có thể nhìn thấy nó trong hành động ở đây (sẽ tạo ra một số tập tin dummy) -

https://script.google.com/macros/s/AKfycbyvxkYqgPQEb3ICieywqWrQ2-2KWb-V0MghR2xayQyExFgVT2h3/exec?fileId=0AkJNj_IM2wiPdGhsNEJzZ2RtZU9NaHc4QXdvbHhSM0E

Bạn có thể kiểm tra điều này bằng cách đặt ở riêng fileId của bạn.

4

Kể từ DocsList bị phản đối, hiện nay bạn có thể tạo một bản sao của một tập tin bằng cách sử dụng đoạn mã sau:

File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder); 

nơi fileId có thể thu được như được giải thích trong answer bởi Arun Nagarajan.

Các vấn đề liên quan