使用Google Apps脚本将电子表格中的单个工作表另存为特定文件夹中的pdf

时间:2016-09-25 18:19:53

标签: google-apps-script

我正在使用Google电子表格来准备发票,并且正在寻找一个简单的脚本,用于保存发票所在的工作表,在发票中"用于构建存档的文件夹。 我借了"来自Stackoverflow和youtube上众多贡献者的代码,并提出了一个有效的代码。我不得不将发票复制到新创建的电子表格中,因为似乎无法从类型电子表格中的单个工作表创建pdf。我还必须使用一段代码将pdf从根目录移动到"发票"夹 我唯一无法解决的是第6行创建的电子表格包含2张。一个空的和一个正确复制的。创建的pdf因此alsa有2张纸,一张空纸和一张正确纸。 任何人都知道如何解决这个问题? 顺便说一下,有时需要几分钟才能在文件夹中显示pdf。

以下是代码

extension UISearchBar {
    /// Return text field inside a search bar
    var textField: UITextField? {
        let subViews = subviews.flatMap { $0.subviews }
        guard let textField = (subViews.filter { $0 is UITextField }).first as? UITextField else { return nil
        }
        return textField
    }
}

1 个答案:

答案 0 :(得分:4)

我不确定您是否遇到过这段代码,但您可以试试这个:

function checkSheet() {
var sheetName = "Sheet1";
var folderID = "FOLDER_ID"; // Folder id to save in a folder.
var pdfName = "Invoice "+Date();

var sourceSpreadsheet = SpreadsheetApp.getActive();
var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
var folder = DriveApp.getFolderById(folderID);

//Copy whole spreadsheet
var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))

//delete redundant sheets
var sheets = destSpreadsheet.getSheets();
for (i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetName() != sheetName){
destSpreadsheet.deleteSheet(sheets[i]);
}
}

var destSheet = destSpreadsheet.getSheets()[0];
//repace cell values with text (to avoid broken references) 
var sourceRange = sourceSheet.getRange(1,1,sourceSheet.getMaxRows(),sourceSheet.getMaxColumns());
var sourcevalues = sourceRange.getValues();
var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
destRange.setValues(sourcevalues);

//save to pdf
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
var newFile = folder.createFile(theBlob);

//Delete the temporary sheet
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}

<强> 注意 : 在测试此代码时,它会立即创建pdf,但可能取决于发票模板。

参考文献:

希望这有帮助!

更新

enter image description here enter image description here