Como alinhar números decimais no Planilhas Google

13

No Planilhas Google, desejo alinhar números decimais sem adicionar zeros à direita na parte fracionária.

Instead of:  I want:
+------+     +------+
|  56.0|     |  56  |
|  27.0|     |  27  |
|  83.0|     |  83  |
|   2.4|     |   2.4|
|   1.2|     |   1.2|
| 120.0|     | 120  |
+------+     +------+

O formato da primeira coluna é facilmente realizado (por exemplo, usando o formato "0.0" ou apenas configurando pontos decimais personalizados no botão 123).

No Excel, acredito que o formato da segunda coluna seja realizado usando o formato "0.?", Mas, até o momento, este documento não funciona no Planilhas Google.

Gambiarra

É possível forçar caracteres finais com o substituto:

= Substitute( Text( formula ; "0.0" ) ; ".0" ; "  ")
= Substitute( Text( formula ; "0.0" ) ; ".0" ; "__" )

Nota: os dois caracteres de espaço em branco substituídos não são U + 0020 ESPAÇO, mas U + 2002 EN ESPAÇO . ( U + 00A0 ESPAÇO SEM QUEBRA também funciona.)

Alguns efeitos colaterais indesejáveis ​​dessa solução alternativa são que

  • modifica não apenas o formato de exibição, mas também o valor da célula
  • requer o uso de uma fonte monoespaçada na célula
  • espaço em branco à direita causa substituição de fonte devido ao Unicode e não é impresso corretamente
  • sublinhados à direita não são tão desejáveis ​​quanto espaços em branco à direita
  • confunde mantenedores porque não é evidente que um EN SPACE está sendo usado
  • (presumivelmente) falha em localidades que usam o período como separador de período (separador de milhares) em vez do marcador decimal
MetaEd
fonte

Respostas:

5

Com o seguinte formato de número personalizado, você pode alinhar números decimais no Planilhas Google, mesmo usando fontes que usam kerning.

Formato personalizado

???.?????

Captura de tela

formato numérico personalizado
insira a descrição da imagem aqui

resultado
insira a descrição da imagem aqui

Exemplo

Adicionei esta solução em um arquivo de exemplo: Números alinhados decimais

Jacob Jan Tuinstra
fonte
1
Suporte para o "?" o caractere de formato estava ausente quando eu fiz a pergunta originalmente. Gostaria de saber se foi adicionado como parte do suporte recente do Google aos formatos de números contábeis . Esta é uma solução útil, muito próxima do que eu quero. A única limitação é que um ponto decimal aparece mesmo quando não há parte fracionária. No Excel, essa limitação pode ser contornada com formatação condicional. Mas não, ao que parece, no Planilhas. Estou aceitando esta resposta.
MetaEd 7/03/2017
4

Eu escrevi um código para facilitar a sua vida, exibindo números alinhados por decimais.

O primeiro código

só pode ser usado em um intervalo, porque altera dinamicamente a aparência dos números de acordo com a casa decimal mais alta do intervalo. Também permite escolher o caractere à direita, como CHAR (160):

function RANGETRAIL(range,chr){
  chr = chr || '0'; 
  var aValues = new Array(), aDecimals = new Array();

  var max=0;
  for(i in range) {
    if(range[i] != "") {
      var string = range[i].toString();
      aValues.push([string]);
      var aSplit = string.split("."); 

      if(aSplit.length > 1) {
        aDecimals.push([aSplit[1].length]);
        if(aSplit[1].length > max) {
          max = parseInt(aSplit[1].length);        
        } 
      } else {
        aDecimals.push(["-1"]);
      }
    }
  } 

  for(k in aDecimals) {
    if(parseInt(aDecimals[k]) != parseInt(max)) {
      for(var l=parseInt(aDecimals[k]); l<parseInt(max); l++) {        
        aValues[k][0] += chr;
      }
    }
  }     
  return aValues;
}

O segundo código

deve ser usado para células. Aqui você precisa definir o comprimento à direita:

function CELLTRAIL(cell,len,chr){
  // Brad Christie, http://stackoverflow.com/a/5024108/1536038
  chr = chr || '0'; 
  cell = cell.toString();

  if (!len) return cell;

  var p = cell.indexOf('.');
  p = (p!==-1?(cell.length-p-1):-1);

  for (var m = p; m < len; m++) {
    cell += chr;
  }
  return cell;
}

O terceiro código

tira uma string de todos os não numéricos, exceto um "." e ",":

function RTRIM(cell) {   
  return Number(cell.replace(/[^0-9$.,]/g, ''));
}

Arquivo de exemplo

Números alinhados decimais insira a descrição da imagem aqui


Pensamentos

Essa resposta não tira as preocupações que você mencionou na sua pergunta, mas fornecerá alguma automação (dinamicamente) na exibição delas! Boa sorte.

Jacob Jan Tuinstra
fonte
Gostaria de salientar que isso pode levar a problemas de alinhamento estranhos se você não estiver usando uma fonte de largura fixa.
Mir
@mir obrigado pelo seu comentário Mir. Você gostou da resposta que eu dei? No cabeçalho dos pensamentos , expliquei que não tiraria as preocupações do OP.
Jacob Jan Tuinstra
1
A resposta foi realmente muito útil quando percebi que precisava usar uma fonte de largura fixa. Serei honesto - não li a pergunta com atenção ... Apenas olhei para ela para confirmar que era semelhante ao meu problema e pulei direto para sua resposta. Então, eu não percebi que o OP incluía preocupações sobre as fontes.
Mir
1

Você pode definir o formato condicionalmente usando um Script do Google Apps para iterar no intervalo de células e aplicar diferentes formatos de números personalizados com base no valor da célula (número inteiro versus não inteiro). Usando Formatos de números personalizados, é possível exibir espaços em branco de largura variável usando o caractere sublinhado, por exemplo, _.insere espaços em branco na largura de um período e _0insere em espaços em branco a largura de um caractere zero. Aliás, a maioria das fontes usa a mesma largura para todos os caracteres numéricos; portanto, um caractere 0 tem a mesma largura que 1, 2 e 3, etc.

Este é um exemplo de como os números são exibidos antes e depois de aplicar o formatd executando o script. Uma desvantagem é que uma alteração no valor da célula de inteiro para não inteiro ou vice-versa exigirá que a formatação seja reaplicada para mostrar ou ocultar o decimal conforme necessário.

  Raw Numbers  Decimal Aligned
+------------+----------------+
|    1234.777|         1,234.8|
|        5454|         5,454  |
|           7|             7  |
|         0.5|             0.5|
+------------+----------------+

Roteiro

function decimalAlign() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Sheet1");
  var range = sheet.getRange("B2:B5");
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      var currentCell = range.getCell(i,j);
      var currentValue = currentCell.getValue();
      if (Math.round(currentValue) == currentValue) {
        currentCell.setNumberFormat("#,##0_._0");
      } else {
        currentCell.setNumberFormat("#,##0.0");
      }
    }
  }
}
Collin Anderson
fonte