Сценарий Google копирует текст, отформатированный из Документов Google, в электронную таблицу, сохраняя жирный / подчеркнутый формат - PullRequest
0 голосов
/ 29 июня 2018

У меня есть Google Doc с текстом внутри, и я сделал скрипт, чтобы, если я выделю текст, он скопировал в таблицу Google в ячейке. Я прибыл, чтобы скопировать текст, но я не знаю, как это сделать сохранить те же цвета стилей, и проблема в том, что я не понимаю, как установить жирный / курсив ..

Это то, что я сделал до сих пор:

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); 
  }
}

Exported text from Google Doc to a cell in Google Spreadsheet Любая идея прекрасна! Спасибо большое.

Редактировать: Большое спасибо, 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 ");
    }

и это мой результат. Unline не работает, где будет проблема? The undeline doesn't work where would be the problem?

1 Ответ

0 голосов
/ 29 июня 2018

Это решение должно работать для вашего случая:

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
...