0

Der Versuch, UpdateCellsRequest zu verwenden, um die Formatierung eines Zellenbereichs zu aktualisieren, aktualisiert jedoch nur die erste Zelle im Bereich.UpdateCellsRequest - Bereich verhält sich nicht wie erwartet

let fixFormats =() => { 
    return new Promise((resolve, reject) => { 
     var sheets = google.sheets('v4'); 

     var options = { 
      auth: auth, 
      spreadsheetId: spreadsheetId, 
      resource: { 
       requests: [{ 
        updateCells: { 
         range: { 
          sheetId: 0, 
          startColumnIndex: 0, 
          endColumnIndex: 2, 
         }, 
         rows: [{ 
          values: { 
           userEnteredFormat: { 
            numberFormat: { 
             type: "CURRENCY", 
             pattern: "$#,##0.00" 
            } 
           } 
          } 
         }], 
         fields: "userEnteredFormat.numberFormat", 
        } 
       }] 
      } 
     } 

     sheets.spreadsheets.batchUpdate(options, (err, res) => { 
      if (err) { 
       reject(err); 
      } else { 
       resolve(res); 
       console.log(res); 
      } 
     }); 
    }); 
} 

Laut this post sollte es möglich sein. Ich habe die Referenzdokumentation gelesen und überprüft, ob meine Anfrage richtig formatiert ist. Mit besonderer Aufmerksamkeit darauf, wie range definiert ist.

Edit: Mehr verwirrende Verhalten von der startColumnIndex (einschließlich) und endColumnIndex (Exclusive) ..

Während sheetId: 0, startColumnIndex: 0, endColumnIndex: 2 Nur Zelle A1 beispielsweise aktualisiert ... Während Blatt-ID: 0, StartColumnIndex: 0, EndColumnIndex: 3 Hat das gleiche.

ABER ... wenn Während sheetId: 0, startColumnIndex: 1, endColumnIndex: 2 Dann nur Spalte B (colIndex: 1) aktualisiert wird ...

Ist das ein Bug oder bin ich etwas fehlt?

Edit: Ausgabe auf Anfrage ... nicht sicher, dass dies jedoch die richtige Antwort zeigt.

{ spreadsheetId: '<mysheet>', 
    replies: [ {} ], 
    updatedSpreadsheet: 
    { spreadsheetId: '<mysheet>', 
    properties: 
     { title: 'OLR', 
     locale: 'en_US', 
     autoRecalc: 'ON_CHANGE', 
     timeZone: 'America/Los_Angeles', 
     defaultFormat: [Object] }, 
    sheets: [ [Object], [Object], [Object], [Object], [Object], [Object] ], 
    namedRanges: [ [Object] ], 
    spreadsheetUrl: 'https://docs.google.com/a/company.com/spreadsheets/d/<mysheet>/edit' } } 

Wenn ich die Antwort JSON.stringify es im Bereich für jede Zelle Formatierung ergibt es scheint, die eine Menge von Zellen ist. Von 3 ausgewählten Spalten wird jedoch die erste Zelle in der ersten Spalte aktualisiert, aber der Rest bleibt unverändert.

+0

Können Sie Ihre Protokolle dafür teilen? –

+0

Aktualisierter Hauptpost, zu lang für einen Kommentar. – Martin

Antwort

0

Ich habe es herausgefunden! Obwohl ich das mit der 'repeatCells'-Funktion anstelle von' updateCells 'erreichen konnte, bin ich mir nicht sicher, warum das nicht funktionieren würde, weil es der beabsichtigte Zweck dieser Funktion zu sein scheint. Ich muss das noch einmal lesen, aber für die Nachwelt der aktualisierte Code, der funktioniert:

var options = { 
      auth: auth, 
      spreadsheetId: spreadsheetId, 
      resource: { 
       requests: [{ 
        repeatCell: { 
         fields: "userEnteredFormat.numberFormat", 
         range: { 
          sheetId: 1564685276, 
          startColumnIndex: 1, // inclusive 
          endColumnIndex: 3, // exclusive 
         }, 
         cell: { 
          userEnteredFormat: { 
           numberFormat: { 
            type: "CURRENCY", 
            pattern: "$#,##0.00" 
           } 
          } 
         } 
        } 
       }], 
      } 
     } 
+0

Ugh ... und als Randnotiz bin ich nicht ganz davon überzeugt, dass dies genau funktioniert, weil ich festgestellt habe, dass die Zellen, auf denen ich getestet habe, normale numerische Werte waren. In meinem echten Arbeitsblatt funktionierte das nicht, weil beim Import von Ergebnissen aus einer postgresql-Datenbank ein ungerade führender Apostroph hinzugefügt wurde. Ich habe eine Funktion geschrieben, um diese zu ersetzen, dann führe ich die Formatierung durch und alles ist großartig. – Martin

+0

@Martin ... So erhalten Sie Blatt-ID aus SpreadSheets – Priya

+0

@Priya - SpreadsheetId ist an anderer Stelle in meinem Code definiert. Sie finden es in der URL Ihrer Tabelle. (Lange alphanumerische Zeichenfolge) – Martin

Verwandte Themen