Google 脚本将文本格式从 Google 文档复制到电子表格,保持 bold/underlined... 格式
Google script copy text formatted from Google Docs to Spreadsheet keep bold/underlined... format
我有一个 Google 文档,里面有一个文本,我做了一个脚本,这样如果我 select 文本,它将复制到 Google 电子表格中 cell.I 到达复制文本,但我不知道如何保持相同的样式颜色,问题是我不知道如何设置 bold/italic..
这是我目前所做的:
var SPREADSHEET_ID = "....."; // = assign your spreadsheet id to this variable
var SHEET_NAME = "Feuille 1"; // = assign your sheet name to this variable
var COORD_LIGNE = 5 ;
var COORD_COLONNE = 4 ;
function onOpen(e) {
DocumentApp.getUi()
.createMenu('Test')
.addItem('Copier la selection du texte', 'Copy')
.addToUi();
}
function Copy() {
var ss = DocumentApp.getActiveDocument();
var selection = ss.getSelection();
var result = "";
var fontColor, background , font, fontWeight ,TextAlignment ;
var ok_underline, ok_italis , ok_bold, ok_strikethrough ;
//Proceed only if something is selected, otherwise selection will be null >>>> pour voir le style/font/couleur on test pour 1 seul élément
if (selection) {
var elements = selection.getRangeElements();
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
// Only modify elements that can be edited as text; skip images and other non-text elements. ??? on n'a pas fait les cas italique et bold etc. ici >>>>> element.getElement().asText().setUnderline(underline)
// Qui sont des méthodes booleans >>>>>>>>>>>>>>>>>>>>>>>>> isUnderline(offset) isItalic() isBold() isStrikethrough() ???? TextAlignment ne marche pas ???
if (element.getElement().editAsText) {
result += element.getElement().asText().getText();
// get formatting
fontColor = element.getElement().asText().getForegroundColor();
background = element.getElement().asText().getBackgroundColor();
font = element.getElement().asText() .getFontFamily();
fontWeight = element.getElement().asText().getFontSize();
TextAlignment = element.getElement().asText().getTextAlignment();
if(element.getElement().asText().isUnderline() )
ok_underline = 1;
if(element.getElement().asText().isItalic() )
ok_italis = 1;
if(element.getElement().asText().isBold() )
ok_bold = 1;
if(element.getElement().asText().isStrikethrough() )
ok_strikethrough = 1;
}
}
var tss = SpreadsheetApp.openById(SPREADSHEET_ID);
var ts = tss.getSheetByName(SHEET_NAME);
var trange = ts.getRange(COORD_LIGNE, COORD_COLONNE); //la première cellule A1 première ligne + première colonne
trange.setBackground(background).setFontColor(fontColor).setFontFamily(font).setFontSize(fontWeight).setValue(result);
/** on va bien encadrer la valeur dans la cellule >>>> on va redimensioner la colonne **/
/** vérification pour mettre text underline / italic / bold / strikethrough **/
if ( ok_underline )
if ( ok_italis )
if ( ok_bold )
if ( ok_strikethrough )
/** i don't know how to set it in fonction of the ok variable **/
ts.autoResizeColumn(COORD_COLONNE);
}
}
任何想法都很棒!非常感谢。
编辑:非常感谢 Signo,它非常有用,这是我到目前为止编辑的代码:
if(element.getElement().asText().isUnderline() )
ok_underline = 1;
Logger.log("Value of ok_underline is " + ok_underline);
if(element.getElement().asText().isItalic() )
ok_italis = 1;
if(element.getElement().asText().isBold() )
ok_bold = 1;
if(element.getElement().asText().isStrikethrough() )
ok_strikethrough = 1;
}
}
var tss = SpreadsheetApp.openById(SPREADSHEET_ID);
var ts = tss.getSheetByName(SHEET_NAME);
var trange = ts.getRange(COORD_LIGNE, COORD_COLONNE); //la première cellule A1 première ligne + première colonne
trange.setBackground(background).setFontColor(fontColor).setFontFamily(font).setFontSize(fontWeight).setValue(result);
/** on va bien encadrer la valeur dans la cellule >>>> on va redimensioner la colonne **/
/** vérification pour mettre text underline / italic / bold / strikethrough **/
if ( ok_underline ) {
trange.setFontLine("underline");
Logger.log("Call setFontLine() method ");
}
这是我的结果。下划线不起作用哪里会出问题?
此解决方案应该适用于您的情况:
if ( ok_underline )
trange.setFontLine("underline");
if ( ok_italis )
range.setFontStyle("italic");
if ( ok_bold )
trange.setFontWeight("bold");
if ( ok_strikethrough )
trange.setFontLine("line-through");
if ( if_underline && ok_strikethrough ) // Check if both styles are active
trange.setFontLine("underline|line-through"); // This is not documented but should do the trick, set both styles at the same time to avoid reset
我有一个 Google 文档,里面有一个文本,我做了一个脚本,这样如果我 select 文本,它将复制到 Google 电子表格中 cell.I 到达复制文本,但我不知道如何保持相同的样式颜色,问题是我不知道如何设置 bold/italic..
这是我目前所做的:
var SPREADSHEET_ID = "....."; // = assign your spreadsheet id to this variable
var SHEET_NAME = "Feuille 1"; // = assign your sheet name to this variable
var COORD_LIGNE = 5 ;
var COORD_COLONNE = 4 ;
function onOpen(e) {
DocumentApp.getUi()
.createMenu('Test')
.addItem('Copier la selection du texte', 'Copy')
.addToUi();
}
function Copy() {
var ss = DocumentApp.getActiveDocument();
var selection = ss.getSelection();
var result = "";
var fontColor, background , font, fontWeight ,TextAlignment ;
var ok_underline, ok_italis , ok_bold, ok_strikethrough ;
//Proceed only if something is selected, otherwise selection will be null >>>> pour voir le style/font/couleur on test pour 1 seul élément
if (selection) {
var elements = selection.getRangeElements();
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
// Only modify elements that can be edited as text; skip images and other non-text elements. ??? on n'a pas fait les cas italique et bold etc. ici >>>>> element.getElement().asText().setUnderline(underline)
// Qui sont des méthodes booleans >>>>>>>>>>>>>>>>>>>>>>>>> isUnderline(offset) isItalic() isBold() isStrikethrough() ???? TextAlignment ne marche pas ???
if (element.getElement().editAsText) {
result += element.getElement().asText().getText();
// get formatting
fontColor = element.getElement().asText().getForegroundColor();
background = element.getElement().asText().getBackgroundColor();
font = element.getElement().asText() .getFontFamily();
fontWeight = element.getElement().asText().getFontSize();
TextAlignment = element.getElement().asText().getTextAlignment();
if(element.getElement().asText().isUnderline() )
ok_underline = 1;
if(element.getElement().asText().isItalic() )
ok_italis = 1;
if(element.getElement().asText().isBold() )
ok_bold = 1;
if(element.getElement().asText().isStrikethrough() )
ok_strikethrough = 1;
}
}
var tss = SpreadsheetApp.openById(SPREADSHEET_ID);
var ts = tss.getSheetByName(SHEET_NAME);
var trange = ts.getRange(COORD_LIGNE, COORD_COLONNE); //la première cellule A1 première ligne + première colonne
trange.setBackground(background).setFontColor(fontColor).setFontFamily(font).setFontSize(fontWeight).setValue(result);
/** on va bien encadrer la valeur dans la cellule >>>> on va redimensioner la colonne **/
/** vérification pour mettre text underline / italic / bold / strikethrough **/
if ( ok_underline )
if ( ok_italis )
if ( ok_bold )
if ( ok_strikethrough )
/** i don't know how to set it in fonction of the ok variable **/
ts.autoResizeColumn(COORD_COLONNE);
}
}
编辑:非常感谢 Signo,它非常有用,这是我到目前为止编辑的代码:
if(element.getElement().asText().isUnderline() )
ok_underline = 1;
Logger.log("Value of ok_underline is " + ok_underline);
if(element.getElement().asText().isItalic() )
ok_italis = 1;
if(element.getElement().asText().isBold() )
ok_bold = 1;
if(element.getElement().asText().isStrikethrough() )
ok_strikethrough = 1;
}
}
var tss = SpreadsheetApp.openById(SPREADSHEET_ID);
var ts = tss.getSheetByName(SHEET_NAME);
var trange = ts.getRange(COORD_LIGNE, COORD_COLONNE); //la première cellule A1 première ligne + première colonne
trange.setBackground(background).setFontColor(fontColor).setFontFamily(font).setFontSize(fontWeight).setValue(result);
/** on va bien encadrer la valeur dans la cellule >>>> on va redimensioner la colonne **/
/** vérification pour mettre text underline / italic / bold / strikethrough **/
if ( ok_underline ) {
trange.setFontLine("underline");
Logger.log("Call setFontLine() method ");
}
这是我的结果。下划线不起作用哪里会出问题?
此解决方案应该适用于您的情况:
if ( ok_underline )
trange.setFontLine("underline");
if ( ok_italis )
range.setFontStyle("italic");
if ( ok_bold )
trange.setFontWeight("bold");
if ( ok_strikethrough )
trange.setFontLine("line-through");
if ( if_underline && ok_strikethrough ) // Check if both styles are active
trange.setFontLine("underline|line-through"); // This is not documented but should do the trick, set both styles at the same time to avoid reset