web-dev-qa-db-ja.com

1つのGoogleスプレッドシートセルのテキストに複数のフォント色を適用する

Google Apps Scriptの関数を使用して、セルを複数のフォントの色に設定します。それに関するドキュメントを見つけることができません。また、getFontColor()を使用しても何も返されません。

この機能をプログラムで再現する方法はありますか

enter image description here

googleスプレッドシートのウェブUIを介してユーザーが利用できますか?

10
MGomeyy

Sheets API は使い始めるのが少し難しいですが、スプレッドシートを非常にきめ細かく制御できます。 「高度なサービス」であるため、 有効にする にする必要があります。 Sample Codelab を確認することを強くお勧めします。

Sheets APIを使用すると、セルごとに TextFormatRun プロパティを操作できます。注意:

セルのサブセクションに適用される一連のリッチテキスト。実行は、ユーザーが入力した文字列でのみ有効であり、数式、ブール値、数値では無効です。実行はテキスト内の特定のインデックスから始まり、次の実行まで続きます。実行のプロパティは、後続の実行で明示的に変更されない限り継続します(最初の実行のプロパティは、明示的に変更されない限り、セルのプロパティを継続します)。

書き込み時には、新しい実行によって以前の実行が上書きされます。新しいuserEnteredValueを書き込むと、以前の実行は消去されます。

この例では、これを使用してテキストの緑の値を調整し、アクティブセル内の文字列の長さを0から100%に増やします。ニーズに合わせて調整してください。

function textFormatter() {
  // Get the current cell's text.
  var wb = SpreadsheetApp.getActive(), sheet = wb.getActiveSheet();
  var cell = sheet.getActiveCell(), value = cell.getValue();
  var len = value.toString().length;
  if(len == 0) return;

  // Change the color every 2 characters.
  var newCellData = Sheets.newCellData();
  newCellData.textFormatRuns = [];
  var step = 1 / len;
  for(var c = 0; c < len; c += 2) {
    var newFmt = Sheets.newTextFormatRun();
    newFmt.startIndex = c;
    newFmt.format = Sheets.newTextFormat();
    newFmt.format.foregroundColor = Sheets.newColor();
    newFmt.format.foregroundColor.green = (c + 2) * step;
    newCellData.textFormatRuns.Push(newFmt);
  }

  // Create the request object.
  var batchUpdateRQ = Sheets.newBatchUpdateSpreadsheetRequest();
  batchUpdateRQ.requests = [];
  batchUpdateRQ.requests.Push(
    {
       "updateCells": {
        "rows": [ { "values": newCellData } ],
        "fields": "textFormatRuns",
        "start": {
          "sheetId": sheet.getSheetId(),
          "rowIndex": cell.getRow() - 1,
          "columnIndex": cell.getColumn() - 1
        }
      }
    }
  );
  Sheets.Spreadsheets.batchUpdate(batchUpdateRQ, wb.getId());
}

編集:書式設定するセルの値の設定方法によっては、同じリクエストにセルの値を含めることも必要になる場合があります。 この例は課題追跡で確認してください

3
tehhowch

2018年7月と同様に、Apps-Scriptは個々のテキストの色やその他のフォント関連のスタイルの変更をサポートしています。 SpreadsheetAppには2つのメソッドが追加されています。 newTextStyle()およびnewRichTextValue()。次のアプリスクリプトは、A1のそのようなフォントスタイルを変更します。最良の効果を得るには、長い文字列(30文字以上)を使用してください。

function Rainbow(){
  var rng = SpreadsheetApp.getActiveSheet().getRange("A1");
  var val = rng.getValue().toString();
  var len = val.length; // length of string in A1
  var rich = SpreadsheetApp.newRichTextValue(); //new RichText
  rich.setText(val); //Set Text value in A1 to RichText as base 
  for (var i=0;i<len;i++){ //Loop through each character
    var style = SpreadsheetApp.newTextStyle(); // Create a new text style for each character
    var red= ("0"+Math.round((1/len)*(i)*255).toString(16)).substr(-2,2); //????
    var green= ("0"+Math.round((1/len)*Math.min(i*2,len-Math.abs(i*2-len))*255).toString(16)).substr(-2,2); //????????
    var blue= ("0"+Math.round((1/len)*(len-i)*255).toString(16)).substr(-2,2);//????
    style.setForegroundColor("#"+red+green+blue); // hexcode
    style.setFontSize(Math.max(Math.abs(len/2-i),8)); //Use a lengthy string
    var buildStyle = style.build(); 
    rich.setTextStyle(i,i+1,buildStyle); // set this text style to the current character and save it to Rich text     
  }
  var format = rich.build()
  rng.setRichTextValue(format); //Set the final RichTextValue to A1
}

ドキュメントはまだ公開されていません。方法は変更される場合があります

参照:

5
TheMaster