taeko111
@taeko111

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Plesanter 複数テーブル(リンク)しているデータを取得してEXCEL出力したい

Plesanter 複数テーブル(リンク)しているデータを取得してEXCEL出力したい

現在、Plesanterより開いているデータの情報をEXCEL出力しています。
ただ、メインテーブルよりリンクするテーブルのデータも取得して
EXCELへ出力したいです。

例)
①親テーブル 
②子テーブル1 
③子テーブル2
④子テーブル3

上記の親テーブルからリンクする子テーブル1~3までをリンクしたデータを
EXCELテンプレートへ出力したいです。

イメージは以下のようなデータになります。
(親テーブル.項目1,子テーブル1.項目2,子テーブル2.項目3,子テーブル3.項目4)

複数のサイトのデータを結合しEXCELテンプレート出力する方法を教えていただきたいです。

現在は、親テーブル開いているデータをEXCELテンプレートへ出力しています。

~スクリプトタブ~

$p.events.on_editor_load = function () {
  $('#GoBack').after('<button id="ID" class="button button-icon ui-button ui-corner-all ui-widget applied" type="button" onclick="excel02();" data-icon="ui-icon-calculator"><span class="ui-button-icon ui-icon ui-icon-calculator"></span><span class="ui-button-icon-space"> </span>Excel出力</button>');
};

~HTML~

v<script type="text/javascript">
function excel01() {
  const em = new PleasanterExcelMaker();
  let workbook;
  em.ExcelDownloadItemAttach(80015,'A','wbs_excel01.xlsx')
  .then(function(value){
    workbook = value;
    let data = {"ApiVersion": 1.0, "View": em.getFilter()}
    data.View.ApiDataType = "KeyValues";
    data.View.ApiColumnKeyDisplayType = "ColumnName";
    data.View.GridColumns = ["IssueId","Ver","Title","Body","StartTime","CompletionTime","WorkValue","ProgressRate","RemainingWorkValue","Status","ClassA","ClassB","ClassC","Owner","Manager"];
    console.log(data);
    em.ApiGet(0, data)
    .then(function(value){
      let sheet = workbook.worksheets[0];
      sheet.name = "サンプル01";
      let rset = value.data.Response.Data;
      console.log(sheet);
      console.log(rset);
      for( var c=0; c<Object.keys(rset).length; c++) {
          var row = 4+c;
          sheet.getCell(`A${row}`).value = rset[c].IssueId;
          sheet.getCell(`B${row}`).value = rset[c].ClassA;
          sheet.getCell(`C${row}`).value = rset[c].ClassB;
          sheet.getCell(`D${row}`).value = rset[c].ClassC;
          sheet.getCell(`E${row}`).value = rset[c].Title;
          sheet.getCell(`F${row}`).value = rset[c].Body;
          sheet.getCell(`G${row}`).value = rset[c].Manager;
          sheet.getCell(`H${row}`).value = rset[c].Owner;
          let t;
          t = new Date(rset[c].StartTime);
          sheet.getCell(`I${row}`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
          t = new Date(rset[c].CompletionTime);
          sheet.getCell(`J${row}`).value = t.getFullYear() + "/" + (t.getMonth()+1) + "/" + t.getDate();
          sheet.getCell(`K${row}`).value = rset[c].WorkValue;
          sheet.getCell(`K${row}`).numFmt = '0"h"'
          sheet.getCell(`L${row}`).value = rset[c].ProgressRate;
          sheet.getCell(`L${row}`).numFmt = '0.0"%"'
          sheet.getCell(`M${row}`).value = rset[c].RemainingWorkValue;
          sheet.getCell(`M${row}`).numFmt = '0.0"h"'
          sheet.getCell(`N${row}`).value = rset[c].Status;
          sheet.getCell(`O${row}`).value = rset[c].Ver;
        }
        em.SaveAs(workbook);
    });
  });
}

自分で解決した事

上記のスクリプトとHTMLで親テーブルのデータをExcelを出力しています。
複数テーブルを結合して帳票へ出力する方法を教えてください。

拡張SQLやJSON等 記事を読んでいますが
理解ができず申し訳ございません。
ご教授をお願い致します。

0

1Answer

Plesanterを知らないですが、一つのテーブルに対して出力可能だったら、一つのビューでも大丈夫のはずです。
ビューを作って、複数のテーブルをjoinしたらいかがですか。

1Like

Your answer might help someone💌