листы Google - конвертируйте данные во всем столбце из КБ в ГБ, используя скрипт Google - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь автоматизировать создание диаграмм в листах Google, для которых мне нужно преобразовать данные столбца из КБ в ГБ.Как это можно сделать с помощью скрипта Google Apps?

1 Ответ

0 голосов
/ 26 января 2019

В StackOverflow, StackExchange и в Интернете существуют десятки примеров того, как конвертировать размер в байтах в КБ, МБ, ГБ в JavaScript. Однако, насколько я могу судить, нет примеров, относящихся к листам Google. Этот код предлагается как способ документирования методологии для Google Sheets. Надеюсь, это будет то, что будущие пользователи смогут использовать / адаптировать, а не поднимать новые (и дублирующие) вопросы.

Кредит: Aliceljm - Правильный способ преобразования размера в байтах в КБ, МБ, ГБ в JavaScript

function so54360760() {

  //complex calculation; assume Bytes in column A; use calculation to return MB, GB, etc

  // Setup spreadsheet and target sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("so_54360760");

  // setup some variables
  var k = 1024;
  var decimals = 3;
  var dm = decimals <= 0 ? 0 : decimals || 2;
  var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  var convertedcolumn = [];

  // get the last row in column A
  var aRange = sheet.getRange("A1:A");
  var AVals =  aRange.getValues();
  var ALastRow = AVals.filter(String).length;
  //Logger.log("DEBUG: The last row in A = "+ALastRow);//DEBUG

  // Loop thought the values in column A - start at row 2 (assuming a header in row 1)
  for (i=1;i< ALastRow;i++){
    // Logger.log("DEBUG: i = "+i+", value = "+AVals[i][0]); //DEBUG
    var convert = []; // clear the value of the array for the row

    // calculate the converted value and push to an array
    if(AVals[i][0] == 0){
      convert.push('0 Bytes'); 
    }
    else {
      var x = Math.floor(Math.log(AVals[i][0]) / Math.log(k));
      var xy = parseFloat((AVals[i][0] / Math.pow(k, x)).toFixed(dm)) + ' ' + sizes[x];
      convert.push(xy); 
    }

    // now push the row value to an array that can be used for the column
    convertedcolumn.push(convert);
  }

  //define the destination range
  var bRange = sheet.getRange(2, 2, ALastRow-1);

  // update the range with the array values
  bRange.setValues(convertedcolumn);
}

Структура данных

Data layout for conversion of kilobytes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...