Đây là những gì tôi đang cố gắng làm: được cung cấp URL tài liệu của Google, tôi muốn nhận ID tài liệu để tạo bản sao trên Google Drive. Tôi biết tôi có thể đạt được điều đó bởi một số regex hoặc thay thế trên URL, nhưng vì có một số hình thức khác nhau để đại diện cho cùng một tài liệu trong một URL, tôi muốn tìm một giải pháp chung chung.Cách dễ nhất để lấy ID tệp từ URL trên Google Apps Script
Hiện nay, đó là tốt nhất mà tôi có thể nghĩ:
function getFileIdFromUrl(url) {
try {
return getDocIdFromUrl(url);
} catch (e) {
return getSpreadsheetIdFromUrl(url);
}
}
function getDocIdFromUrl(url) {
var doc = null;
try {
doc = DocumentApp.openByUrl(url);
} catch (e) {
doc = DocumentApp.openByUrl(url + "/edit");
}
return doc.getId();
}
function getSpreadsheetIdFromUrl(url) {
var spreadsheet = null;
try {
spreadsheet = SpreadsheetApp.openByUrl(url);
} catch (e) {
spreadsheet = SpreadsheetApp.openByUrl(url + "/edit");
}
return spreadsheet.getId();
}
function copy(url) { // may throw an exception if the URL is invalid or private
var id = getFileIdFromUrl(url);
var file = DriveApp.getFileById(id);
file.makeCopy().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
}
Vấn đề là giải pháp của tôi chỉ bao gồm tài liệu, bảng tính, tôi muốn làm điều tương tự với bất kỳ tập tin tải lên, ví dụ:
https://docs.google.com/file/d/0B-FYu_D7D7x4REdtRVEzVH0eU0/edit
Nói tóm lại, tôi muốn một cái gì đó như thế:
DriveApp.getFileByUrl(url).makeCopy();
Có ai biết nếu có thể không?
Bất kỳ giải pháp an toàn nào để trích xuất ID tệp từ URL tệp cũng sẽ phù hợp với tôi.
Cảm ơn
Tôi đã thực hiện một số thử nghiệm và có vẻ tuyệt vời! Cảm ơn bạn. Chỉ cần một câu hỏi: con số này (25) thực sự là chiều dài tối thiểu cho id tài liệu google? – Renato
Đây không phải là tài liệu ở bất cứ đâu. Tôi chỉ lấy một bó URL từ các tệp khác nhau, nhìn vào tệp ngắn nhất và giảm giá chỉ trong trường hợp :) Cũng đã kiểm tra rằng không có phần nào khác của url từ xa gần 25 ký tự thẳng (không có dấu chấm ở giữa) vv), do đó, nó sẽ không gây nhầm lẫn với một phần khác. –
Sử dụng [regex được đề xuất bởi aquadeep] (http://stackoverflow.com/a/31201136/1404066) ít có khả năng tạo ra một kết quả không mong muốn. Sau đó, sử dụng (nhóm) để trích xuất chỉ phần ID của regex: url.match (/ \/d \/(. {25,}) \ //) [1]; – Kenigmatic