行と列にまたがるテーブル エントリのスパン
これらの例では、行と列にまたがるテーブル エントリを作成する方法を示します。
略式テーブル
この例では、DOM 略式テーブル オブジェクトで行と列のスパンを使用して、以下のテーブルを作成する方法を示します。
略式テーブルは、事前定義されたヘッダー セクション、本体セクション、およびフッター セクションを含まないテーブルです。ただし、この例に示すように、略式テーブルの最初の数行をヘッダーとして書式設定することができます。
長い完全修飾クラス名を使用せずに済むよう、DOM 名前空間をインポートします。
import mlreportgen.dom.*
ドキュメントを設定し、テーブルを説明するための見出しを追加します。
% To create a PDF report, change the output type from "docx" to "pdf". % To create an HTML report, change "docx" to "html" or "html-file" for % a multifile or single-file report, respectively. rpt = Document('myReport','docx'); h = Heading(1, 'Multiple Row and Column Table Entries Using an Informal Table'); h.Style = [h.Style {HAlign('center')}]; append(rpt, h);
さまざまなドキュメント コンポーネントで使用されるスタイル用の cell 配列を作成します。含まれているテーブルはページの幅いっぱいに広がり、エントリを分ける実線をもちます。メイン ヘッダーをスチール ブルーにし、次にサブヘッダーを明るいスカイ ブルーにします。
tableStyle = {Width('100%'), Border('solid'), ColSep('solid'), RowSep('solid')}; mainHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), ... BackgroundColor('steelblue')}; mainHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')}; subHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), BackgroundColor('skyblue')}; subHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')}; bodyStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt'), InnerMargin('2pt', '2pt', '2pt', '0pt')};
テーブルに含めるサンプル データをいくつか作成します。次に、Table オブジェクトを作成します。
data = {'John', 'Smith', 'Natick, MA'; 'Jane', 'Doe', 'Boston, MA'}; t = Table(3); t.Style = [t.Style tableStyle];
Name ヘッダーと Address ヘッダーが含まれるテーブルの最初の行の TableRow オブジェクトを作成します。Name ヘッダーには 2 つのサブヘッダーがあるため、2 列にまたがります。これは、テーブル エントリの ColSpan プロパティで設定します。Address ヘッダーにはサブヘッダーがないため、2 行にまたがります。これは、テーブル エントリの RowSpan プロパティで設定します。
r = TableRow; r.Style = [r.Style mainHeaderRowStyle]; p = Paragraph('Name'); p.Style = [p.Style mainHeaderTextStyle {HAlign('center')}]; te = TableEntry(p); te.ColSpan = 2; append(r, te); p = Paragraph('Address'); p.Style = [p.Style mainHeaderTextStyle]; te = TableEntry(p); te.RowSpan = 2; append(r, te); append(t, r);
Name の First と Last のサブヘッダー用に、テーブルの 2 番目の行を作成します。テーブルの幅は 3 列ですが、Address フィールドが最初の行と 2 番目の行の両方にまたがっているため、2 番目の行には 2 つのエントリしか含まれません。
r = TableRow; r.Style = [r.Style subHeaderRowStyle]; p = Paragraph('First'); p.Style = [p.Style subHeaderTextStyle]; te = TableEntry(p); append(r, te); p = Paragraph('Last'); p.Style = [p.Style subHeaderTextStyle]; te = TableEntry(p); append(r, te); append(t, r);
サンプル データをループ処理してテーブルに追加します。
for k = 1:size(data, 1) r = TableRow; r.Style = [r.Style bodyStyle]; te = TableEntry(data{k,1}); append(r, te); te = TableEntry(data{k,2}); append(r, te); te = TableEntry(data{k,3}); append(r, te); append(t, r); end
テーブルをドキュメントに追加します。
append(rpt, t);
形式的テーブル
この例では、DOM 形式的テーブル オブジェクトで行と列のスパンを使用して、以下のテーブルを作成する方法を示します。
形式的テーブルは、それぞれテーブルのヘッダー セクション、本体セクション、およびフッター セクションの 3 つのサブテーブルで構成されるテーブルです。略式テーブルの代わりに形式的テーブルを使用すると、特別な書式設定が必要なヘッダーをデータから分離し、形式的テーブル コンストラクターに直接渡して本体テーブルに入力することができます。
長い完全修飾クラス名を使用せずに済むよう、DOM 名前空間をインポートします。
import mlreportgen.dom.*
既存のドキュメントの新しいページに移動し、テーブルを説明するための見出しを追加します。
br = PageBreak(); append(rpt, br); h = Heading(1, 'Multiple Row and Column Table Entries Using a Formal Table'); h.Style = [h.Style {HAlign('center')}]; append(rpt, h);
さまざまなドキュメント コンポーネントで使用されるスタイル用の cell 配列を作成します。含まれているテーブルはページの幅いっぱいに広がり、エントリを分ける実線をもちます。メイン ヘッダーをスチール ブルーにし、次にサブヘッダーを明るいスカイ ブルーにします。
tableStyle = {Width('100%'), Border('solid'), ColSep('solid'), RowSep('solid')}; mainHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), ... BackgroundColor('steelblue')}; mainHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')}; subHeaderRowStyle = {VAlign('middle'), InnerMargin('2pt', '2pt', '2pt', '2pt'), BackgroundColor('skyblue')}; subHeaderTextStyle = {Bold, OuterMargin('0pt', '0pt', '0pt', '0pt'), FontFamily('Arial')}; bodyStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt')};
テーブルに含めるサンプル データをいくつか作成します。次に、サンプル データを使用して、本体セクションで FormalTable オブジェクトを作成します。
data = {'John', 'Smith', 'Natick, MA'; 'Jane', 'Doe', 'Boston, MA'}; t = FormalTable(data); t.Style = [t.Style tableStyle]; t.Body.TableEntriesStyle = [t.Body.TableEntriesStyle, bodyStyle];
前の例と同じ方法を使用して、FormalTable オブジェクトの Header テーブルを作成します。Name ヘッダーと Address ヘッダーが含まれるテーブルの最初の行の TableRow オブジェクトを作成します。Name ヘッダーには 2 つのサブヘッダーがあるため、2 列にまたがります。これは、テーブル エントリの ColSpan プロパティで設定します。Address ヘッダーにはサブヘッダーがないため、2 行にまたがります。これは、テーブル エントリの RowSpan プロパティで設定します。
r = TableRow; r.Style = [r.Style mainHeaderRowStyle]; p = Paragraph('Name'); p.Style = [p.Style mainHeaderTextStyle {HAlign('center')}]; te = TableEntry(p); te.Style = [te.Style mainHeaderTextStyle]; te.ColSpan = 2; append(r, te); p = Paragraph('Address'); p.Style = [p.Style mainHeaderTextStyle]; te = TableEntry(p); te.Style = [te.Style mainHeaderTextStyle]; te.RowSpan = 2; append(r, te); append(t.Header, r);
Name の First と Last のサブヘッダー用に、テーブルの 2 番目の行を作成します。テーブルの幅は 3 列ですが、Address フィールドが最初の行と 2 番目の行の両方にまたがっているため、2 番目の行には 2 つのエントリしか含まれません。
r = TableRow; r.Style = [r.Style subHeaderRowStyle]; p = Paragraph('First'); p.Style = [p.Style subHeaderTextStyle]; te = TableEntry(p); append(r, te); p = Paragraph('Last'); p.Style = [p.Style subHeaderTextStyle]; te = TableEntry(p); append(r, te); append(t.Header, r);
テーブルをドキュメントに追加します。
append(rpt, t);
ページ レイアウト テーブル
この例では、行と列のスパンを使用して、複雑なレイアウト用に非表示のページ レイアウト テーブルを作成する方法を示します。
長い完全修飾クラス名を使用せずに済むよう、DOM 名前空間をインポートします。
import mlreportgen.dom.*
既存のドキュメントの新しいページに移動し、テーブルを説明するための見出しを追加します。
br = PageBreak(); append(rpt, br); h = Heading(1, 'Multi-column Invisible Table'); h.Style = [h.Style {HAlign('center')}]; append(rpt, h);
ページ上のさまざまなコンポーネントのスタイルを決定します。メイン テーブルは非表示なので、境界線や区切りはありません。
mainTableStyle = {Width('100%'), Border('none') ColSep('none'), RowSep('none')}; dataTableStyle = {Border('solid'), ColSep('dotted'), RowSep('solid'),... OuterMargin('0pt', '0pt', '0pt', '0pt')}; dataTableEntriesStyle = {OuterMargin('0pt', '0pt', '0pt', '0pt'), VAlign('middle')}; histStyle = {InnerMargin('2pt', '2pt', '2pt', '2pt'), ... HAlign('center'), VAlign('bottom'), Width('5in'), Height('4in')};
500 回のランダムなコイン投げを表すサンプル データを作成します。次に、Text オブジェクト、FormalTable オブジェクト、および Image オブジェクトを作成して、データに関する情報を表示します。
coinflips = randi(2, [500, 10]); numHeads = sum(coinflips-1,2); p = Text(['The plot below shows the results from 500 trials in which a coin was flipped 10 times, ',... 'and the number of times the coin landed on heads was counted. ',... 'The table displays the results for the first 20 trials.']); dataHeader = {'Trial', 'Heads'}; dataBody = [(1:20)', numHeads(1:20)]; dataTable = FormalTable(dataHeader, dataBody); dataTable.TableEntriesStyle = [dataTable.TableEntriesStyle dataTableEntriesStyle]; dataTable.Header.Style = [dataTable.Header.Style {Bold}]; dataTable.Style = [dataTable.Style dataTableStyle]; histogram(numHeads); title('Results') xlabel('Number of Heads') ylabel('Number of Trials') saveas(gcf,'histogram_img.png'); close(gcf) h = Image('histogram_img.png');
非表示テーブルを作成し、コンポーネントの追加を開始します。データ テーブルを最初の行に追加し、2 つの行にまたがるように指定します。
t = Table(2); t.Style = [t.Style mainTableStyle]; row1 = TableRow; row1.Style = [row1.Style {Width('100%')}]; entry1 = TableEntry; append(entry1, dataTable); entry1.RowSpan = 2; entry1.Style = [entry1.Style {Width("40%")}]; append(row1, entry1);
Text オブジェクトを最初の行にも追加し、その行をテーブルに追加します。
entry2 = TableEntry(p);
entry2.Style = [entry2.Style {Width("60%")}];
append(row1, entry2);
append(t, row1);
新しい行を作成し、ヒストグラム イメージを唯一のエントリとして追加します。データ テーブルは、最初の列が 1 行目と 2 行目両方とも既に埋まっているため、ヒストグラムは 2 列目に配置されます。
row2 = TableRow;
entry3 = TableEntry;
h.Style = [h.Style histStyle];
append(entry3, h);
append(row2, entry3);
entry3.Style = [entry3.Style {Width('60%')}];
append(t,row2);
レポートを生成して表示します。
append(rpt,t); close(rpt); rptview(rpt);