我在Google App脚本中有一个简单的脚本,该脚本从google工作表(RSS-Feeds)的单元格中获取字符串值,并保存(更新)一些.rtf-文档。经过一些同步过程和宏帮助程序后,这些文本显示在滚动的LED栏上,可以通过WIFI更新。
这有效,但是我没有设法设置.rtf-文档中的文本格式。
我尝试过RichTextValueBuilder,该方法可以很好地为Google电子表格中的文本添加格式,但是对.rtf的文本进行格式设置却不成功...另一个实验是使用html标签。这在rtf文件中带来了所需的格式化效果,但是led栏的应用程序无法处理它。
有人知道在这种情况下如何帮助菜鸟吗?在此先多谢!
function dataLED() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ass = ss.getSheetByName("Newsticker");
//VALUES FROM CELLS IN GOOGLE SHEETS
var valuesLedBar = ass.getRange(2, 10, 4, 1).getValues();
var vak1 = valuesLedBar[0];
var vak2 = valuesLedBar[1];
var vak3 = valuesLedBar[2];
var vak4 = valuesLedBar[3];
var marge = ass.getRange("B16").getValue();
//SAVE IN .RTF-FILES (IN FOLDER dataLEDbar)
var folders = DriveApp.getFoldersByName("dataLEDbar");
if (folders.hasNext()) {
var folder = folders.next();
saveData(folder, "0808003135589.rtf", vak1);
saveData(folder, "0808003133343.rtf", vak2);
saveData(folder, "0808003136619.rtf", vak3);
saveData(folder, "0808003135964.rtf", vak4);
saveData(folder, "0808182631849.rtf", "Gewinnmarge diesen Monat:" + marge);
}
else {null}
};
//-------------------------------------------------SAVE
function saveData(folder, fileName, contents) {
var children = folder.getFilesByName(fileName);
var file = null;
if (children.hasNext()) {
file = children.next();
file.setContent(contents);
} else {
file = folder.createFile(fileName, contents);
}
}
application/rtf
的每个文件。我可以像上面那样理解。如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
在此答案中,为了实现您的目标,我使用了RichTextApp的Google Apps脚本库。
请安装RichTextApp的GAS库。您可以在here中查看如何安装。
请复制并粘贴以下示例脚本,然后运行myFunction
。这样,当该文件夹存在时,将在该文件夹中创建4个RTF文件。
function myFunction() {
const filenames = ["0808003135589.rtf", "0808003133343.rtf", "0808003136619.rtf", "0808003135964.rtf"];
const folderName = "dataLEDbar";
const sheetName = "Newsticker";
const folders = DriveApp.getFoldersByName(folderName);
const folder = folders.hasNext() ? folders.next() : DriveApp.getRootFolder();
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetName);
for (let i = 2; i <= 5; i++) {
const range = sheet.getRange("J" + i);
const doc = DocumentApp.create("tempDocument");
const docId = doc.getId();
RichTextApp.SpreadsheetToDocument({range: range, document: doc});
doc.saveAndClose();
const url = "https://docs.google.com/feeds/download/documents/export/Export?exportFormat=rtf&id=" + docId;
const res = UrlFetchApp.fetch(url, {headers: {authorization: "Bearer " + ScriptApp.getOAuthToken()}});
folder.createFile(res.getBlob().setName(filenames[i - 2]));
DriveApp.getFileById(docId).setTrashed(true);
}
}
[不确定,这是否对任何人都有用,但是我发现了可能的解决方法。欢迎提供更好的解决方案,因为这看起来很丑陋,并且在每种情况下都行不通...
RTF文件是预先格式化的,我只是在Google工作表中添加了文本,而不是替换RTF的内容和格式。
function appendText() {
//Search Params for File and Folder
var fileName = "testRtf.rtf";
var folderName = "dataLEDbar";
//New Text in .rtf
var content = "NEWTEXT";
// get list of folders with matching name
var folderList = DriveApp.getFoldersByName(folderName);
if (folderList.hasNext()) {
//folder
var folder = folderList.next();
// search for files with matching name
var fileList = folder.getFilesByName(fileName);
if (fileList.hasNext()) {
//file
var file = fileList.next();
//get rtf-file as string from Blob
var rtfContent = file.getBlob().getDataAsString();
//split Blob
var splitBlob = rtfContent.split("\\");
var lenSplitBlob = splitBlob.length;
//and replace last array with new text
splitBlob[lenSplitBlob - 1] = "cf2 " + content + "}";
//new Blob
var newBlob = splitBlob.toString().replace(/,/g, '\\');
//append text to already formatted .rtf-File
file.setContent(newBlob);
} else {
// file not found
null
}
}
}