View Single Post
Limited edition
Moff's Avatar
Det er noe med disse tabellene som ikke fungerer som normalt. Problemet oppstår ikke kun i kode heller; det er noen av cellene som ikke lar seg endre via de normale verktøyene heller. Det gjelder særlig cellene nederst mot venstre i den første tabellen. Dette kan tyde på at det rett og slett er noe galt med formateringen på dem, og derfor antar jeg at disse tabellene er copy-pastet fra en annen kilde, og at dette på ett eller annet vis skaper trøbbel.

En mulig "løsning" på dette er å klone tabellene i Google Docs, på en sånn måte at ingen korrupt formateringskode blir liggende igjen. Her er et eksempel:

Kode

function onOpen() {
  DocumentApp.getUi().createMenu("Tables")
    .addItem("Fix", "cloneTables")
    .addItem("Black", "setTableColorBlack")
    .addItem("White", "setTableColorWhite")
    .addToUi();
}

function setTableColorBlack() {
  setTableColor("#000000");
}

function setTableColorWhite() {
  setTableColor("#ffffff");
}

function setTableColor(color) {
  var body = DocumentApp.openById(DocumentApp.getActiveDocument().getId()).getBody();
  var tables = body.getTables();
  
  for(var i = 0; i < tables.length; i++) {
    tables[i].setBorderColor(color);
    tables[i].setBorderWidth(1);
  }
}

function cloneTables() {
  var body = DocumentApp.openById(DocumentApp.getActiveDocument().getId()).getBody();
  var tables = body.getTables();
  
  var tablesToRemove = [];
  
  // Clone new tables
  for(var i = 0; i < tables.length; i++) {
    var at = tables[i];
    var bt = body.appendTable();
    
    for(var y = 0; y < tables[i].getNumRows(); y++) {
      var ar = at.getRow(y);
      var br = bt.appendTableRow();
      
      for(var x = 0; x < ar.getNumCells(); x++) {
        var ac = ar.getCell(x);
        var bc = br.appendTableCell();
        
        // Clone cell content
        bc.setText(ac.getText());
        
        // Clone cell style
        var attr = ac.getAttributes();
        
        // Color check (causes exception if empty)
        if(attr["BACKGROUND_COLOR"] == "") {
          delete attr["BACKGROUND_COLOR"];
        }
        
        bc.setAttributes(attr);
      }
    }
    
    tablesToRemove.push(at);
  }
  
  // Delete original tables
  for(var i = 0; i < tablesToRemove.length; i++) {
    body.removeChild(tablesToRemove[i]);
  }
}
Det denne koden gjør er å legge til en ny funksjon i menyen som går gjennom alle tabeller, lager en kopi av dem og alt tekstinnhold, legger dem til i dokumentet og deretter sletter den originale tabellen [color=red](!)[/color].

Merk at jeg skriver tekstinnhold, ikke alt innhold. Dette er ikke skrevet med tanke på nesting, det er kun et proof of concept som fungerer med tekst. Vær derfor veldig forsiktig med å bruke denne koden på noe annet enn den typen dokumenter som du viste til. Det går selvsagt an å se på måter å lage støtte for nesting, bilder og lignende, men jeg tenker det kunne være greit å starte med å bare identifisere problemet.

Etter å ha kjørt denne tabell-fikse-koden så vil koden som setter rammefarge fungere som normalt.