Just following up that I do not think I will try to implement rowspan at this time. The short version is that it really complicates things way more than you might expect. And in different ways for HTML output versus LaTeX output.
The long version: here was the markup you suggested before:
BEGIN_PGML
[@
DataTable(
[
['','',['Academic Major', colspan => 5,headerrow => 1]],
['','','Business','Science','Liberal Arts','Other','Total'],
[['Gender', rowspan => 3, writing-mode => 'vertical-rl'],'Female',10,9,9,7,35],
['','Male',12,11,10,7,40],
['','Total',22,20,19,14,75],
],
tablecss => 'border: 1px solid black;',
midrules => 1,
align => '| c | c | c | c | c | c | c |',
empty-cells => 'hide',
);
@]*
END_PGML
With this particular suggestion, the empty string cell that precedes 'Male' and 'Total' is meant to be 'written over' by the "Gender" cell. OK, so to prevent an HTML cell from being created there, we would need to scan "above" in the table to see if a rowpan cell is overwriting this. And what does "above" mean? Remember that some cells in previous rows might be using colspan. And this isn't even looking at LaTeX complications yet.
The next idea would be to do like HTML does, and not even have those empty cells. So like:
BEGIN_PGML
[@
DataTable(
[
['','',['Academic Major', colspan => 5,headerrow => 1]],
['','','Business','Science','Liberal Arts','Other','Total'],
[['Gender', rowspan => 3, writing-mode => 'vertical-rl'],'Female',10,9,9,7,35],
['Male',12,11,10,7,40],
['Total',22,20,19,14,75],
],
tablecss => 'border: 1px solid black;',
midrules => 1,
align => '| c | c | c | c | c | c | c |',
empty-cells => 'hide',
);
@]*
END_PGML
OK but now consider that "11" cell just for example. It is really in the 4th column, but you cannot discern this just from looking at the markup of the 3rd row. You would have to make it understand the influence of the "Gender" cell from the 2nd row shifting column indices. We need to know which column it is really in to apply things like borders and other styling as defined in the texalignment string and elsewhere.
So to do this, it would be possible, but I think it would need the code to start out by doing a once-over where it is purely analyzing the impact of colspan and rowspan and inserting "dead" cells that can (a) be ignored for printing to output but (b) be relied upon to accurately locate a given cell's visual position. I don't think I have time to do this before 2.18 comes out.