def write_col(*args)
      row, col, tokens, *options = row_col_notation(args)

      tokens.each do |token|
        # write() will deal with any nested arrays
        write(row, col, token, *options)
        row += 1
      end
    end
def write_col(*args)
      row, col, tokens, *options = row_col_notation(args)

      tokens.each do |token|
        # write() will deal with any nested arrays
        write(row, col, token, *options)
        row += 1
      end
    end
:call-seq:
   write_col(row, col, array [ , format ] )

 Write a column of data starting from (row, col). Call write_row() if any of
 the elements of the array are in turn array. This allows the writing
 of 1D or 2D arrays of data in one go.

 The write_col() method can be used to write a 1D or 2D array of data
 in one go. This is useful for converting the results of a database
 query into an Excel worksheet. You must pass a reference to the array
 of data rather than the array itself. The write() method is then
 called for each element of the data. For example:

     array = [ 'awk', 'gawk', 'mawk' ]

     worksheet.write_col(0, 0, array)

     # The above example is equivalent to:
     worksheet.write(0, 0, array[0])
     worksheet.write(1, 0, array[1])
     worksheet.write(2, 0, array[2])

 As with all of the write methods the +format+ parameter is optional.
 If a format is specified it is applied to all the elements of the
 data array.

 Array references within the data will be treated as rows.
 This allows you to write 2D arrays of data in one go. For example:

     eec =  [
                 ['maggie', 'milly', 'molly', 'may'  ],
                 [13,       14,      15,      16     ],
                 ['shell',  'star',  'crab',  'stone']
            ]

     worksheet.write_col('A1', eec)

 Would produce a worksheet as follows:

      -----------------------------------------------------------
     |   |    A    |    B    |    C    |    D    |    E    | ...
      -----------------------------------------------------------
     | 1 | maggie  | milly   | molly   | may     |  ...    | ...
     | 2 | 13      | 14      | 15      | 16      |  ...    | ...
     | 3 | shell   | star    | crab    | stone   |  ...    | ...
     | 4 | ...     | ...     | ...     | ...     |  ...    | ...
     | 5 | ...     | ...     | ...     | ...     |  ...    | ...
     | 6 | ...     | ...     | ...     | ...     |  ...    | ...

 To write the data in a column-row order refer to the write_row()
 method above.

 Any +nil+ in the data will be ignored unless a format is applied to
 the data, in which case a formatted blank cell will be written.
 In either case the appropriate row or column value will still be
 incremented.

 As noted above the {#write()}[#method-i-write] method can be used as a synonym for
 write_row() and write_row() handles nested array refs as columns.
 Therefore, the following two method calls are equivalent although
 the more explicit call to write_col() would be preferable for
 maintainability:

     worksheet.write_col('A1', array     ) # Write a column of data
     worksheet.write(    'A1', [ array ] ) # Same thing

 See also the write_arrays.rb program in the examples directory of
 the distro.