繁体   English   中英

是否可以通过谷歌表格中的谷歌应用脚本删除 html 标签?

[英]Is is possible to remove html tags by google app script in google sheet?

我对谷歌应用脚本很陌生

所以我正在做一些事情,比如通过谷歌应用脚本使用这个链接将谷歌日历的事件导入谷歌表格

https://www.automatedstuff.com/tutorials/how-to-import-google-calendar-data-into-google-sheets-automatically/

以下代码在这里

function export_gcal_to_gsheet(){

// Replace "examples@gmail.com" with your own Google Calendar E-mail adress.
var mycal = "examples@gmail.com";
var cal = CalendarApp.getCalendarById(mycal);

// Optional variations on getEvents
// var events = cal.getEvents(new Date("January 3, 2014 00:00:00 CST"), new Date("January 14, 2014 23:59:59 CST"));
var events = cal.getEvents(new Date("January 1, 2022 00:00:00 UTC"), new Date("December 31, 2022 23:59:59 UTC"));
  
var sheet = SpreadsheetApp.getActiveSheet();
// Uncomment this next line if you want to always clear the spreadsheet content before running - Note people could have added extra columns on the data though that would be lost
// sheet.clearContents();  

// Create a header record on the current spreadsheet in cells A1:N1 - Match the number of entries in the "header=" to the last parameter
// of the getRange entry below
var header = [["Event Title", "Event Description", "Event Start", "Event End", "Calculated Duration","Date Created", "Last Updated", "Created By"]]
var range = sheet.getRange(1,1,1,8);
range.setValues(header);

// Loop through all calendar events found and write them out starting on calulated ROW 2 (i+2)
for (var i=0;i<events.length;i++) {
var row=i+2;
var myformula_placeholder = '';
  
// Matching the "header=" entry above, this is the detailed row entry "details=", and must match the number of entries of the GetRange entry below
// NOTE: I've had problems with the getVisibility for some older events not having a value, so I've had do add in some NULL text to make sure it does not error
var details=[[events[i].getTitle(), events[i].getDescription(),events[i].getStartTime(), events[i].getEndTime(), myformula_placeholder, events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getCreators()]];
var range=sheet.getRange(row,1,1,8);
range.setValues(details);


// Writing formulas from scripts requires that you write the formulas separate from non-formulas
// Write the formula out for this specific row in column 7 to match the position of the field myformula_placeholder from above: foumula over columns F-E for time calc
var cell=sheet.getRange(row,5);
cell.setFormula('=mod((D' +row+ ')-(C'+row+'),1)');
cell.setNumberFormat('[h]:mm');

}
}

我以前试过几次,一切都很好。

但是不知何故,当我将描述数据从谷歌日历导入到谷歌表格时,它会随机导入一些包含 html 标签的数据(谷歌日历)

12345678
90ppl
apple
no child (tbc)
baby
deposit paid
local

到这个(谷歌表)

<u></u>12345678<br>90ppl<br>apple<br>no child (tbc)<br>baby<br>deposit paid<br>local<u></u>

所以我想弄清楚为什么会发生这种情况?

还有什么方法可以通过在前面的代码完成之前不使用 google 工作表中的正则表达式公式来删除 html 标签,就像字面意义上的代码一样?

修改点:

  • 在Calendar中的事件描述中,富文本输入为HTML数据。 我认为你的问题的原因是由于这个。 关于Also is there any way to remove HTML tags by not using regex formula in google sheet before preceding codes was finished like literally just by code? ,在此答案中,正则表达式用于 Google Apps 脚本,而不是 Google 电子表格的内置函数。
  • 在您的脚本中,循环中使用了setValuessetFormulaset number format 在这种情况下,工艺成本会变高。 参考

当这些点反映在你的脚本中时,它就变成了下面这样。

修改脚本:

function export_gcal_to_gsheet() {
  var mycal = "examples@gmail.com";
  var cal = CalendarApp.getCalendarById(mycal);
  var events = cal.getEvents(new Date("January 1, 2022 00:00:00 UTC"), new Date("December 31, 2022 23:59:59 UTC"));
  var values = [["Event Title", "Event Description", "Event Start", "Event End", "Calculated Duration", "Date Created", "Last Updated", "Created By"]];
  for (var i = 0; i < events.length; i++) {
    var description = events[i].getDescription().replace(/<br>|<\/li>/g, "\n").replace(/<.+?>/g, "").trim();
    values.push([events[i].getTitle(), description, events[i].getStartTime(), events[i].getEndTime(), null, events[i].getDateCreated(), events[i].getLastUpdated(), events[i].getCreators()]);
  }
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
  sheet.getRange(2, 5, sheet.getLastRow() - 1).setFormula('=mod((D2)-(C2),1)').setNumberFormat('[h]:mm');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM