HeadedGrid[ finalSpacings:{_Integer,_Integer}, finalBorderWidths:{{_Integer,_Integer},{_Integer,_Integer}}, finalOptions_Association, headerCellGridder_Function, rawHeaders:{__String}, dataCellGridder_Function, rawData:{__String}]:= With[ {finalDims={Ceiling[(Length@rawData+Length@rawHeaders)/Length@rawHeaders],Length@rawHeaders}, headerCells=headerCellGridder/@List/@List/@Characters[rawHeaders], dataCells=dataCellGridder/@List/@List/@Characters[rawData]}, DataGrid[finalDims,finalSpacings,finalBorderWidths,finalOptions,Join[headerCells,dataCells]]]; (*An example with a few decorations:*) HeadedGrid[ {1,1}, {{1,1},{1,1}}, <|"dividers"->{"-","|","+"},"border"->"*"|>, DataGrid[{3},{6},{0,0},{{0,0},{0,0}},<|"background"->"-"|>,#]&, {"Su","Mo","Tu","We","Th","Fr","Sa"}, DataGrid[{3},{4},{0,0},{{0,0},{0,0}},<|"alignment"->{-1,1}|>,#]&, ToString/@Range[31]]//AsString