- Откройте ваш файл и выберите "Инструменты"
- Выберите "Редактор скриптов"
- В появившемся окне вставьте первый скрипт (JS)
- Создайте на своем диске папку, куда будут складываться файлы
- Перейдите в новую папку
- Скопируйте в адресной строке ID папки (выглядит он примерно так 1jaST3NoIg63d0x0A1K7ppje8ZTjCWvIP)
- В функции saveFile замените значение ID на свой
- Нажмите иконку "Сохранить проект"
- Нажмите плюсик напротив "Файлы", чтобы добавить файл
- Выберите HTML
- В качестве название файла уаажите UploadFile
- Вставьте вторую часть кода (HTML)
- Нажмите иконку "Сохранить проект"
- Вернитесь обратно в свой файл и перезагрузите страницу
- Через пару секунд в верхнем меню появится пункт "Прикрепить файл"
- Выберите ячейку, куда будет вставляться файл
- Нажмите "Прикрепить файл" и загрузите файл в открытвшемся окне
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Прикрепить файл')
.addItem('Прикрепить', 'openAttachmentDialog')
.addToUi();
}
function openAttachmentDialog() {
const html = HtmlService.createHtmlOutputFromFile('UploadFile');
const ui = SpreadsheetApp.getUi();
ui.showModalDialog(html, 'Прикрепить файл');
}
function saveFile({data, mimeType, fileName}) {
const id = '1jaST3NoIg63d0x0A1K7ppje8ZTjCWvIP';
const source = Utilities.base64Decode(data);
const blob = Utilities.newBlob(source, mimeType, fileName);
const folder = DriveApp.getFolderById(id);
const file = folder.createFile(blob);
const formula = `hyperlink("${file.getUrl()}";"${file.getName()}")`;
const activeSheet = SpreadsheetApp.getActiveSheet();
const selection = activeSheet.getSelection();
const cell = selection.getCurrentCell();
cell.setFormula(formula);
return file.getId();
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
</head>
<script>
function getFiles() {
const uploadButton = document.getElementById('uploadButton');
uploadButton.disabled = true;
const progressText = document.getElementById('progress');
const {files} = document.getElementById('files');
let uploadCompletedCount = 0;
const showProgress = (message) => {
progressText.append(message || `Загрузка файла ${uploadCompletedCount + 1}/${files.length}`);
};
showProgress();
Array.prototype.forEach.call(files, ({name: fileName}, index) => {
const fr = new FileReader();
fr.onload = ({target}) => {
const [ext, data] = target.result.split(',');
const mimeType = ext.match(/:(\w.+);/)[1];
google.script.run.withSuccessHandler((id) => {
uploadCompletedCount++;
if (uploadCompletedCount >= files.length) {
showProgress('Загрузка завершена');
google.script.host.close();
}
else{
showProgress();
}
})
.saveFile({fileName, mimeType, data});
};
fr.readAsDataURL(files[index]);
});
}
</script>
<body>
<!-- <input type="file" name="upload" id="files" multiple/> -->
<input type="file" name="upload" id="files" />
<input type='button' id="uploadButton" value='Загрузить' onclick='getFiles()' class="action" />
<br />
<br />
<div id="progress"> </div>
</body>
</html>