Google E-Tablolar'daki sayıları ondalık olarak hizalama


13

Google E-Tablolar'da, kesirli kısma sondaki sıfır eklemeden sayıları ondalık olarak hizalamak istiyorum.

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

İlk sütunun biçimi kolayca gerçekleştirilebilir (örneğin, "0.0" biçimini kullanarak veya yalnızca 123 düğmesinin altında özel ondalık noktalarını ayarlayarak).

Excel'de, ikinci sütunun biçiminin "0.?" Biçimi kullanılarak gerçekleştirildiğine inanıyorum, ancak bu yazı itibariyle Google E-Tablolar'da çalışmaz.

Geçici çözüm

İkili karakterleri Yerine Koy ile zorlamak mümkündür:

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

Not: Değiştirilen iki boşluk karakteri U + 0020 SPACE değil, U + 2002 EN SPACE'dir . ( U + 00A0 NO-BREAK SPACE de çalışır.)

Bu geçici çözümün istenmeyen yan etkilerinden bazıları

  • yalnızca görüntüleme biçimini değil aynı zamanda hücrenin değerini de değiştirir
  • hücrede tek aralıklı bir yazı tipi kullanılmasını gerektirir
  • sondaki boşluk Unicode nedeniyle yazı tipi değişikliğine neden olur ve düzgün yazdırılmaz
  • sondaki alt çizgiler, sondaki boşluk kadar arzu edilmez
  • bir EN SPACE kullanıldığının belli olmadığı için koruyucularla karıştırır
  • (muhtemelen), noktayı ondalık işareti yerine nokta ayırıcı (binlik ayırıcı) olarak kullanan yerel ayarlarda başarısız olur

Yanıtlar:


5

Aşağıdaki özel sayı biçimiyle, karakter aralığı kullanan yazı tiplerini kullanarak bile Google E-Tablolar'daki sayıları ondalık olarak hizalayabilirsiniz.

Özel biçim

???.?????

Ekran görüntüsü

özel sayı biçimi
resim açıklamasını buraya girin

sonuç
resim açıklamasını buraya girin

Misal

Bu çözümü bir örnek dosyaya ekledim: Ondalık Hizalanmış Sayılar


1
"?" Desteği Aslında soruyu sorduğumda biçim karakteri yoktu. Merak ediyorum, Google'ın hesap numarası biçimleriyle ilgili son desteğinin bir parçası olarak eklenip eklenmediğini merak ediyorum . Bu, istediğime çok yakın, kullanışlı bir çözüm. Tek sınırlama, kesirli kısım olmasa bile ondalık bir noktanın görünmesidir. Excel'de, bu sınırlama koşullu biçimlendirme ile çözülebilir. Ama öyle görünmüyor ki, E-Tablolar'da. Bu cevabı kabul ediyorum.
MetaEd

4

Ondalık hizalı sayıları göstererek, hayatınızı biraz daha kolay hale getirmek için bazı kodlar yazdım.

İlk kod

yalnızca aralıkta kullanılabilir, çünkü sayıların görünümünü aralıktaki en yüksek ondalık basamağa göre dinamik olarak değiştirir. Ayrıca CHAR (160) gibi sondaki karakteri seçmenize izin verir:

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

İkinci kod

"Hücreler" için kullanılır. Burada sondaki uzunluğu ayarlamanız gerekir:

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

Üçüncü kod

"" dışında tüm sayısal olmayan öğelerden bir dize bağlar. ve ",":

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

Örnek Dosya

Ondalık Hizalanmış Sayılar resim açıklamasını buraya girin


Düşünceler

Bu cevap, sorunuzda bahsettiğiniz endişeleri ortadan kaldırmaz, ancak bunları görüntülemede bazı otomasyonlar (dinamik olarak) verecektir !! İyi şanslar.


Sabit genişlikli bir yazı tipi kullanmıyorsanız bunun garip hizalama sorunlarına yol açabileceğini belirtmek isterim.
Mir

@mir Yorumunuz için teşekkürler Mir. Verdiğim yanıtı beğendin mi? Gelen başlığı düşünceler Ben OP verdi endişeleri götürmek olmaz açıkladı.
Jacob Jan Tuinstra

1
Sabit genişlikli bir yazı tipi kullanmam gerektiğini anladıktan sonra cevap gerçekten çok yardımcı oldu. Dürüst olacağım - soruyu dikkatlice okumadım ... Sorunumla benzer olduğunu doğrulamak için ona baktım, sonra doğrudan cevabına atladım. Bu yüzden OP'nin yazı tipleriyle ilgili endişeleri içerdiğini fark etmedim.
Mir

1

Biçimi, hücre aralığı üzerinde yineleme yapmak için bir Apps Komut Dosyası kullanarak koşullu olarak ayarlayabilir ve hücrenin değerine bağlı olarak farklı Özel Sayı Biçimleri uygulayabilirsiniz (tamsayı veya tamsayı olmayan). Özel Sayı Biçimlerini kullanarak, alt çizgi karakterini kullanarak değişen genişlikteki beyaz boşlukları görüntüleyebilirsiniz, örneğin _.beyaz boşluğu bir dönemin _0genişliğini ekler ve boşluklara sıfır karakterin genişliğini ekler. Bu arada, çoğu yazı tipi tüm sayısal karakterler için aynı genişliği kullanır, böylece 0 karakteri 1 ve 2 ve 3 ile aynı genişliktedir.

Bu, komut dosyasını çalıştırarak formatı uygulamadan önce ve sonra sayıların nasıl görüntülendiğine bir örnektir. Bir dezavantajı, hücrenin değerinde tamsayıdan tamsayıya veya tam tersi bir değişikliğin, ondalık değeri gerektiği gibi göstermek veya gizlemek için biçimlendirmenin yeniden uygulanmasını gerektirmesidir.

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

Senaryo

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");
      }
    }
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.