【问题标题】:Google script copy text formatted from Google Docs to Spreadsheet keep bold/underlined... format谷歌脚本从谷歌文档复制文本到电子表格保持粗体/下划线...格式
【发布时间】:2018-06-29 07:24:26
【问题描述】:

我有一个谷歌文档,里面有一个文本,我做了一个脚本,这样如果我选择文本,它将复制到单元格中的谷歌电子表格。我来复制文本但我不知道该怎么做保持相同的样式颜色,问题是我不明白如何设置粗体/斜体..

这是我到目前为止所做的:

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) ? if ( ok_italis ) trange.setFontStyle("italic"); if ( ok_bold ) trange.setFontWeight("bold"); // if ( ok_strikethrough ) ?
  • 是的,抱歉忘记了!如果要设置line-throughunderline,则需要setFontLine(fontLine)
  • 不客气 :) 这很奇怪,因为如果它适用于直通,它也应该适用于下划线。你确定ok_underline 是真的并且trange.setFontLine("underline"); 被调用了吗?
  • 这里的问题是setFontLine 用于设置换行和下划线,所以先用underline 调用它然后line-through 将重置它的样式。我将发布一个可能的解决方案的答案

标签: google-apps-script google-sheets google-docs google-spreadsheet-api google-docs-api


【解决方案1】:

此解决方案应该适用于您的情况:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多