How you go about it may depend on whether you want to be able to programmatically access any displayed values after manually updating them in the tabulated representation.

If you insert a DataTable Embedded Component from the palettes then you can associate that with a Matrix or Array. This includes the functionality that if you update the Matrix then the DataTable entry reflects that. And vice versa. Also, you can put customized row and column headers on the Component. There is no command at present to insert such a DataTable via a command. (I suspect that it might be done with some very low level XML manipulation, but it is not straightforward and the insertion may be buggy.)

If you only need to display the data and not to interact with it (as you've stated is the case) then there are some undocumented routines that can accomplish this. (These are evident by inspectng the Explore:-ModuleApply and ImageTools:-Embed library procedures.) Of course your success might be limited, with undocumented routines. For example, using Maple 18.01, with the purely numeric entries of data being represented as strings,

restart:
makegrid := proc(M::Matrix)
uses DocumentTools:-Layout;
local i,j,m,n,wks;
m,n := op(1,M);
wks := Worksheet(Table(alignment=center,width=20,
seq(Column(),j=1..n),
seq(Row(seq(Cell(Textfield(sprintf("%a",M[i,j]))),
j=1..n)),i=1..m)));
DocumentTools:-InsertContent(wks);
end proc:
f:=x->x^2:
g:=x->x^3:
data:=[seq([i,f(i),g(i)],i=0..5)]:
makegrid(<<'i'|'f(i)'|'g(i)'>,Matrix(data)>);

In Maple 17 the following seems possible. This makes a little effort at weighting the width of the columns according to string length. (That weighting will break down if the entries are long enough to line-wrap, I think.)

restart:
grid := proc(M::Matrix)
uses DocumentTools:-Layout;
local i,j,Ms,m,n,wks;
m,n:=op(1,M);
Ms:=map(convert,M,string);
wks:=XMLTools:-ToString(
_XML_Worksheet(Table(':-alignment'=':-center',':-width'=20,
seq(Column(':-weight'=3+max(map(length,Ms[..,j]))),j=1..n),
seq(Row(seq(Cell(`_XML_Text-field`("alignment"="centred",
"style"="Text",Ms[i,j])),
j=1..n)),i=1..m))));
streamcall(INTERFACE_TASKTEMPLATE(':-insertdirect',':-content'=wks));
NULL:
end proc:
f:=x->x^2:
g:=x->-x^13:
data:=[seq([i,f(i),f(i)/g(i)],i=1..5)]:
grid(<<'i'|'f(i)'|'f(i)/g(i)'>,Matrix(data)>);

The mechanism used above is not in Maple 16 or earlier, so this won't work there.

acer