4 Replies Latest reply on Jun 5, 2015 7:39 AM by frameexpert

    Shading straddled cells

    che47audio

      I have a table with 10 columns and 2 body rows. Before the script is run, cell 1 in the first table row (which contains text) is straddled over all cells in the row (cells 1-10). My script so far deletes the second row then unstraddles the top row and restraddles it over cells 1-7, leaving 3 cells unstraddled (cells 8,9 & 10)

      I then want to straddle these 3 cells together (straddle cell 8 over 8, 9 and 10) and shade them. Below is the script I have so far which gets me as far as selecting the three cells to be straddled and shaded. Is it possible to straddle and shade a selection? Also, would someone please advice me for future posts how I post as code just to keep things tidy?


      Thanks

       

      var doc = app.ActiveDoc;

      var tbl = doc.SelectedTbl;

       

       

              //Delete Row

              var row = tbl.FirstRowInTbl.NextRowInTbl;

              row.Delete ()

            

              if(tbl.ObjectValid() == true)

          {

              alert("Row has been deleted");

          }

            

            

              // Remove and re-apply the straddle

             var header=tbl.FirstRowInTbl.FirstCellInRow;

             if (header.ObjectValid()) {

             header.UnStraddleCells(1, 10);

             header.StraddleCells(1, 7);

             alert("Station Header Restraddled.");

              }

            

              else

              {

                

              alert("No cells to unstraddle.");

            

              }

            

            

             //Select the three cells I want to shade

             tbl.MakeTblSelection (0, 0, 7, 9);

           

            //Apply Green shading to cells

           var pgf = doc.TextSelection.beg.obj;

           var cellsForShading = pgf.InTextObj;

       

            // Get the "PBgreen" color object.

           var color = doc.GetNamedColor ("PBGreen");

         

           // Set the cell's properties to 100% PBGreen.

           cellsForShading .CellOverrideShading = color;

           cellsForShading .CellUseOverrideShading = true;

           cellsForShading .CellOverrideFill = 0;

           cellsForShading .CellUseOverrideFill = true;

       

       

            

             {

              tbl = tbl.NextTblInDoc;

              }

        • 1. Re: Shading straddled cells
          frameexpert Level 4

          If you use the Advanced Editor, you can use syntax highlighting on your code, which will format it with line numbers, indents, etc.

           

          First of all, you don't have to select cells in order to straddle them (or shade them, etc.). Here is a simple script that you can use to experiment with the table containing your insertion point. Please let me know if you have any questions or comments.

           

          Rick

           

          #target framemaker
          var doc = app.ActiveDoc;
          var tbl = doc.SelectedTbl;
          
          // Get the 8th cell in the second row. 
          // Cells are numbered from 0 so, use 7.
          var row = tbl.FirstRowInTbl.NextRowInTbl;
          var cell = getCell (row, 7);
          if (cell) {
              // Straddle 1 row and 3 columns.
              cell.StraddleCells (1, 3); // (rows, columns)
              doc.Rehyphenate (); // Required so that straddles draw correctly on the screen.
          }
          
          function getCell (row, colNum) {
          
              var i, cell;
          
              cell = row.FirstCellInRow;
              while (cell.ObjectValid () === 1) {
                  if (cell.CellColNum === colNum) {
                      return cell;
                  }
                  cell = cell.NextCellInRow;
              }
          }
          
          
          • 2. Re: Shading straddled cells
            frameexpert Level 4

            Here is how I am doing shading. Again, it is not necessary to select any cells before doing this. Also note my preference for using separate functions rather than having all of my code in one function. This facilitates easier troubleshooting and code reuse. -Rick

             

            #target framemaker
            var doc = app.ActiveDoc;
            var tbl = doc.SelectedTbl;
            
            // Get the 8th cell in the second row. 
            // Cells are numbered from 0 so, use 7.
            var row = tbl.FirstRowInTbl.NextRowInTbl;
            var cell = getCell (row, 7);
            if (cell) {
                // Shade 3 cells starting with "cell".
                shadeCells (cell, 3, doc);
                doc.Redisplay (); // Refresh the screen.
            }
            
            function shadeCells (cell, num, doc) {
                
                var color, i;
                
                // I am going to use Yellow.
                color = doc.GetNamedColor ("Yellow");
                for (i = 0; i < num, cell.ObjectValid (); i += 1) {
                    cell.CellOverrideShading = color;
                    cell.CellUseOverrideShading = true;
                    cell.CellOverrideFill = 0; // solid
                    cell.CellUseOverrideFill = true;
                    cell = cell.NextCellInRow;
                }
            }
            
            function getCell (row, colNum) {
            
                var i, cell;
            
                cell = row.FirstCellInRow;
                while (cell.ObjectValid () === 1) {
                    if (cell.CellColNum === colNum) {
                        return cell;
                    }
                    cell = cell.NextCellInRow;
                }
            }
            
            • 3. Re: Shading straddled cells
              che47audio Level 1

              This works perfectly thanks! The functions that you've created here are available to call up whenever throughout this script? I find it odd that the function parameters come after the conditions. In my head it would make more sense to define the function before it is used in  Is this a standard way of working?

               

              Cheers

               

              Chris

              • 4. Re: Shading straddled cells
                frameexpert Level 4

                Yes, the functions can be called from anywhere in the script. It is pretty much standard to define all of the functions at the end of the script.