    001/*
    002 * Copyright (c) 2009 The openGion Project.
    003 *
    004 * Licensed under the Apache License, Version 2.0 (the "License");
    005 * you may not use this file except in compliance with the License.
    006 * You may obtain a copy of the License at
    007 *
    008 *     http://www.apache.org/licenses/LICENSE-2.0
    009 *
    010 * Unless required by applicable law or agreed to in writing, software
    011 * distributed under the License is distributed on an "AS IS" BASIS,
    012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
    013 * either express or implied. See the License for the specific language
    014 * governing permissions and limitations under the License.
    015 */
    016package org.opengion.hayabusa.taglib;
    017
    018import org.opengion.hayabusa.common.HybsSystem;
    019import org.opengion.hayabusa.common.HybsSystemException;
    020import org.opengion.hayabusa.db.DBTableModel;
    021import org.opengion.hayabusa.io.TableWriter;
    022import org.opengion.fukurou.util.FileUtil;
    023import org.opengion.fukurou.util.HybsEntry;
    024import org.opengion.fukurou.system.Closer ;
    025import org.opengion.fukurou.util.StringUtil ;
    026import org.opengion.fukurou.util.ToString;                                              // 6.1.1.0 (2015/01/17)
    027// import org.opengion.fukurou.model.FileOperation;                             // 8.0.0.1 (2021/10/08)
    028import org.opengion.hayabusa.io.HybsFileOperationFactory;               // 8.0.0.1 (2021/10/08)
    029
    030import static org.opengion.fukurou.util.StringUtil.nval ;
    031
    032// import jakarta.servlet.ServletResponse ;
    033// import jakarta.servlet.http.HttpServletResponse ;
    034// import jakarta.servlet.jsp.JspWriter ;
    035
    036import java.util.List;
    037import java.util.ArrayList;
    038import java.util.Locale;
    039import java.io.File;
    040import java.io.OutputStream;
    041import java.io.PrintWriter;
    042import java.io.FileOutputStream;
    043import java.io.BufferedOutputStream;                            // 6.0.4.0 (2014/11/28)
    044import java.io.ByteArrayOutputStream;
    045import java.io.IOException;
    046import java.io.InputStream;                                                     // 6.0.4.0 (2014/11/28)
    047import java.io.FileInputStream;                                         // 6.0.4.0 (2014/11/28)
    048import java.io.BufferedInputStream;                                     // 6.0.4.0 (2014/11/28)
    049// import java.io.FileNotFoundException;                        // 8.0.0.1 (2021/10/08)
    050
    051import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;                       // 6.0.4.0 (2014/11/28)
    052import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;        // 6.0.4.0 (2014/11/28)
    053import org.apache.commons.compress.utils.IOUtils;                                                       // 6.0.4.0 (2014/11/28)
    054
    055/**
    056 * DBTableModelｵﾌﾞｼﾞｪｸﾄを指定のﾌｧｲﾙに出力するﾀｸﾞです。
    057 *
    058 * ﾃﾞｰﾀ(DBTableModel)と、ｺﾝﾄﾛｰﾗ(WriteTableTagForm)を与えて、
    059 * 外部からｺﾝﾄﾛｰﾙすることで、各種形式で ﾃﾞｰﾀ(DBTableModel)を表示できます。
    060 * writeTableﾀｸﾞ に対して、ｺﾏﾝﾄﾞを与えることにより、内部のｺﾝﾄﾛｰﾗの
    061 * 実装に対応した、 形式でﾃﾞｰﾀを作成します。
    062 *
    063 * @og.formSample
    064 * ●形式：
    065 *     &lt;og:writeTable
    066 *         fileURL   = "{&#064;USER.ID}"    保存先ﾃﾞｨﾚｸﾄﾘ名
    067 *         filename  = "{&#064;filename}"   保存ﾌｧｲﾙ名
    068 *         encode    = "UnicodeLittle"      保存ﾌｧｲﾙｴﾝｺｰﾄﾞ名
    069 *     /&gt;
    070 *
    071 * ●body：あり(EVAL_BODY_BUFFERED:BODYを評価し、{&#064;XXXX} を解析します)
    072 *
    073 * ●Tag定義：
    074 *   &lt;og:writeTable
    075 *       writerClass        【TAG】実際に書き出すｸﾗｽ名の略称(TableWriter_**** ｸﾗｽの ****)を指定します
    076 *                                                                      (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])
    077 *       separator          【TAG】可変長ﾌｧｲﾙを作成するときの項目区切り文字をｾｯﾄします(初期値:TableWriter#TAB_SEPARATOR[= ])
    078 *       headerSequence     【TAG】DBTableModelの出力順(LNSCD など)をｾｯﾄします。(7.2.6.1 (2020/07/17) H追加)
    079 *       fileURL            【TAG】ﾌｧｲﾙ保存先ﾃﾞｨﾚｸﾄﾘ名を指定します(初期値:FILE_URL[={@og.value SystemData#FILE_URL}])
    080 *       baseURL            【TAG】ﾌｧｲﾙ保存先ﾃﾞｨﾚｸﾄﾘ名を指定します(初期値:ｺﾝﾃｷｽﾄﾊﾟｽ) 7.2.7.0 (2020/08/07)
    081 *       filename           【TAG】ﾌｧｲﾙを作成するときのﾌｧｲﾙ名をｾｯﾄします(初期値:FILE_FILENAME[={@og.value SystemData#FILE_FILENAME}])
    082 *       encode             【TAG】ﾌｧｲﾙを作成するときのﾌｧｲﾙｴﾝｺｰﾃﾞｨﾝｸﾞ名をｾｯﾄします(初期値:FILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])
    083 *       beforeDelete       【TAG】事前にﾌｧｲﾙを削除するかどうかをｾｯﾄします (初期値:false)
    084 *       fileAppend         【TAG】追加ﾓｰﾄﾞで書き込むかどうか[true/false]を指定します(初期値:false[新規ﾓｰﾄﾞ])
    085 *       zip                【TAG】結果をﾌｧｲﾙに出力するときに、ZIPで圧縮するかどうか[true/false]を指定します(初期値:false)
    086 *       zipFilename        【TAG】ZIPﾌｧｲﾙを作成するときのZIPﾌｧｲﾙ名をｾｯﾄします(初期値:filename + ".zip")
    087 *       tableId            【TAG】(通常は使いません)sessionから所得する DBTableModelｵﾌﾞｼﾞｪｸﾄの ID
    088 *       scope              【TAG】ｷｬｯｼｭする場合のｽｺｰﾌﾟ[request/page/session/application]を指定します(初期値:session)
    089 *       useNumber          【TAG】行番号情報を、出力する/しない[true/false]を指定します(初期値:true)
    090 *       columns            【TAG】書き込み先ﾌｧｲﾙのｶﾗﾑ列を、外部(ﾀｸﾞ)よりCSV形式で指定します
    091 *       omitNames          【TAG】書き込み対象外のｶﾗﾑ列を、外部(ﾀｸﾞ)よりCSV形式で指定します
    092 *       useRenderer        【TAG】書込処理でｺｰﾄﾞﾘｿｰｽのﾗﾍﾞﾙ変換を行うかどうかを指定します
    093 *                                      (初期値:USE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])
    094 *       selectedAll        【TAG】ﾁｪｯｸ行のみを対象にするかを指定します(初期値:true)
    095 *       useLocal           【TAG】ｼｽﾃﾑ定数でｸﾗｳﾄﾞ設定されていても、ｸﾗｳﾄﾞ環境を使用しない場合、trueを指定します(初期値:false) 8.0.1.0 (2021/10/29)
    096 *   ※  sheetName          【TAG】EXCELﾌｧｲﾙを書き出すときのｼｰﾄ名を設定します
    097 *   ※  refFileURL         【TAG】EXCEL雛型参照ﾌｧｲﾙのﾃﾞｨﾚｸﾄﾘ名をｾｯﾄします
    098 *   ※  refFilename        【TAG】EXCEL雛型参考ﾌｧｲﾙ名をｾｯﾄします
    099 *   ※  refSheetName       【TAG】EXCEL雛型参考ﾌｧｲﾙのｼｰﾄ名を設定します
    100 *   ※  sheetOverwrite     【TAG】EXCELでsheetNameでの指定ｼｰﾄ名に対して上書きを行うかどうかを指定します。
    101 *   ※  recalcSheetName    【TAG】EXCELで、出力処理の最後にｾﾙの計算式の再計算をさせるｼｰﾄ名をCSV形式で指定します。
    102 *   ※  fontName           【TAG】EXCEL出力時のﾃﾞﾌｫﾙﾄﾌｫﾝﾄ名を設定します
    103 *                                      (初期値:TABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])
    104 *   ※  fontPoint          【TAG】EXCEL出力時のﾃﾞﾌｫﾙﾄﾌｫﾝﾄﾎﾟｲﾝﾄ数を設定します
    105 *                                      (初期値:TABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])
    106 *   ※  skipRowCount       【TAG】(通常は使いません)EXCEL出力時のﾃﾞｰﾀの書き込み開始位置を設定します
    107 *   ※  useCellStyle       【TAG】EXCEL出力時に、ﾃﾞｰﾀを書き込んだ範囲に罫線を入れるかどうかを指定します(初期値:false)
    108 *   ※  useAutoCellSize    【TAG】EXCEL出力時に、ｾﾙの幅をﾃﾞｰﾀの幅に自動的に合わせるかどうかを指定します(初期値:false)
    109 *   ※  useActiveWorkbook  【TAG】EXCEL出力時に、ｾﾙの有効範囲を設定するかどうかを指定します(初期値:false)
    110 *   ※  pageBreakColumn    【TAG】EXCEL出力時に、ｼｰﾄ変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がｼｰﾄ名になります)
    111 *   ※  fileBreakColumn    【TAG】EXCEL出力時に、ﾌｧｲﾙ名を変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がﾌｧｲﾙ名になります)
    112 *   ※  hyperLinkColumn    【TAG】EXCEL出力時に、Hyperlinkを作成するｷｰとなるｶﾗﾑ名と値となるｶﾗﾑ名を指定します
    113 *   ※  addTitleSheet      【TAG】EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
    114 *       language           【TAG】ﾀｸﾞ内部で使用する言語ｺｰﾄﾞ[ja/en/zh/…]を指定します
    115 *       caseKey            【TAG】このﾀｸﾞ自体を利用するかどうかの条件ｷｰを指定します(初期値:null) 5.7.7.2 (2014/06/20)
    116 *       caseVal            【TAG】このﾀｸﾞ自体を利用するかどうかの条件値を指定します(初期値:null) 5.7.7.2 (2014/06/20)
    117 *       caseNN             【TAG】指定の値が、null/ｾﾞﾛ文字列 でない場合(Not Null=NN)は、このﾀｸﾞは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    118 *       caseNull           【TAG】指定の値が、null/ｾﾞﾛ文字列 の場合は、このﾀｸﾞは使用されます(初期値:判定しない) 5.7.7.2 (2014/06/20)
    119 *       caseIf             【TAG】指定の値が、true/TRUE文字列の場合は、このﾀｸﾞは使用されます(初期値:判定しない)
    120 *       debug              【TAG】ﾃﾞﾊﾞｯｸﾞ情報を出力するかどうか[true/false]を指定します(初期値:false)
    121 *   &gt;   ... Body ...
    122 *   &lt;/og:writeTable&gt;
    123 *
    124 * 【廃止】6.9.5.0 (2018/04/23) 物理削除
    125 *   //  direct             【廃止】結果をﾀﾞｲﾚｸﾄにEXCEL起動するかどうか[true/false]を指定します(初期値:false[ﾌｧｲﾙ])  6.9.5.0 (2018/04/23) 物理削除
    126 *   //  disposition        【廃止】Content-Disposition (inline:埋め込む/attachment:ﾀﾞｲｱﾛｸﾞを起動)を指定します(初期値:attachment)  6.9.5.0 (2018/04/23) 物理削除
    127 *
    128 *
    129 * ●使用例
    130 *     &lt;og:writeTable ･････ &gt;
    131 *         &lt;og:writeTableParam
    132 *             key  = "Tablename"  value="GE12"
    133 *         /&gt;
    134 *         &lt;og:writeTableParam
    135 *             key  = "First"             First:最初に登録
    136 *         &gt;
    137 *                      insert into GE12bk
    138 *                         select * from GE12
    139 *                         where SYSTEM_ID='**'
    140 *         &lt;/og:writeTableParam
    141 *         &lt;og:writeTableParam
    142 *             key  = "First"             First:の２番目に登録
    143 *         &gt;
    144 *              delete from GE12 where SYSTEM_ID='**' and KBSAKU='0'
    145 *         &lt;/og:writeTableParam
    146 *         &lt;og:writeTableParam
    147 *             key  = "Last"              Last:最後に登録
    148 *         &gt;
    149 *              update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0'
    150 *         &lt;/og:writeTableParam
    151 *     &lt;/og:writeTableParam
    152 *
    153 * @og.group ﾌｧｲﾙ出力
    154 *
    155 * @version  4.0
    156 * @author   Kazuhiko Hasegawa
    157 * @since    JDK5.0,
    158 */
    159public class WriteTableTag extends CommonTagSupport {
    160        /** このﾌﾟﾛｸﾞﾗﾑのVERSION文字列を設定します  {@value} */
    161        private static final String VERSION = "8.0.1.0 (2021/10/29)" ;
    162        private static final long serialVersionUID = 801020211029L ;
    163
    164        private final String  BASE_URL  = HybsSystem.sys( "FILE_URL" );
    165
    166        private String  separator               = TableWriter.TAB_SEPARATOR;     // 項目区切り文字
    167        private String  headerSequence  ;                                       // ﾍｯﾀﾞｰ項目の並び順
    168        private String  fileURL                 = BASE_URL;
    169        private String  filename                = HybsSystem.sys( "FILE_FILENAME" );   // ﾌｧｲﾙ名
    170        private String  sheetName               = "Sheet1" ;            // 3.5.4.2 (2003/12/15)
    171        private String  refFileURL              = BASE_URL;                     // 3.5.4.3 (2004/01/05)
    172        private String  refFilename     ;                                       // 3.5.4.3 (2004/01/05)
    173        private String  refSheetName    ;                                       // 3.5.4.3 (2004/01/05)
    174        private String  fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
    175        private String  fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
    176        private String  encode                  = HybsSystem.sys( "FILE_ENCODE" );      // ﾌｧｲﾙｴﾝｺｰﾃﾞｨﾝｸﾞ  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
    177        private String  writerClass     ;                                                                                                               // 6.2.0.0 (2015/02/27) 個人設定可
    178        private boolean fileAppend              ;                                       // ﾌｧｲﾙをAPPENDﾓｰﾄﾞで出力するか
    179//      private boolean direct                  ;                                       // 6.9.5.0 (2018/04/23) 廃止
    180        private boolean zip                     ;
    181        private String  zipFilename             ;                                       // 6.0.4.0 (2014/11/28) Zipﾌｧｲﾙ名を外部から与えられるように修正
    182//      private String  disposition     = "attachment";         // 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ⇒ attachment 6.9.5.0 (2018/04/23) 廃止
    183
    184        private transient DBTableModel table ;
    185        private String  tableId                 = HybsSystem.TBL_MDL_KEY ;
    186        private String  directory               ;                                       // 3.8.6.0 (2006/08/23)
    187
    188        private transient List<HybsEntry> param ;                       // 4.0.0 (2005/02/28)
    189
    190        private boolean useNumber               = true;                         // 3.7.0.2 (2005/02/14)
    191        // 4.0.0 (2005/12/31) 外部よりｶﾗﾑ列(CSV形式)を指定できるようにする。
    192        private String          columns         ;
    193        // 6.1.0.0 (2014/12/26) 書き込み対象外のｶﾗﾑ列を、外部(ﾀｸﾞ)より指定する。
    194        private String          omitNames       ;                                       // 6.1.0.0 (2014/12/26)
    195
    196        // 5.2.1.0 (2010/10/01) 書込処理でｺｰﾄﾞﾘｿｰｽのﾗﾍﾞﾙ変換を行うかどうか
    197        private boolean useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
    198
    199        // 5.5.5.5 (2012/08/24) ﾁｪｯｸ対応
    200        private boolean selectedAll             = true;                         // 5.5.5.5 (2012/08/24)
    201
    202        private boolean useLocal                ;                                       // 8.0.1.0 (2021/10/29) ｸﾗｳﾄﾞ設定を使用しない場合は、true
    203
    204        // 5.5.9.1 (2012/12/07) 事前にﾌｧｲﾙを削除するかどうか。互換性のため、false に設定。推奨は、true
    205        private boolean beforeDelete    ;                                       // 5.5.9.1 (2012/12/07) 事前にﾌｧｲﾙを削除するかどうか。
    206
    207        private int             skipRowCount    ;                                       // 5.7.9.0 (2014/08/08) ﾃﾞｰﾀの書き込み開始位置設定
    208
    209        // 5.9.12.1 (2016/09/09)
    210        private boolean sheetOverwrite;                                         // 5.9.12.1 (2016/09/09)
    211        private String recalcSheetName;                                         // 5.9.12.1 (2016/09/09)
    212
    213        // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    214        private boolean useCellStyle            ;                       // EXCEL出力時に、ﾃﾞｰﾀを書き込んだ範囲に罫線を入れるかどうかを指定します
    215        private boolean useAutoCellSize         ;                       // EXCEL出力時に、ｾﾙの幅をﾃﾞｰﾀの幅に自動的に合わせるかどうかを指定します
    216        private boolean useActiveWorkbook       ;                       // EXCEL出力時に、ｾﾙの有効範囲を設定するかどうかを指定します
    217        private String  pageBreakColumn         ;                       // EXCEL出力時に、ｼｰﾄ変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がｼｰﾄ名になります)
    218        private String  fileBreakColumn         ;                       // EXCEL出力時に、ﾌｧｲﾙ名を変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がﾌｧｲﾙ名になります)
    219        private String  hyperLinkColumn         ;                       // EXCEL出力時に、Hyperlinkを作成するｷｰとなるｶﾗﾑ名と値となるｶﾗﾑ名を指定します
    220        private String  addTitleSheet           ;                       // EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
    221
    222        private File    localFile                       ;                       // 8.0.0.2 (2021/10/15) 一時的に利用するﾛｰｶﾙﾌｧｲﾙ
    223
    224        /**
    225         * ﾃﾞﾌｫﾙﾄｺﾝｽﾄﾗｸﾀｰ
    226         *
    227         * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor.
    228         */
    229        public WriteTableTag() { super(); }             // これも、自動的に呼ばれるが、空のﾒｿｯﾄﾞを作成すると警告されるので、明示的にしておきます。
    230
    231        /**
    232         * Taglibの開始ﾀｸﾞが見つかったときに処理する doStartTag() を ｵｰﾊﾞｰﾗｲﾄﾞします。
    233         *
    234         * @og.rev 5.5.9.1 (2012/12/07) 事前にﾌｧｲﾙを削除するかどうか（beforeDelete）ﾌﾗｸﾞを追加
    235         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    236         * @og.rev 6.0.4.0 (2014/11/28) Zipﾌｧｲﾙ名を、内部変数化。(将来的に引数化を容易にするため)
    237         * @og.rev 8.0.0.1 (2021/10/08) ｸﾗｳﾄﾞ対応
    238         * @og.rev 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    239         *
    240         * @return      後続処理の指示( EVAL_BODY_BUFFERED )
    241         */
    242        @Override
    243        public int doStartTag() {
    244                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    245                if( !useTag() ) { return SKIP_BODY ; }
    246
    247                // 8.0.0.2 (2021/10/15) zipやﾃﾞｨﾚｸﾄﾘ作成なども含めた処理を行う。
    248                localFile = makeLocalFile();
    249
    250//              directory = HybsSystem.url2dir( fileURL );              // 5.5.9.1 (2012/12/07) doEndTag() から移動
    251//              if( zip && zipFilename == null ) { zipFilename = filename + ".zip"; }           // 6.0.4.0 (2014/11/28)
    252
    253                // 5.5.9.1 (2012/12/07) 事前にﾌｧｲﾙを削除するかどうか
    254                if( beforeDelete && !fileAppend ) {
    255//                      File delFile = null;
    256//                      if( zip ) {
    257//                              delFile = new File( directory,zipFilename );                            // 6.0.4.0 (2014/11/28)
    258        //                      // 一旦、ﾛｰｶﾙにﾌｧｲﾙを作成するので、削除はﾛｰｶﾙ側
    259        //                      delFile = HybsFileOperationFactory.create( directory, zipFilename );    // 8.0.0.1 (2021/10/08)
    260//                      }
    261//                      else {
    262        //                      // 一旦、ﾛｰｶﾙにﾌｧｲﾙを作成するので、削除はﾛｰｶﾙ側
    263//                              delFile = new File( directory,filename );
    264        //                      delFile = HybsFileOperationFactory.create( directory, filename );       // 8.0.0.1 (2021/10/08)
    265//                      }
    266                        // 6.0.2.4 (2014/10/17) RV  java.io.File.delete() の例外的戻り値を無視しています。
    267//                      if( delFile.exists() && !delFile.delete() ) {
    268                        if( localFile.exists() && !localFile.delete() ) {
    269//                                      final String errMsg = "事前にﾌｧｲﾙを削除するのに失敗しました。filename=[" + delFile +"]" ;
    270                                        final String errMsg = "事前にﾌｧｲﾙを削除するのに失敗しました。filename=[" + localFile +"]" ;
    271                                        System.err.println( errMsg );
    272                        }
    273                }
    274
    275                return EVAL_BODY_BUFFERED ;     // Body を評価する。( extends BodyTagSupport 時)
    276        }
    277
    278        /**
    279         * Taglibの終了ﾀｸﾞが見つかったときに処理する doEndTag() を ｵｰﾊﾞｰﾗｲﾄﾞします。
    280         *
    281         * @og.rev 2.1.3.1 (2002/12/13) ContentType を、x-msexcel から vnd.ms-excel に変更した。
    282         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    283         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、ｴﾝｺｰﾄﾞ情報を取得する。
    284         * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
    285         * @og.rev 3.2.0.0 (2003/05/22) GZIPOutputStream を使用していたが、ZipOutputStream に変更。
    286         * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を、OutputStream に変更。
    287         * @og.rev 3.5.4.3 (2004/01/05) 引数を、 PrintWriter に戻す。
    288         * @og.rev 3.6.0.2 (2004/10/04) EXCELﾀﾞｲﾚｸﾄ出力時にﾌｧｲﾙｴﾝﾄﾞまで出力されない不具合対策
    289         * @og.rev 3.8.0.9 (2005/10/17) disposition属性を使用できるように変更します。
    290         * @og.rev 3.8.6.0 (2006/08/23) ﾌｫﾙﾀﾞがない場合は、複数階層分のﾌｫﾙﾀﾞを自動で作成します。
    291         * @og.rev 4.3.4.3 (2008/12/22) Excel出力の判別方法を前方一致に変更
    292         * @og.rev 5.1.6.0 (2010/05/01) 画面帳票作成機能対応
    293         * @og.rev 5.5.2.0 (2012/05/01) ZIP時にもencodeが有効にする
    294         * @og.rev 5.5.5.5 (2012/08/24) selectedAllの処理を追加
    295         * @og.rev 5.5.9.1 (2012/12/07) beforeDeleteﾌﾗｸﾞの追加に伴う、ﾛｼﾞｯｸ変更
    296         * @og.rev 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    297         * @og.rev 6.0.4.0 (2014/11/28) Zip処理を、ZipOutputStream → ZipArchiveOutputStream に変更
    298         * @og.rev 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
    299         * @og.rev 6.9.5.0 (2018/04/23) direct 廃止(false固定)
    300         * @og.rev 5.10.23.0 (2020/06/01) 書込み件数をﾘｸｴｽﾄ変数WRITE.COUNTに出力
    301         * @og.rev 8.0.0.1 (2021/10/08) ｸﾗｳﾄﾞ対応
    302         * @og.rev 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    303         *
    304         * @return      後続処理の指示
    305         */
    306        @Override
    307        public int doEndTag() {
    308                debugPrint();           // 4.0.0 (2005/02/28)
    309
    310                // 5.7.7.2 (2014/06/20) caseKey,caseVal,caseNN,caseNull 属性を追加
    311                if( !useTag() ) { return EVAL_PAGE ; }
    312
    313                table = (DBTableModel)getObject( tableId );
    314                if( ! selectedAll ){            // 5.5.5.5 (2012/08/24)
    315                        table = getSelRowsTable( table );
    316                }
    317
    318                int tblcnt = 0;         // 5.10.23.0 (2020/06/01)
    319                if( table != null && table.getRowCount() > 0 ) {
    320                        // 8.0.0.2 (2021/10/15) localFileは、zipやﾃﾞｨﾚｸﾄﾘ作成なども含めた処理を行う。
    321//                      final File dir = new File( directory );
    322        //              ｸﾗｳﾄﾞはﾃﾞｨﾚｸﾄﾘ作成不要
    323        //              final File dir = HybsFileOperationFactory.create( directory );          // 8.0.0.1 (2021/10/08)
    324
    325//                      if( ! dir.exists() && ! dir.mkdirs() ) {
    326//                              final String errMsg = "ﾃﾞｨﾚｸﾄﾘの作成に失敗しました。[" + directory + "]";
    327//                              throw new HybsSystemException( errMsg );
    328//                      }
    329
    330                        // 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
    331                        if( writerClass == null ) {
    332                                writerClass = nval( sys( "TABLE_WRITER_DEFAULT_CLASS" ) , "Default" );          // 6.2.0.0 (2015/02/27) 個人設定可
    333                        }
    334
    335                        PrintWriter pw = null;
    336                        ByteArrayOutputStream bt = null ;
    337                        try {
    338//                              // 6.9.5.0 (2018/04/23) 廃止(false固定)
    339//                              if( direct ) {
    340//                                      // 6.0.4.0 (2014/11/28) 共通処理を、if( zip ) の前後でまとめます。
    341//                                      bt = new ByteArrayOutputStream();
    342//                                      pw = new PrintWriter( bt );
    343//                                      create( pw ) ;
    344//                                      pw.flush();                             // 3.6.0.2 (2004/10/04)
    345//                                      final ServletResponse response = pageContext.getResponse() ;
    346//                                      if( zip ) {
    347//                                              ((HttpServletResponse)response).addHeader( "Content-Encoding","gzip" );
    348//
    349//                                              final ZipArchiveOutputStream gzip = new ZipArchiveOutputStream(bt);     // 6.0.4.0 (2014/11/28)
    350//                                              gzip.finish() ;
    351//                                              response.setContentLength( bt.size() );
    352//
    353//                                              gzip.closeArchiveEntry();       // 6.0.4.0 (2014/11/28)
    354//                                              gzip.finish() ;                         // 6.0.4.0 (2014/11/28)
    355//                                              Closer.ioClose( gzip );         // 6.0.4.0 (2014/11/28)
    356//
    357//                                      }
    358//                                      else {
    359//                                              response.setContentType( "application/vnd.ms-excel; charset=" + encode );
    360//      //                                      response.setContentType( "application/x-msexcel; charset=" + encode );
    361//      //                                      response.setContentType( "text/comma-separated-values ; charset=" + encode );
    362//      //                                      ((HttpServletResponse)response).setHeader( "contentType","application/x-msexcel; charset=Shift_JIS" );
    363//      //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","attachment; filename=\"" + filename + "\"" );
    364//      //                                      ((HttpServletResponse)response).setHeader( "Content-Disposition","inline; filename=\"" + filename + "\"" );
    365//                                              // 3.8.0.9 (2005/10/17) disposition属性を使用できるように変更します。
    366//                                              ((HttpServletResponse)response).setHeader( "Content-Disposition",disposition + "; filename=\"" + filename + "\"" );
    367//
    368//                                      }
    369//                                      final JspWriter out = pageContext.getOut();
    370//                                      out.clear();
    371//                                      out.print( bt );
    372//                                      out.flush();                    // 3.6.0.2 (2004/10/04)
    373//                              }
    374//                              else {
    375                                        final boolean isExcel =  writerClass.toUpperCase(Locale.JAPAN).startsWith("EXCEL")
    376                                                                                  || writerClass.toUpperCase(Locale.JAPAN).startsWith("CALC");  // 6.0.4.0 (2014/11/28)
    377
    378                                        // 3.2.0.0 (2003/05/22) GZIPOutputStream を使用していたが、ZipOutputStream に変更。
    379                                        if( zip ) {
    380                                                InputStream is = null;                  // 6.0.4.0 (2014/11/28)
    381                                                if( isExcel ) {                                 // 6.0.4.0 (2014/11/28)
    382                                                        create( null );                         // 6.0.4.0 (2014/11/28)
    383                                                }
    384                                                else{
    385                                                        bt = new ByteArrayOutputStream();
    386                                                        pw = getPrintWriter( bt );      // ﾛｰｶﾙにﾌｧｲﾙ作成
    387                                                        create( pw ) ;                          // 6.0.4.0 (2014/11/28)
    388                                                        pw.flush();                                     // 6.0.4.0 (2014/11/28)
    389                                                }
    390
    391                                                // 6.0.4.0 (2014/11/28) Zip処理を、ZipOutputStream → ZipArchiveOutputStream に変更
    392                                                ZipArchiveOutputStream gzip = null;                     // 6.0.4.0 (2014/11/28)
    393                                                try {
    394                                                        gzip = new ZipArchiveOutputStream(
    395                                                                                new BufferedOutputStream (
    396                                                                                        new FileOutputStream (
    397                                                                                                localFile )));                                                  // 8.0.0.2 (2021/10/15)
    398//                                                                                              new File( directory,zipFilename ))));   // 6.0.4.0 (2014/11/28)
    399
    400                                                        gzip.setEncoding( "Windows-31J" );
    401                                                        gzip.putArchiveEntry( new ZipArchiveEntry( filename ) );
    402                                                        // 6.0.4.0 (2014/11/28) Excel処理とText処理が異なる。
    403                                                        // bt.writeTo( gzip );
    404                                                        if( isExcel ) {
    405                                                                // 6.0.4.0 (2014/11/28) Excel の場合は、直接書き込むのではなく、ﾌｧｲﾙを読み込んで Zip化する。
    406//                                                              final File xlsTemp = new File( directory,filename );
    407                                                                final File xlsTemp = localFile ;                // 8.0.0.2 (2021/10/15) 修正箇所を増やさないだけ。
    408                                                                is = new BufferedInputStream( new FileInputStream( xlsTemp ) );
    409                                                                IOUtils.copy( is,gzip );
    410                                                                Closer.ioClose( is );
    411                                                                if( xlsTemp.exists() && !xlsTemp.delete() ) {
    412                                                                        final String errMsg = "ExcelをZip化する時のTempﾌｧｲﾙを削除するのに失敗しました。filename=[" + xlsTemp +"]" ;
    413                                                                        System.err.println( errMsg );
    414                                                                }
    415                                                        }
    416                                                        else {
    417                                                                bt.writeTo( gzip );
    418                                                        }
    419                                                        gzip.closeArchiveEntry();                               // 6.0.4.0 (2014/11/28)
    420                                                        gzip.finish() ;
    421                                                }
    422                                                finally {
    423                                                        Closer.ioClose( gzip );         // 4.0.0.0 (2006/01/31) close 処理時の IOException を無視
    424                                                        Closer.ioClose( is );           // 6.0.4.0 (2014/11/28) is は、null でも処理する。
    425                                                }
    426                                        }
    427                                        else {
    428                                                if( isExcel ) {                                 // 6.0.4.0 (2014/11/28)
    429                                                        create( null );
    430                                                }
    431                                                else {
    432                                                        pw = getPrintWriter();          // ﾛｰｶﾙにﾌｧｲﾙ作成
    433                                                        create( pw );
    434                                                        pw.flush();                                     // 3.6.0.2 (2004/10/04)
    435                                                }
    436                                        }
    437//                              }
    438                                tblcnt = table.getRowCount();                   // 5.10.23.0 (2020/06/01)
    439                        }
    440                        catch( final IOException ex ) {
    441                                final String errMsg = "ﾃｰﾌﾞﾙ出力時に、IOｴﾗｰが発生しました。" + toString();
    442                                throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数の並び順変更
    443                        }
    444                        finally {
    445                                Closer.ioClose( pw );           // 4.0.0 (2006/01/31) close 処理時の IOException を無視
    446                                Closer.ioClose( bt );           // 4.0.0 (2006/01/31) close 処理時の IOException を無視
    447                        }
    448
    449                        // 8.0.0.2 (2021/10/15) ﾛｰｶﾙに出力したﾌｧｲﾙを、ｸﾗｳﾄﾞに移す。
    450                        HybsFileOperationFactory.local2cloud( useLocal,() -> localFile );               // 8.0.0.2 (2021/10/15)
    451
    452//                      // 8.0.0.1 (2021/10/08) ｸﾗｳﾄﾞ上の場合は、ｽﾄﾚｰｼﾞに登録する
    453//                      FileOperation fileOperation = HybsFileOperationFactory.create( filename );
    454//                      if(!fileOperation.isLocal()){
    455//                      if( HybsFileOperationFactory.useCloud() ){
    456//                              if(zip){
    457//                                      entryStorage(zipFilename);
    458//                              }else{
    459//                                      entryStorage(filename);
    460//                              }
    461//                      }
    462                }
    463                setRequestAttribute( "WRITE.COUNT" , String.valueOf( tblcnt ) ); // 5.10.23.0 (2020/06/01)
    464
    465                return EVAL_PAGE ;
    466        }
    467
    468        /**
    469         * ﾛｰｶﾙﾌｧｲﾙを作成します。
    470         *
    471         * ﾃﾞｨﾚｸﾄﾘの存在ﾁｪｯｸとなければ作成します。
    472         * zipﾌｧｲﾙの指定がされて、zipFilenameが指定されていない場合は、filename + ".zip" とします。
    473         *
    474         * @og.rev 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    475         *
    476         * @return      ﾛｰｶﾙﾌｧｲﾙｵﾌﾞｼﾞｪｸﾄ
    477         */
    478        private File makeLocalFile() {
    479                if( filename == null ) {
    480                        final String errMsg = "ﾌｧｲﾙ名がｾｯﾄされていません。";
    481                        throw new HybsSystemException( errMsg );
    482                }
    483                directory = HybsSystem.url2dir( fileURL );                      // EXCEL作成時に使用するので、ｲﾝｽﾀﾝｽ変数にｾｯﾄ
    484
    485                // 5.6.1.0 (2013/02/01)
    486                final File dir = new File(directory);
    487                if( ! dir.exists() && ! dir.mkdirs() ) {
    488                        final String errMsg = "ﾃﾞｨﾚｸﾄﾘの作成に失敗しました。[" + directory + "]";
    489                        throw new HybsSystemException( errMsg );
    490                }
    491
    492                final String newFilename ;
    493                if( zip ) {
    494                        if( zipFilename == null ) { newFilename = filename + ".zip"; }
    495                        else {                                          newFilename = zipFilename ; }
    496                }
    497                else {
    498                        newFilename = filename;
    499                }
    500
    501                return new File( directory,newFilename );
    502        }
    503
    504//      /**
    505//       * 指定されたﾌｧｲﾙをｸﾗｳﾄﾞ上のｽﾄﾚｰｼﾞに登録します。
    506//       * 処理後に登録元のﾌｧｲﾙを削除します。
    507//       *
    508//       * @og.rev 5.10.9.0 (2019/03/01) ｸﾗｳﾄﾞｽﾄﾚｰｼﾞ対応を追加
    509//       * @og.rev 8.0.0.1 (2021/10/08) ｸﾗｳﾄﾞ対応
    510//       * @og.rev 8.0.0.2 (2021/10/15) 削除(makeLocalFile() とlocal2cloudで対応)
    511//       *
    512//       * @param       trgFileName     対象のﾌｧｲﾙ名
    513//       */
    514//      private void entryStorage( final String trgFileName ) {
    515//              FileInputStream fis = null;
    516//              final String filePath = StringUtil.urlAppend( directory, trgFileName);
    517//              // ｻｰﾊﾞに作成されたﾌｧｲﾙをｽﾄﾚｰｼﾞに登録する
    518//              try{
    519//                      fis = new FileInputStream( filePath );
    520//
    521//                      final FileOperation fileOpp = HybsFileOperationFactory.create( filePath );
    522//                      fileOpp.write(fis);
    523//              } catch( final FileNotFoundException ex ){
    524//                      String errMsg = "ﾌｧｲﾙが見つかりません。path:" + filePath;
    525//                      throw new HybsSystemException( errMsg,ex );
    526//              } catch( final IOException ie ) {
    527//                      throw new HybsSystemException(ie.getMessage() );
    528//              } finally {
    529//                      Closer.ioClose(fis);
    530//              }
    531//
    532//              // 処理後のｻｰﾊﾞのﾌｧｲﾙは削除
    533//              final File file = new File(filePath);
    534//              file.delete();
    535//      }
    536
    537        /**
    538         * ﾀｸﾞﾘﾌﾞｵﾌﾞｼﾞｪｸﾄをﾘﾘｰｽします。
    539         * ｷｬｯｼｭされて再利用されるので、ﾌｨｰﾙﾄﾞの初期設定を行います。
    540         *
    541         * @og.rev 2.0.0.4 (2002/09/27) ｶｽﾀﾑﾀｸﾞの release() ﾒｿｯﾄﾞを、追加
    542         * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。
    543         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、ｴﾝｺｰﾄﾞ情報を取得する。
    544         * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
    545         * @og.rev 3.5.4.2 (2003/12/15) EXCELのｼｰﾄ名を指定できるように変更。
    546         * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参照ﾌｧｲﾙのURL,filenameを追加します。
    547         * @og.rev 3.8.5.3 (2006/08/07) writerClass 属性の初期値をｼｽﾃﾑﾘｿｰｽより取得します。
    548         * @og.rev 3.8.5.3 (2006/08/07) fontName 属性を追加します。
    549         * @og.rev 3.8.5.3 (2006/08/07) fontPoint 属性を追加します。
    550         * @og.rev 3.8.6.0 (2006/08/23) directory 属性を追加します。
    551         * @og.rev 4.0.0.0 (2005/02/28) XMLﾌｧｲﾙにｾｯﾄする、param を追加。
    552         * @og.rev 5.2.1.0 (2010/10/01) 書込処理でｺｰﾄﾞﾘｿｰｽのﾗﾍﾞﾙ変換を行うかどうか useRenderer 属性追加
    553         * @og.rev 5.5.5.5 (2012/08/24) selectedAll属性を追加
    554         * @og.rev 5.5.9.1 (2012/12/07) 事前にﾌｧｲﾙを削除するかどうか。互換性のため、false に設定。推奨は、true
    555         * @og.rev 5.7.9.0 (2014/08/08) ﾃﾞｰﾀの書き込み開始位置(skipRowCount)を設定
    556         * @og.rev 6.0.2.0 (2014/09/19) EXCEL関係機能追加(useCellStyle,useAutoCellSize,useActiveWorkbook,
    557         *                                                              pageBreakColumn,fileBreakColumn,hyperLinkColumn,addTitleSheet)
    558         * @og.rev 6.0.4.0 (2014/11/28) zipFilename属性を追加。
    559         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
    560         * @og.rev 6.2.0.0 (2015/02/27) EXCEL出力のparamLevel初期値変更 3:標準推奨 → 4:個人設定可
    561         * @og.rev 5.9.12.1 (2016/09/09) sheetOverwrite で、雛形ｼｰﾄの使用時に、元のｼｰﾄ名を使用します。
    562         * @og.rev 6.9.5.0 (2018/04/23) direct 廃止(false固定)
    563         * @og.rev 8.0.0.2 (2021/10/15) ﾛｰｶﾙﾌｧｲﾙとｸﾗｳﾄﾞﾌｧｲﾙ間の移動
    564         * @og.rev 8.0.1.0 (2021/10/29) useLocal 属性を追加。
    565         */
    566        @Override
    567        protected void release2() {
    568                super.release2();
    569                separator               = TableWriter.TAB_SEPARATOR;   // 項目区切り文字
    570                headerSequence  = null;                         // ﾍｯﾀﾞｰ項目の並び順
    571                fileURL                 = BASE_URL;
    572                filename                = HybsSystem.sys( "FILE_FILENAME" );   // ﾌｧｲﾙ名
    573                sheetName               = "Sheet1";                     // 3.5.4.2 (2003/12/15)
    574                beforeDelete    = false;                        // 5.5.9.1 (2012/12/07)
    575                refFileURL              = BASE_URL;                     // 3.5.4.3 (2004/01/05)
    576                refFilename     = null;                         // 3.5.4.3 (2004/01/05)
    577                refSheetName    = null;                         // 3.5.4.2 (2003/12/15)
    578                sheetOverwrite  = false;                        // 5.9.12.1 (2016/09/09)
    579                recalcSheetName = null;                         // 5.9.12.1 (2016/09/09)
    580                fontName                = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_NAME" );                   // 3.8.5.3 (2006/08/07)
    581                fontPoint               = HybsSystem.sys( "TABLE_WRITER_DEFAULT_FONT_POINTS" );                 // 3.8.5.3 (2006/08/07)
    582                encode                  = HybsSystem.sys( "FILE_ENCODE" );       // ﾌｧｲﾙｴﾝｺｰﾃﾞｨﾝｸﾞ  "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
    583                writerClass     = null;                                                                                                 // 6.2.0.0 (2015/02/27) 個人設定可
    584                fileAppend              = false;                        // ﾌｧｲﾙをAPPENDﾓｰﾄﾞで出力するか
    585//              direct                  = false;                        // 6.9.5.0 (2018/04/23) direct 廃止(false固定)
    586                zip                     = false;
    587                zipFilename             = null;                         // 6.0.4.0 (2014/11/28)
    588                table                   = null;
    589                tableId                 = HybsSystem.TBL_MDL_KEY ;
    590//              disposition     = "attachment";         // 3.8.0.9 (2005/10/17) 初期値変更 inline ⇒ attachment 6.9.5.0 (2018/04/23) 廃止
    591                param                   = null ;                        // 4.0.0 (2005/01/31)
    592                useNumber               = true;                         // 3.7.0.2 (2005/02/14)
    593                skipRowCount    = 0;                            // 5.7.9.0 (2014/08/08) ﾃﾞｰﾀの書き込み開始位置を設定
    594                directory               = null;                         // 3.8.6.0 (2006/08/23)
    595                columns                 = null;                         // 4.0.0 (2005/12/31)
    596                omitNames               = null;                         // 6.1.0.0 (2014/12/26)
    597                useRenderer             = HybsSystem.sysBool( "USE_TABLE_WRITER_RENDERER" );    // 5.2.1.0 (2010/10/01)
    598                selectedAll             = true;                         // 5.5.5.5 (2012/08/24)
    599                useLocal                = false;        // 8.0.1.0 (2021/10/29) ｸﾗｳﾄﾞ設定を使用しない場合は、true
    600
    601                // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    602                useCellStyle            = false;                // EXCEL出力時に、ﾃﾞｰﾀを書き込んだ範囲に罫線を入れるかどうかを指定します
    603                useAutoCellSize         = false;                // EXCEL出力時に、ｾﾙの幅をﾃﾞｰﾀの幅に自動的に合わせるかどうかを指定します
    604                useActiveWorkbook       = false;                // EXCEL出力時に、ｾﾙの有効範囲を設定するかどうかを指定します
    605                pageBreakColumn         = null;                 // EXCEL出力時に、ｼｰﾄ変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がｼｰﾄ名になります)
    606                fileBreakColumn         = null;                 // EXCEL出力時に、ﾌｧｲﾙ名を変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がﾌｧｲﾙ名になります)
    607                hyperLinkColumn         = null;                 // EXCEL出力時に、Hyperlinkを作成するｷｰとなるｶﾗﾑ名と値となるｶﾗﾑ名を指定します
    608                addTitleSheet           = null;                 // EXCEL出力時に、存在するSheet名一覧を作成する場合に、そのSheet名を指定します。
    609                localFile                       = null;                 // 8.0.0.2 (2021/10/15) 一時的に利用するﾛｰｶﾙﾌｧｲﾙ
    610        }
    611
    612        /**
    613         * TableWriter の実ｵﾌﾞｼﾞｪｸﾄを生成して，引数のPrintWriter に書きだします。
    614         *
    615         * EXCEL系は、自身で出力先のOutputStreamを作成するので、引数のPrintWriterを
    616         * 使わず、directory , filename から、生成します。
    617         *
    618         * @og.rev 3.5.4.1 (2003/12/01) 引数の PrintWriter を、OutputStream に変更。
    619         * @og.rev 3.5.4.2 (2003/12/15) lang 引数も table と同時に設定します。
    620         * @og.rev 3.5.4.2 (2003/12/15) TableWriter のｻﾌﾞｸﾗｽ名変更。
    621         * @og.rev 3.5.4.3 (2004/01/05) EXCEL雛型参考ﾌｧｲﾙを指定するように変更。
    622         * @og.rev 3.5.4.3 (2004/01/05) 引数を、 PrintWriter に戻す。
    623         * @og.rev 3.5.4.5 (2004/01/23) 文字ｴﾝｺｰﾄﾞを渡すように変更する。
    624         * @og.rev 3.5.6.0 (2004/06/18) 各種ﾌﾟﾗｸﾞｲﾝ関連付け設定を、ｼｽﾃﾑﾊﾟﾗﾒｰﾀ に記述します。
    625         * @og.rev 3.8.5.3 (2006/08/07) EXCEL時に fontName と fontPoint 属性をｾｯﾄします。
    626         * @og.rev 4.0.0.0 (2005/01/31) ｷｰの指定を、TableWriter. から、TableWriter_ に変更します。
    627         * @og.rev 4.0.0.0 (2005/12/31) 外部よりｶﾗﾑ列(CSV形式)を指定できるようにする。
    628         * @og.rev 5.2.1.0 (2010/10/01) 書込処理でｺｰﾄﾞﾘｿｰｽのﾗﾍﾞﾙ変換を行うかどうか設定 useRenderer 属性追加
    629         * @og.rev 5.7.9.0 (2014/08/08) ﾃﾞｰﾀの書き込み開始位置(skipRowCount)を設定
    630         * @og.rev 6.0.2.0 (2014/09/19) EXCEL関係機能追加(useCellStyle,useAutoCellSize,useActiveWorkbook,pageBreakColumn,fileBreakColumn)
    631         * @og.rev 6.0.4.0 (2014/11/28) NullPointerException が発生するので、事前にﾁｪｯｸします。
    632         * @og.rev 6.1.0.0 (2014/12/26) ﾃﾞﾊﾞｯｸﾞ情報を出力するかどうかを指定
    633         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
    634         * @og.rev 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。
    635         * @og.rev 6.4.3.3 (2016/03/04) HybsSystem.newInstance(String,String) への置き換え。
    636         * @og.rev 5.9.12.1 (2016/09/09) sheetOverwrite で、雛形ｼｰﾄの使用時に、元のｼｰﾄ名を使用します。
    637         *
    638         * @param       outPW   出力先のPrintWriterｵﾌﾞｼﾞｪｸﾄ
    639         */
    640        private void create( final PrintWriter outPW )  {
    641                // 5.2.1.0 (2010/10/01) writerClass で Renderer系の場合は、useRendererﾌﾗｸﾞに変更する。
    642                if( "ExcelRenderer".equalsIgnoreCase( writerClass ) ) {
    643                        writerClass = "Excel" ;
    644                        useRenderer = true;
    645                }
    646                else if( "Renderer".equalsIgnoreCase( writerClass ) ) {
    647                        writerClass = "Default" ;
    648                        useRenderer = true;
    649                }
    650
    651                final TableWriter writer = HybsSystem.newInstance( "TableWriter_" , writerClass );      // 3.5.5.3 (2004/04/09)
    652                writer.setDBTableModel( table,getLanguage() );
    653                writer.setSeparator( separator );
    654                writer.setHeaderSequence( headerSequence );
    655                writer.setEncode( encode );                                     // 3.5.4.5 (2004/01/23)
    656                writer.setAppend( fileAppend );                         // 3.5.4.2 (2003/12/15)
    657                if( param != null ) { writer.setParam( param ); }       // 4.0.0 (2005/01/31)
    658                writer.setUseNumber( useNumber );                       // 3.7.0.2 (2005/02/14)
    659        //      if( columns == null ) {
    660        //              columns = (String)getSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
    661        //              removeSessionAttribute( HybsSystem.TBL_WRITER_CLMS );
    662        //      }
    663                writer.setColumns( columns );                           // 4.0.0 (2005/12/31)
    664                writer.setOmitNames( omitNames );                       // 6.1.0.0 (2014/12/26)
    665                writer.setUseRenderer( useRenderer );           // 5.2.1.0 (2010/10/01)
    666                writer.setDebug( isDebug() );                           // 6.1.0.0 (2014/12/26) ﾃﾞﾊﾞｯｸﾞ情報を出力するかどうかを指定
    667                if( writer.isExcel() ) {                                        // 3.5.4.3 (2004/01/05)
    668                        writer.setSheetName( sheetName );
    669                        writer.setFilename( directory , filename );                                     // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    670                        if( refFileURL != null && refFilename != null ) {
    671                                writer.setRefFilename( HybsSystem.url2dir( refFileURL , refFilename ) );                        // 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加
    672                        }
    673                        if( refSheetName != null && refSheetName.length() > 0 ) {       // 5.7.9.0 (2014/08/08) nullﾁｪｯｸ
    674                                writer.setRefSheetName( refSheetName );
    675                        }
    676                        writer.setFontName( fontName )  ;                                                       // 5.7.9.0 (2014/08/08) nvalはずし
    677                        if( fontPoint != null && fontPoint.length() > 0 ) {
    678                                writer.setFontPoint( Short.parseShort( fontPoint ) );   // 3.8.5.3 (2006/08/07)
    679                        }
    680                        writer.setSkipRowCount( skipRowCount );                                         // 5.7.9.0 (2014/08/08)
    681
    682                        writer.setSheetOverwrite( sheetOverwrite );                                     // 5.9.12.1 (2016/09/09)
    683                        writer.setRecalcSheetName( recalcSheetName );                           // 5.9.12.1 (2016/09/09)
    684
    685                        writer.setUseCellStyle( useCellStyle );                                         // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    686                        writer.setUseAutoCellSize( useAutoCellSize );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    687                        writer.setUseActiveWorkbook( useActiveWorkbook );                       // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    688                        writer.setPageBreakColumn( pageBreakColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    689                        writer.setFileBreakColumn( fileBreakColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    690                        writer.setHyperLinkColumn( hyperLinkColumn );                           // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    691                        writer.setAddTitleSheet( addTitleSheet );                                       // 6.0.2.0 (2014/09/19) EXCEL関係機能追加
    692
    693                        writer.writeDBTable();
    694                }
    695                else {
    696                        writer.writeDBTable( outPW );
    697                }
    698        }
    699
    700        /**
    701         * PrintWriter を取得します。
    702         *
    703         * ここでは、一般的なﾌｧｲﾙ出力を考慮した PrintWriter を作成します。
    704         *
    705         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 ｴﾝｺｰﾄﾞの取得方法変更
    706         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、ｴﾝｺｰﾄﾞ情報を取得する。
    707         * @og.rev 3.5.4.1 (2003/12/01) PrintWriter を、OutputStream に変更。
    708         * @og.rev 3.5.5.9 (2004/06/07) FileUtil.getBufferedReader を使用
    709         * @og.rev 3.7.1.1 (2005/05/23) ﾌｫﾙﾀﾞがない場合は、複数階層分のﾌｫﾙﾀﾞを自動で作成します。
    710         * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用。
    711         *
    712         * @return      ﾌｧｲﾙ書き出し用のPrintWriterｵﾌﾞｼﾞｪｸﾄ
    713         */
    714        private PrintWriter getPrintWriter() {
    715                if( filename == null ) {
    716                        final String errMsg = "ﾌｧｲﾙ名がｾｯﾄされていません。";
    717                        throw new HybsSystemException( errMsg );
    718                }
    719
    720                // 6.4.1.1 (2016/01/16) ﾜﾝｸｯｼｮﾝいれずに return します。
    721                return FileUtil.getPrintWriter(
    722//                              new File( directory,filename ),
    723                                localFile,                                                      // 8.0.0.2 (2021/10/15) 一時的に利用するﾛｰｶﾙﾌｧｲﾙ
    724                                encode,fileAppend );
    725        }
    726
    727        /**
    728         * PrintWriter を取得します。
    729         *
    730         * 引数で指定したOutputStreamを利用して出力します。
    731         *
    732         * @og.rev 5.5.2.0 (2012/05/01) 新規作成
    733         *
    734         * @param       os      OutputStreamｵﾌﾞｼﾞｪｸﾄ
    735         *
    736         * @return      指定したstreamに書き出すPrintWriter
    737         */
    738        private PrintWriter getPrintWriter( final OutputStream os ) {
    739                // 6.4.1.1 (2016/01/16) ﾜﾝｸｯｼｮﾝいれずに return します。
    740                return FileUtil.getPrintWriter( os,encode );
    741        }
    742
    743        /**
    744         * ﾁｪｯｸ分のﾃｰﾌﾞﾙﾓﾃﾞﾙを再構成します。
    745         *
    746         * @og.rev 5.5.5.5 (2012/08/24) 新規作成
    747         * @og.rev 5.5.9.1 (2012/12/07) 内部処理変更
    748         *
    749         * @param       oldTable        ｺﾋﾟｰ元ﾃｰﾌﾞﾙﾓﾃﾞﾙ
    750         *
    751         * @return      ﾁｪｯｸした分だけで再構成したﾃｰﾌﾞﾙﾓﾃﾞﾙ
    752         */
    753        private DBTableModel getSelRowsTable( final DBTableModel oldTable ) {
    754                if( oldTable == null ) { return null; }         // 5.5.9.1 (2012/12/07) 引数のDBTableModelが null の場合の処理。
    755
    756                final DBTableModel newTable = oldTable.newModel();
    757                final int[] rowNo = getParameterRows();
    758                final int rowCount = rowNo.length ;
    759
    760                for( int i=0; i<rowCount; i++ ) {
    761                        newTable.addValues( oldTable.getValues(rowNo[i]), i );
    762                }
    763                return newTable;
    764        }
    765
    766        /**
    767         * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのｷｰを指定します
    768         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    769         *
    770         * @og.tag
    771         * 検索結果より、DBTableModelｵﾌﾞｼﾞｪｸﾄを作成します。これを、下流のviewﾀｸﾞ等に
    772         * 渡す場合に、通常は、session を利用します。その場合の登録ｷｰです。
    773         * query ﾀｸﾞを同時に実行して、結果を求める場合、同一ﾒﾓﾘに配置される為、
    774         * この tableId 属性を利用して、ﾒﾓﾘ空間を分けます。
    775         *              (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。
    776         *
    777         * @param       id      ﾃｰﾌﾞﾙID (sessionに登録する時のID)
    778         */
    779        public void setTableId( final String id ) {
    780                tableId = nval( getRequestParameter( id ), tableId );
    781        }
    782
    783        /**
    784         * 【TAG】可変長ﾌｧｲﾙを作成するときの項目区切り文字をｾｯﾄします
    785         *              (初期値:TableWriter#TAB_SEPARATOR[={@og.value org.opengion.hayabusa.io.TableWriter#TAB_SEPARATOR}])。
    786         *
    787         * @og.tag 可変長ﾌｧｲﾙを作成するときの項目区切り文字をｾｯﾄします。
    788         * (初期値:TableWriter#TAB_SEPARATOR[={@og.value org.opengion.hayabusa.io.TableWriter#TAB_SEPARATOR}])。
    789         *
    790         * @param       separator       項目区切り文字
    791         * @see         org.opengion.hayabusa.io.TableWriter#TAB_SEPARATOR
    792         */
    793        public void setSeparator( final String separator ) {
    794                this.separator = nval( getRequestParameter( separator ),this.separator );
    795        }
    796
    797        /**
    798         * 【TAG】DBTableModelの出力順(LNSCD など)をｾｯﾄします。
    799         *
    800         * @og.tag
    801         * Label,Name,Size,Class,Data の各ﾌｨｰﾙﾄﾞの頭文字のｱﾙﾌｧﾍﾞｯﾄで
    802         * 出力順を設定します。
    803         *
    804         * N: Name(名前)属性。ﾌｧｲﾙを読み取る(DBTableReader)場合には必要です。
    805         * L: Label(ﾗﾍﾞﾙ)属性。指定のｶﾗﾑの名称を表示します。
    806         * S: Size(ｻｲｽﾞ)属性。指定のｶﾗﾑの桁数を表示します。
    807         * C: Class(ｸﾗｽ)属性。指定のｶﾗﾑのｸﾗｽ(文字、数字など)を表示します。
    808         * -: ----(区切り記号)属性。必要な箇所に入れることで、ﾍｯﾀﾞｰ部とﾃﾞｰﾀ部を分離します。
    809         * D: Data(ﾃﾞｰﾀ)属性。実際のﾃﾞｰﾀを繰り返し表示します。
    810         *
    811         * H:#なしのLabel(ﾗﾍﾞﾙ)属性を出力します(EXCELは除く)
    812         *
    813         * ※ 7.2.6.1 (2020/07/17) H:Header(ﾍｯﾀﾞｰ)属性追加。Label(ﾗﾍﾞﾙ)属性の先頭の#を削除します。
    814         *
    815         * @param       hs      出力順 (LNSCD など)
    816         */
    817        public void setHeaderSequence( final String hs ) {
    818                final String[] headers = getRequestParameterValues( hs );
    819                if( headers != null ) {
    820                        final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE );
    821                        // 7.2.9.4 (2020/11/20) PMD:This for loop can be replaced by a foreach loop
    822                        for( final String head : headers ) {
    823                                if( head != null ) { buf.append( head ); }
    824                        }
    825//                      for( int i=0; i<headers.length; i++ ) {
    826//                              if( headers[i] != null ) { buf.append( headers[i] ); }
    827//                      }
    828                        headerSequence = buf.toString();
    829                }
    830        }
    831
    832        /**
    833         * 【TAG】ﾌｧｲﾙ保存先ﾃﾞｨﾚｸﾄﾘ名を指定します
    834         *              (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。
    835         *
    836         * @og.tag
    837         * この属性で指定されるﾃﾞｨﾚｸﾄﾘに、ﾌｧｲﾙをｾｰﾌﾞします。
    838         * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、２文字目が、
    839         * ":" (Windows)の場合は、指定のURLそのままのﾃﾞｨﾚｸﾄﾘに、そうでない場合は、
    840         * ｼｽﾃﾑﾊﾟﾗﾒｰﾀ の FILE_URL 属性で指定のﾌｫﾙﾀﾞの下に、作成されます。
    841         * fileURL = "{&#064;USER.ID}" と指定すると、FILE_URL 属性で指定のﾌｫﾙﾀﾞの下に、
    842         * さらに、各個人ID別のﾌｫﾙﾀﾞを作成して、そこにｾｰﾌﾞします。
    843         *
    844         * @og.rev 3.5.4.3 (2004/01/05) 内部処理を、makeFileURL に移動。
    845         * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend ﾒｿｯﾄﾞの利用
    846         * @og.rev 4.0.0.0 (2007/11/20) 指定されたﾃﾞｨﾚｸﾄﾘ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。
    847         * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。
    848         *
    849         * @param       url     保存先ﾃﾞｨﾚｸﾄﾘ名
    850         */
    851        public void setFileURL( final String url ) {
    852                final String furl = nval( getRequestParameter( url ),null );
    853                if( furl != null ) {
    854                        fileURL = StringUtil.urlAppend( fileURL,furl );
    855                }
    856        }
    857
    858        /**
    859         * 【TAG】ﾌｧｲﾙ保存先ﾃﾞｨﾚｸﾄﾘ名を指定します(初期値:ｺﾝﾃｷｽﾄﾊﾟｽ)。
    860         *
    861         * @og.tag
    862         * この属性で指定されるﾃﾞｨﾚｸﾄﾘに、ﾌｧｲﾙをｾｰﾌﾞします。
    863         * 絶対ﾊﾟｽに関しては、fileURL の指定と同じですが、相対ﾊﾟｽで指定する場合は、
    864         * 基準ﾊﾟｽが、ｺﾝﾃｷｽﾄﾊﾟｽ になります。
    865         * この属性は特殊で、互換性のために持っています。
    866         * fileUpdate や、fileDownload ｻｰﾌﾞﾚｯﾄなどの基準ﾊﾟｽが、ｺﾝﾃｷｽﾄﾊﾟｽなので、これらの
    867         * ﾀｸﾞと組み合わせて使用する場合に、使用します。
    868         *
    869         * @og.rev 7.2.7.0 (2020/08/07) ｺﾝﾃｷｽﾄﾊﾟｽを基準ﾊﾟｽとするfileURLの設定
    870         *
    871         * @param       url     保存先ﾃﾞｨﾚｸﾄﾘ名
    872         */
    873        public void setBaseURL( final String url ) {
    874                fileURL = nval( getRequestParameter( url ),"" );
    875        }
    876
    877        /**
    878         * 【TAG】ﾌｧｲﾙを作成するときのﾌｧｲﾙ名をｾｯﾄします
    879         *              (初期値:FILE_FILENAME[={@og.value SystemData#FILE_FILENAME}])。
    880         *
    881         * @og.tag ﾌｧｲﾙを作成するときのﾌｧｲﾙ名をｾｯﾄします。
    882         * (初期値:ｼｽﾃﾑ定数のFILE_ENCODE[={@og.value SystemData#FILE_FILENAME}])。
    883         *
    884         * @param       filename        ﾌｧｲﾙ名
    885         * @see         org.opengion.hayabusa.common.SystemData#FILE_FILENAME
    886         */
    887        public void setFilename( final String filename ) {
    888                this.filename = nval( getRequestParameter( filename ),this.filename );
    889        }
    890
    891        /**
    892         * 【TAG】EXCELﾌｧｲﾙを書き出すときのｼｰﾄ名を設定します(初期値:Sheet1)。
    893         *
    894         * @og.tag
    895         * EXCELﾌｧｲﾙを書き出す時に、ｼｰﾄ名を指定します。これにより、複数の形式の
    896         * 異なるﾃﾞｰﾀを順次書き出したり(appendﾓｰﾄﾞを併用)することや、ｼｰﾄを指定して
    897         * 新規にEXCELを作成することが可能になります。
    898         * 初期値は、Sheet1 です。
    899         *
    900         * @og.rev 3.5.4.2 (2003/12/15) 新規追加
    901         *
    902         * @param       sheet   ｼｰﾄ名
    903         */
    904        public void setSheetName( final String sheet ) {
    905                sheetName = nval( getRequestParameter( sheet ),sheetName );
    906        }
    907
    908        /**
    909         * 【TAG】ﾌｧｲﾙを作成するときのﾌｧｲﾙｴﾝｺｰﾃﾞｨﾝｸﾞ名をｾｯﾄします
    910         *              (初期値:FILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])。
    911         *
    912         * @og.tag
    913         * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
    914         * (初期値:ｼｽﾃﾑ定数のFILE_ENCODE[={@og.value SystemData#FILE_ENCODE}])。
    915         *
    916         * @og.rev 2.2.0.0 (2002/12/17) 中国語(国際化)対応 ｴﾝｺｰﾄﾞの取得方法変更
    917         * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、ｴﾝｺｰﾄﾞ情報を取得する。
    918         *
    919         * @param       enc     ｴﾝｺｰﾃﾞｨﾝｸﾞ名 (例:DEFAULT,JISAutoDetect,JIS,EUC_JP,MS932,SJIS,Windows-31J,Shift_JIS)
    920         * @see         <a href="http://www.iana.org/assignments/character-sets" target="_blank" >IANA Charset Registry</a>
    921         * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
    922         */
    923        public void setEncode( final String enc ) {
    924                encode = nval( getRequestParameter( enc ),encode );
    925        }
    926
    927        /**
    928         * 【TAG】実際に書き出すｸﾗｽ名の略称({@og.doc03Link writerClass TableWriter_**** ｸﾗｽの ****})を指定します
    929         *              (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])。
    930         *
    931         * @og.tag
    932         * 実際に書き出すｸﾗｽ名(の略称)をｾｯﾄします。
    933         * org.opengion.hayabusa.io.TableWriter ｲﾝﾀｰﾌｪｰｽを継承したｻﾌﾞｸﾗｽです。
    934         * これは、org.opengion.plugin.io 以下の TableWriter_**** ｸﾗｽの **** を与えます。
    935         * 属性ｸﾗｽ定義の {@link org.opengion.hayabusa.io.TableWriter TableWriter} を参照願います。
    936         * {@og.doc03Link writerClass TableWriter_**** ｸﾗｽ}
    937         *
    938         * ExcelRenderer と、Renderer は、特別な名前で、useRenderer 属性に、"true" をｾｯﾄするのと同じ効果があります。
    939         * 実際は、ExcelRenderer ⇒ Excel 、Renderer  ⇒ Default のｸﾗｽが呼ばれます。
    940         * (初期値:TABLE_WRITER_DEFAULT_CLASS[={@og.value SystemData#TABLE_WRITER_DEFAULT_CLASS}])。
    941         *
    942         * @param       writerClass     ｸﾗｽ名(の略称)
    943         * @see         org.opengion.hayabusa.io.TableWriter  TableWriterのｻﾌﾞｸﾗｽ
    944         */
    945        public void setWriterClass( final String writerClass ) {
    946                this.writerClass = nval( getRequestParameter( writerClass ),this.writerClass );
    947        }
    948
    949        /**
    950         * 【TAG】追加ﾓｰﾄﾞで書き込むかどうか[true/false]を指定します(初期値:false[新規ﾓｰﾄﾞ])。
    951         *
    952         * @og.tag DBTableModelのﾌｧｲﾙを、追加ﾓｰﾄﾞで書き込むかどうかをｾｯﾄします。
    953         *
    954         * @param       flag    追加ﾓｰﾄﾞか [true:追加ﾓｰﾄﾞ/それ以外:新規ﾓｰﾄﾞ]
    955         */
    956        public void setFileAppend( final String flag ) {
    957                fileAppend = nval( getRequestParameter( flag ),fileAppend );
    958        }
    959
    960//      /**
    961//       * 【廃止】結果をﾀﾞｲﾚｸﾄにEXCEL起動するかどうか[true/false]を指定します(初期値:false[ﾌｧｲﾙ])。
    962//       *
    963//       * @og.tag 結果をﾀﾞｲﾚｸﾄに EXCEL ﾌｧｲﾙとして出力するかどうかをｾｯﾄします。
    964//       *
    965//       * @og.rev 6.9.5.0 (2018/04/23) 物理的に廃止
    966//       *
    967//       * @param       flag    ﾀﾞｲﾚｸﾄ起動か [true:ﾀﾞｲﾚｸﾄ/それ以外:ﾌｧｲﾙ]
    968//       * @deprecated  結果をﾀﾞｲﾚｸﾄするとｴﾝｺｰﾄﾞ等でおかしな動きをする可能性がある。
    969//       */
    970//      @Deprecated public void setDirect( final String flag ) {
    971//              direct = nval( getRequestParameter( flag ),direct );
    972//      }
    973
    974        /**
    975         * 【TAG】結果をﾌｧｲﾙに出力するときに、ZIPで圧縮するかどうか[true/false]を指定します(初期値:false)。
    976         *
    977         * @og.tag
    978         * 初期値は、圧縮しないです。
    979         *
    980         * @param       flag    ZIPで圧縮する [true:圧縮する/それ以外:しない]
    981         */
    982        public void setZip( final String flag ) {
    983                zip = nval( getRequestParameter( flag ),zip );
    984        }
    985
    986        /**
    987         * 【TAG】ZIPﾌｧｲﾙを作成するときのZIPﾌｧｲﾙ名をｾｯﾄします(初期値:filename + ".zip")。
    988         *
    989         * @og.tag
    990         * zip 属性に、true を指定した場合に、ZIPﾌｧｲﾙ化します。その場合のﾌｧｲﾙ名を指定します。
    991         * なにも指定しない場合は、filename + ".zip" になります。
    992         *
    993         * @og.rev 6.0.4.0 (2014/11/28) Zipﾌｧｲﾙ名を外部から与えられるように修正
    994         *
    995         * @param       zipFile ZIPﾌｧｲﾙ名
    996         * @see         #setZip( String )
    997         */
    998        public void setZipFilename( final String zipFile ) {
    999                zipFilename = nval( getRequestParameter( zipFile ),zipFilename );
    1000        }
    1001
    1002//      /**
    1003//       * 【廃止】Content-Disposition [inline:埋め込む/attachment:ﾀﾞｲｱﾛｸﾞを起動]を指定します(初期値:attachment)。
    1004//       *
    1005//       * @og.tag
    1006//       * Content-Disposition を指定することで、ﾌﾞﾗｳｻﾞにｱﾌﾟﾘｹｰｼｮﾝﾃﾞｰﾀを
    1007//       * 埋め込むのか(inline)、ｾｰﾌﾞ/ｵｰﾌﾟﾝのﾀﾞｲｱﾛｸﾞを起動するのか(attachment)
    1008//       * 指定します。
    1009//       * この属性が有効なのは、direct="true" で、zip="false"(初期値)のときのみです。
    1010//       * 値は、inline 、attachment が指定できます。
    1011//       * 初期値は、attachment です。
    1012//       * 注意：動作検証しましたが、inline と attachment で動作に差が現れませんでした。
    1013//       *
    1014//       * @og.rev 3.1.5.0 (2003/04/20) Content-Disposition を外部から指定できるように変更。
    1015//       * @og.rev 3.8.0.9 (2005/10/17) Content-Disposition 初期値変更 inline ⇒ attachment
    1016//       * @og.rev 6.9.5.0 (2018/04/23) 物理的に廃止
    1017//       *
    1018//       * @param       pos     埋め込みするかどうか [inline:埋め込む/attachment:ﾀﾞｲｱﾛｸﾞを起動]
    1019//       */
    1020//      public void setDisposition( final String pos ) {
    1021//              disposition = nval( getRequestParameter( pos ),disposition );
    1022//              if( !"inline".equals( disposition ) && !"attachment".equals( disposition ) ) {
    1023//                      final String errMsg = "disposition には、inline か attachment 以外は指定できません。"
    1024//                                              + "disposition=[" + disposition + "]" ;
    1025//                      throw new HybsSystemException( errMsg );
    1026//              }
    1027//      }
    1028
    1029        /**
    1030         * 【TAG】EXCEL雛型参照ﾌｧｲﾙのﾃﾞｨﾚｸﾄﾘ名をｾｯﾄします
    1031         *              (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。
    1032         *
    1033         * @og.tag
    1034         * この属性で指定されるﾃﾞｨﾚｸﾄﾘに、ﾌｧｲﾙをｾｰﾌﾞします。
    1035         * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、２文字目が、
    1036         * ":" (Windows)の場合は、指定のURLそのままのﾃﾞｨﾚｸﾄﾘに、そうでない場合は、
    1037         * ｼｽﾃﾑﾊﾟﾗﾒｰﾀ の FILE_URL 属性で指定のﾌｫﾙﾀﾞの下に、作成されます。
    1038         * fileURL = "{&#064;USER.ID}" と指定すると、FILE_URL 属性で指定のﾌｫﾙﾀﾞの下に、
    1039         * さらに、各個人ID別のﾌｫﾙﾀﾞを作成して、そこにｾｰﾌﾞします。
    1040         *
    1041         * @og.rev 3.5.4.3 (2004/01/05) 新規作成
    1042         * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend ﾒｿｯﾄﾞの利用
    1043         * @og.rev 4.0.0.0 (2007/11/20) 指定されたﾃﾞｨﾚｸﾄﾘ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。
    1044         * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。
    1045         *
    1046         * @param       url     雛型ﾃﾞｨﾚｸﾄﾘ名
    1047         */
    1048        public void setRefFileURL( final String url ) {
    1049                final String furl = nval( getRequestParameter( url ),null );
    1050                if( furl != null ) {
    1051                        refFileURL = StringUtil.urlAppend( refFileURL,furl );
    1052                }
    1053        }
    1054
    1055        /**
    1056         * 【TAG】EXCEL雛型参考ﾌｧｲﾙ名をｾｯﾄします。
    1057         *
    1058         * @og.tag
    1059         * 内部処理的には、雛形ﾌｧｲﾙの雛形ｼｰﾄをﾒﾓﾘ上に構築し、
    1060         * そのｼｰﾄのｾﾙに、ﾃﾞｰﾀを追加していきます。
    1061         * 最後には、雛形ｼｰﾄとして存在しない部分は、すべて削除します。
    1062         * 雛形ｼｰﾄを使わない場合は、新規ｼｰﾄに追加していくことになります。
    1063         * appendﾓｰﾄﾞの場合は、ｵﾘｼﾞﾅﾙが雛形ﾌｧｲﾙになります。
    1064         * 雛形ﾌｧｲﾙの指定は、無効になります。
    1065         * ※ 互換性の為、同じ名前の設定は有効です。
    1066         *
    1067         * @og.rev 3.5.4.3 (2004/01/05) 新規作成
    1068         *
    1069         * @param       filename        雛型ﾌｧｲﾙ名
    1070         */
    1071        public void setRefFilename( final String filename ) {
    1072                refFilename = nval( getRequestParameter( filename ),refFilename );
    1073        }
    1074
    1075        /**
    1076         * 【TAG】EXCEL雛型参考ﾌｧｲﾙのｼｰﾄ名を設定します。
    1077         *
    1078         * @og.tag
    1079         * EXCELﾌｧｲﾙを書き出す時に、雛型として参照するｼｰﾄ名を指定します。
    1080         * これにより、複数の形式の異なるﾃﾞｰﾀを順次書き出したり(appendﾓｰﾄﾞを併用)する
    1081         * ことや、ｼｰﾄを指定して新規にEXCELを作成する場合にﾌｫｰﾑを設定する事が可能になります。
    1082         * 初期値は、null(第一ｼｰﾄ) です。
    1083         *
    1084         * @og.rev 3.5.4.3 (2004/01/05) 新規追加
    1085         *
    1086         * @param       sheet   雛型ｼｰﾄ名
    1087         */
    1088        public void setRefSheetName( final String sheet ) {
    1089                refSheetName = nval( getRequestParameter( sheet ),refSheetName );
    1090        }
    1091
    1092        /**
    1093         * 【TAG】雛形のｼｰﾄ名を、そのまま使用する(true)か、新規、または、外部指定のｼｰﾄ名を使用する(false)を指定します。(初期値:false[外部指定のｼｰﾄ名を使用])。
    1094         *
    1095         * @og.tag
    1096         * ※ Ver5では、追記ﾓｰﾄﾞ時に、指定ｼｰﾄが存在した場合は上書きします(初期値:false[上書きしない])。5.9.12.1 (2016/09/09)
    1097         *    Ver6では、追記ﾓｰﾄﾞ時に、雛形を指定できないため、雛形のｼｰﾄ名を、そのまま使用する(true)か、
    1098         *    新規、または、外部指定のｼｰﾄ名を使用する(false)を指定する属性になります。
    1099         *
    1100         * @og.rev 6.5.0.0 (2016/09/30) sheetOverwrite で、雛形ｼｰﾄの使用時に、元のｼｰﾄ名を使用します。
    1101         *
    1102         * @param       flag    元のｼｰﾄ名を使用するかどうか [true:使用する/false:新規、または、外部指定のｼｰﾄ名を使用]
    1103         */
    1104        public void setSheetOverwrite( final String flag ) {
    1105                sheetOverwrite = nval( getRequestParameter( flag ),sheetOverwrite );
    1106        }
    1107
    1108        /**
    1109         * 【TAG】EXCELで、出力処理の最後に、ｾﾙ内の計算式を再計算させるｼｰﾄ名をCSV形式で指定します。
    1110         *
    1111         * @og.tag
    1112         * 通常は利用する必要はありません。
    1113         * 一覧結果を利用した集計用ｼｰﾄを別に持っているような雛形を利用した出力で利用します。
    1114         *
    1115         * @og.rev 6.5.0.0 (2016/09/30) recalcSheetName で、ｾﾙ内の計算式を再計算させるｼｰﾄ名を指定。5.9.12.1 (2016/09/09)
    1116         *
    1117         * @param       sheet   対象ｼｰﾄ名(CSV形式文字)
    1118         */
    1119        public void setRecalcSheetName( final String sheet ) {
    1120                recalcSheetName = nval( getRequestParameter( sheet ),recalcSheetName );
    1121        }
    1122
    1123        /**
    1124         * 【TAG】EXCEL出力時のﾃﾞﾌｫﾙﾄﾌｫﾝﾄ名を設定します
    1125         *              (初期値:TABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])。
    1126         *
    1127         * @og.tag
    1128         * これは、EXCEL追加機能として実装されています。
    1129         *
    1130         * EXCELﾌｧｲﾙを書き出す時に、ﾃﾞﾌｫﾙﾄﾌｫﾝﾄ名を指定します。
    1131         * ﾌｫﾝﾄ名は、EXCELのﾌｫﾝﾄ名をそのまま使用してください。
    1132         * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontName( String )
    1133         * に設定されます。
    1134         * (初期値:ｼｽﾃﾑ定数のTABLE_WRITER_DEFAULT_FONT_NAME[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_NAME}])。
    1135         *
    1136         * @og.rev 3.8.5.3 (2006/08/07) 新規追加
    1137         *
    1138         * @param       name    ﾃﾞﾌｫﾙﾄﾌｫﾝﾄ名
    1139         * @see         org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_NAME
    1140         */
    1141        public void setFontName( final String name ) {
    1142                fontName = nval( getRequestParameter( name ),fontName );
    1143        }
    1144
    1145        /**
    1146         * 【TAG】EXCEL出力時のﾃﾞﾌｫﾙﾄﾌｫﾝﾄﾎﾟｲﾝﾄ数を設定します
    1147         *              (初期値:TABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])。
    1148         *
    1149         * @og.tag
    1150         * これは、EXCEL追加機能として実装されています。
    1151         *
    1152         * EXCELﾌｧｲﾙを書き出す時に、ﾃﾞﾌｫﾙﾄﾎﾟｲﾝﾄ数を指定します。
    1153         * 内部的に、POI の org.apache.poi.hssf.usermodel.HSSFFont#setFontHeightInPoints( short )
    1154         * に設定されます。
    1155         * (初期値:ｼｽﾃﾑ定数のTABLE_WRITER_DEFAULT_FONT_POINTS[={@og.value SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS}])。
    1156         *
    1157         * @og.rev 3.8.5.3 (2006/08/07) 新規追加
    1158         *
    1159         * @param       point   ﾌｫﾝﾄﾎﾟｲﾝﾄ数
    1160         * @see         org.opengion.hayabusa.common.SystemData#TABLE_WRITER_DEFAULT_FONT_POINTS
    1161         */
    1162        public void setFontPoint( final String point ) {
    1163                fontPoint = nval( getRequestParameter( point ),fontPoint );
    1164        }
    1165
    1166        /**
    1167         * 【TAG】ﾌｧｲﾙ出力時に、行番号情報を、出力する/しない[true/false]を指定します(初期値:true)。
    1168         *
    1169         * @og.tag
    1170         * 通常のﾌｫｰﾏｯﾄでは、各行の先頭に行番号を出力します。
    1171         * これは、#NAME 属性を使用する場合には、必ず出力する必要があります。
    1172         * (#NAME 属性は、読み取り時にあれば、自動的にｶﾗﾑに割り当てられます。)
    1173         * この、先頭の行番号が不要な場合(つまり、他のｼｽﾃﾑへのﾃﾞｰﾀ出力等)
    1174         * の為に出力する場合に、false を設定することで、行番号列を出力しない
    1175         * ようにできます。
    1176         * 初期値は、true(出力する) です。
    1177         *
    1178         * @og.rev 3.7.0.2 (2005/02/14) 新規追加
    1179         *
    1180         * @param       useNo   行番号情報 [true:出力する/false:しない]
    1181         */
    1182        public void setUseNumber( final String useNo ) {
    1183                useNumber = nval( getRequestParameter( useNo ),useNumber );
    1184        }
    1185
    1186        /**
    1187         * 【TAG】書き込み先ﾌｧｲﾙのｶﾗﾑ列を、外部(ﾀｸﾞ)よりCSV形式で指定します。
    1188         *
    1189         * @og.tag
    1190         * この指定により、書き込むｶﾗﾑを限定的に使用することが可能です。
    1191         * ｶﾗﾑ名は、検索したDBTableModel上に含まれる名前で指定する必要があります。
    1192         * 別名で書き込みたい場合は、予めその名前で検索しておく必要があります。
    1193         * ｶﾗﾑ名を指定しない場合(例えば ,,, など)は、ｶﾗﾑを書き飛ばします。
    1194         *
    1195         * @og.rev 4.0.0.0 (2005/12/31) 新規作成
    1196         *
    1197         * @param       clms    書込ｶﾗﾑ列 (CSV形式)
    1198         */
    1199        public void setColumns( final String clms ) {
    1200                columns = nval( getRequestParameter( clms ),columns );
    1201        }
    1202
    1203        /**
    1204         * 【TAG】書き込み対象外のｶﾗﾑ列を、外部(ﾀｸﾞ)よりCSV形式で指定します。
    1205         *
    1206         * @og.tag
    1207         * 指定するｶﾗﾑ名に対して、書き込み処理を行いません。
    1208         * ここで指定するｶﾗﾑ名は、検索したDBTableModel上に含まれる必要はありません。
    1209         * その場合は、ここでの指定は無視されます。
    1210         *
    1211         * @og.rev 6.1.0.0 (2014/12/26) omitNames 属性を追加
    1212         *
    1213         * @param       clms    書込対象外ｶﾗﾑ列 (CSV形式)
    1214         */
    1215        public void setOmitNames( final String clms ) {
    1216                omitNames = nval( getRequestParameter( clms ),omitNames );
    1217        }
    1218
    1219        /**
    1220         * 【TAG】書込処理でｺｰﾄﾞﾘｿｰｽのﾗﾍﾞﾙ変換を行うかどうかを指定します
    1221         *              (初期値:USE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])。
    1222         *
    1223         * @og.tag
    1224         * ｺｰﾄﾞﾘｿｰｽをそのままの値で出力すると、数字や記号になり何が書かれているのか
    1225         * 不明になります。
    1226         * これは、ｺｰﾄﾞﾘｿｰｽをﾗﾍﾞﾙに変換して出力するかどうかを指定します。
    1227         * 当然、ｺｰﾄﾞはﾕﾆｰｸですが、ﾗﾍﾞﾙはﾕﾆｰｸになるかどうか保障はされていませんので
    1228         * TableReader 系で読み込む場合には、ﾘｽｸが発生します。
    1229         * また、TableReader 系で読み込む場合にも、ﾗﾍﾞﾙからｺｰﾄﾞを求める逆変換を行うように、
    1230         * setUseRenderer ﾒｿｯﾄﾞで指定する必要があります。
    1231         *
    1232         * 従来は、TableWriter 系に、TableWriter_Renderer 系のｸﾗｽを作って対応していましたが、
    1233         * このﾒｿｯﾄﾞの属性値のﾌﾗｸﾞで、制御します。
    1234         * (初期値:ｼｽﾃﾑ定数のUSE_TABLE_WRITER_RENDERER[={@og.value SystemData#USE_TABLE_WRITER_RENDERER}])。
    1235         *
    1236         * @og.rev 5.2.1.0 (2010/10/01) 新規作成
    1237         *
    1238         * @param       flag    ﾗﾍﾞﾙ変換可否 [true:する/false:しない]
    1239         * @see         org.opengion.hayabusa.common.SystemData#USE_TABLE_WRITER_RENDERER
    1240         */
    1241        public void setUseRenderer( final String flag ) {
    1242                useRenderer = nval( getRequestParameter( flag ),useRenderer );
    1243        }
    1244
    1245        /**
    1246         * 【TAG】(通常は使いません)EXCEL出力時のﾃﾞｰﾀの書き込み開始行番号を設定します(初期値:0)。
    1247         *
    1248         * @og.tag
    1249         * EXCELのﾃﾞｰﾀの書き込みの開始行番号を指定します。
    1250         * 属性名は、行を飛ばす処理ということで、readTable ﾀｸﾞと同じ名称です。
    1251         * ﾌｧｲﾙの先頭行が、0行としてｶｳﾝﾄしますので、設定値は、読み飛ばす
    1252         * 件数になります。(1と指定すると、1行読み飛ばし、2行目から読み込みます。)
    1253         * 行の読み飛ばしと、ｶﾗﾑの読み飛ばし(columns)、refFileURL、refFilename、
    1254         * refSheetName とともに使用すれば、ある程度のﾚｲｱｳﾄ設定が可能です。
    1255         * 現時点では、Excel の場合のみ有効です。
    1256         *
    1257         * @og.rev 5.7.9.0 (2014/08/08) 新規作成
    1258         *
    1259         * @param       count   書き込み開始行番号
    1260         */
    1261        public void setSkipRowCount( final String count ) {
    1262                skipRowCount = nval( getRequestParameter( count ),skipRowCount );
    1263        }
    1264
    1265        /**
    1266         * 【TAG】EXCEL出力時に、ﾃﾞｰﾀを書き込んだ範囲に罫線を入れるかどうかを指定します(初期値:false)。
    1267         *
    1268         * @og.tag
    1269         * ﾃﾞｰﾀを書き込んでEXCELを作成しても、ﾉｰﾏﾙのｾﾙに値がｾｯﾄされている
    1270         * だけなので、ある程度加工が必要です。
    1271         * そこで、ﾃﾞｰﾀのｾｯﾄされたｾﾙに罫線を入れることで、それなりのﾃﾞｰﾀが
    1272         * 出力された感じになります。
    1273         * この設定と、useAutoCellSize="true" で、ｾﾙの幅を自動調整すれば、見栄えが良くなります。
    1274         * なお、この機能は、TableWriter_Excel のみに実装します。
    1275         *
    1276         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1277         *
    1278         * @param       useStyle        罫線追記 [true:する/false:しない]
    1279         * @see         #setUseAutoCellSize( String )
    1280         */
    1281        public void setUseCellStyle( final String useStyle ) {
    1282                useCellStyle = nval( getRequestParameter( useStyle ),useCellStyle );
    1283        }
    1284
    1285        /**
    1286         * 【TAG】EXCEL出力時に、ｾﾙの幅をﾃﾞｰﾀの幅に自動的に合わせるかどうかを指定します(初期値:false)。
    1287         *
    1288         * @og.tag
    1289         * ﾃﾞｰﾀを書き込んでEXCELを作成しても、ﾉｰﾏﾙのｾﾙに値がｾｯﾄされている
    1290         * だけなので、ある程度加工が必要です。
    1291         * そこで、ﾃﾞｰﾀのｾｯﾄされたｾﾙの幅を自動調整することで、それなりのﾃﾞｰﾀが
    1292         * 出力された感じになります。
    1293         * この設定と、useCellStyle="true" で、ｾﾙの罫線を自動設定すれば、見栄えが良くなります。
    1294         * なお、この機能は、TableWriter_Excel のみに実装します。
    1295         *
    1296         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1297         *
    1298         * @param       useAutoSize     幅の自動的調整 [true:する/false:しない]
    1299         * @see         #setUseCellStyle( String )
    1300         */
    1301        public void setUseAutoCellSize( final String useAutoSize ) {
    1302                useAutoCellSize = nval( getRequestParameter( useAutoSize ),useAutoCellSize );
    1303        }
    1304
    1305        /**
    1306         * 【TAG】EXCEL出力時に、ｾﾙの有効範囲を設定するかどうかを指定します(初期値:false)。
    1307         *
    1308         * @og.tag
    1309         * ｾﾙの有効範囲というのは、EXCELでの 空行、空列の存在しない範囲を指します(初期値:false)。
    1310         * 通常、空行でも、ﾃﾞｰﾀとして残っている場合は、EXCELのｾﾙｵﾌﾞｼﾞｪｸﾄは存在します。
    1311         * ここで、useActiveWorkbook="true" とすると、空行、空列を削除します。
    1312         *
    1313         * 雛形を使用した場合は、ﾃﾞｰﾀより多めに設定した計算などは、この処理で
    1314         * 削除されますので、ﾃﾞｰﾀｻｲｽﾞにﾌｨｯﾄさせることができます。
    1315         * なお、この機能は、TableWriter_Excel のみに実装します。
    1316         *
    1317         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1318         *
    1319         * @param       useActWB        有効範囲の設定 [true:する/false:しない]
    1320         */
    1321        public void setUseActiveWorkbook( final String useActWB ) {
    1322                useActiveWorkbook = nval( getRequestParameter( useActWB ),useActiveWorkbook );
    1323        }
    1324
    1325        /**
    1326         * 【TAG】EXCEL出力時に、ｼｰﾄ変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がｼｰﾄ名になります)。
    1327         *
    1328         * @og.tag
    1329         * EXCEL帳票では、帳票雛形に、PAGE_BRAKE ｷｰを設定しましたが、TableWriterでは、
    1330         * ﾒﾓﾘ上のｶﾗﾑの値が変更したときに、ｼｰﾄ変更させることができます。
    1331         * このｶﾗﾑの値がｷｰﾌﾞﾚｲｸすると、新しいｼｰﾄに書き出し始めます。
    1332         * ｼｰﾄ名は、このｶﾗﾑの値（ｷｰﾌﾞﾚｲｸする値）です。
    1333         *
    1334         * 雛形ﾌｧｲﾙを使用する場合、雛形ｼｰﾄもｷｰﾌﾞﾚｲｸに伴って、＋１されます。
    1335         * つまり、雛形ｼｰﾄとﾃﾞｰﾀｼｰﾄは同時に変更されます。
    1336         * ただし、雛形ｼｰﾄは、最後の雛形ｼｰﾄで止まります。
    1337         * これは、雛形ｼｰﾄにﾍｯﾀﾞｰ雛形とﾎﾞﾃﾞｨ雛形を用意しておき、最初のｷｰﾌﾞﾚｲｸで
    1338         * ﾍｯﾀﾞｰからﾎﾞﾃﾞｨの書き込みにﾁｪﾝｼﾞするｲﾒｰｼﾞで使用できます。
    1339         * なお、この機能は、TableWriter_Excel のみに実装します。
    1340         *
    1341         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1342         *
    1343         * @param       pbColumn        ｼｰﾄ変更ｶﾗﾑ名
    1344         * @see         #setFileBreakColumn( String )
    1345         */
    1346        public void setPageBreakColumn( final String pbColumn ) {
    1347                pageBreakColumn = nval( getRequestParameter( pbColumn ),pageBreakColumn );
    1348        }
    1349
    1350        /**
    1351         * 【TAG】EXCEL出力時に、ﾌｧｲﾙ名を変更するｷｰとなるｶﾗﾑ名を指定します(このｶﾗﾑの値がﾌｧｲﾙ名になります)。
    1352         *
    1353         * @og.tag
    1354         * EXCEL帳票では、ﾒﾓﾘ上のｶﾗﾑの値が変更したときに、ﾌｧｲﾙ名を変更することができます。
    1355         * このｶﾗﾑの値がｷｰﾌﾞﾚｲｸすると、新しいﾌｧｲﾙに書き出し始めます。
    1356         * ﾌｧｲﾙ名は、このｶﾗﾑの値（ｷｰﾌﾞﾚｲｸする値）＋ 元の出力ﾌｧｲﾙ名の拡張子(.xlsなど)です。
    1357         * この設定を使用する場合は、出力ﾌｧｲﾙ名は無視されますが、拡張子だけは使用されます。
    1358         *
    1359         * 雛形ﾌｧｲﾙを使用する場合、雛形ﾌｧｲﾙもｷｰﾌﾞﾚｲｸに伴って、再利用されます。
    1360         * 例えば、pageBreakColumn と併用する場合、ｷｰﾌﾞﾚｲｸで雛形ｼｰﾄも最初から適用になります。
    1361         * なお、この機能は、TableWriter_Excel のみに実装します。
    1362         *
    1363         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1364         *
    1365         * @param       fbColumn        ﾌｧｲﾙﾌﾞﾚｲｸｶﾗﾑ
    1366         * @see         #setPageBreakColumn( String )
    1367         */
    1368        public void setFileBreakColumn( final String fbColumn ) {
    1369                fileBreakColumn = nval( getRequestParameter( fbColumn ),fileBreakColumn );
    1370        }
    1371
    1372        /**
    1373         * 【TAG】EXCEL出力時に、Hyperlinkを作成するｷｰとなる｢ｶﾗﾑ名:値｣形式のｶﾗﾑ名を指定します。
    1374         *
    1375         * @og.tag
    1376         * ここで、作成するﾊｲﾊﾟｰﾘﾝｸは、EXCELのｼｰﾄに対するﾊｲﾊﾟｰﾘﾝｸです。
    1377         * それ以外のﾘﾝｸ(本当のURLやﾌｧｲﾙ等)のﾘﾝｸは(今は)作成できません。
    1378         * ﾊｲﾊﾟｰﾘﾝｸを作成するには、①作成するｶﾗﾑ と ②作成する値 が必要です。
    1379         * このﾒｿｯﾄﾞで設定するのは、｢①:②｣という形式でｶﾗﾑ名を指定します。
    1380         * ②がなければ、①と同じとします。
    1381         * ②の値のｼｰﾄの存在有無は、無視します。ﾊｲﾊﾟｰﾘﾝｸを作成するｼｰﾄを作成する前に
    1382         * ﾊｲﾊﾟｰﾘﾝｸを作成するｹｰｽが存在します。
    1383         * (例えば、各ｼｰﾄへのﾘﾝｸを持った一覧を作成してから、明細の各ｼｰﾄを作成する様なｹｰｽ)
    1384         * なお、この機能は、TableWriter_Excel のみに実装します。
    1385         *
    1386         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1387         *
    1388         * @param       hlColumn        ﾘﾝｸ作成ｶﾗﾑ名 (｢ｶﾗﾑ名:値｣形式)
    1389         */
    1390        public void setHyperLinkColumn( final String hlColumn ) {
    1391                hyperLinkColumn = nval( getRequestParameter( hlColumn ),hyperLinkColumn );
    1392        }
    1393
    1394        /**
    1395         * 【TAG】EXCEL出力時に、Sheet一覧を作成する場合のSheet名を指定します。
    1396         *
    1397         * @og.tag
    1398         * これは、Workbook に含まれる Sheet 一覧を作成する場合に、利用可能です。
    1399         * なお、この機能は、TableWriter_Excel のみに実装します。
    1400         *
    1401         * @og.rev 6.0.2.0 (2014/09/19) 新規作成
    1402         *
    1403         * @param       sheetName       ﾀｲﾄﾙｼｰﾄ名
    1404         */
    1405        public void setAddTitleSheet( final String sheetName ) {
    1406                addTitleSheet = nval( getRequestParameter( sheetName ),addTitleSheet );
    1407        }
    1408
    1409        /**
    1410         * 【TAG】ﾁｪｯｸ行のみを対象にするかを指定します(初期値:true)。
    1411         *
    1412         * @og.tag
    1413         * falseを指定する事で、前画面でﾁｪｯｸした行のみを出力します。
    1414         * 初期値は全ての行を出力(true)です。
    1415         * 出力されるﾌｧｲﾙの行番号は、1から振りなおされます。
    1416         *
    1417         * @og.rev 5.5.5.5 (2012/08/24) 新規作成
    1418         *
    1419         * @param       flag    対象にするか [true:全件/false:対象のみ]
    1420         */
    1421        public void setSelectedAll( final String flag ) {
    1422                selectedAll = nval( getRequestParameter( flag ),selectedAll );          // 5.5.9.1 (2012/12/07) ﾊﾞｸﾞ対応
    1423        }
    1424
    1425        /**
    1426         * 【TAG】ｼｽﾃﾑ定数でｸﾗｳﾄﾞ設定されていても、ｸﾗｳﾄﾞ環境を使用しない場合、trueを指定します(初期値:false)。
    1427         *
    1428         * @og.tag
    1429         * ｸﾗｳﾄﾞ設定は、ｼｽﾃﾑ定数の『CLOUD_TARGET』と『CLOUD_BUCKET』の設定で自動的に使用しますが、
    1430         * どうしてもﾛｰｶﾙでのみ使いたい場合は、この属性を true に設定します。
    1431         * 標準はfalse:設定どおりとなります。
    1432         * true/false以外を指定した場合はfalse扱いとします。
    1433         *
    1434         * @og.rev 8.0.1.0 (2021/10/29) useLocal 属性を追加。
    1435         *
    1436         * @param       flag    ﾛｰｶﾙ環境のみ [true:ﾛｰｶﾙのみ/false:設定どおり]
    1437         */
    1438        public void setUseLocal( final String flag ) {
    1439                useLocal = nval( getRequestParameter( flag ),useLocal );
    1440        }
    1441
    1442        /**
    1443         * 【TAG】事前にﾌｧｲﾙを削除するかどうかを指定します(初期値:false)。
    1444         *
    1445         * @og.tag
    1446         * 出力元の DBTableModel が、存在しないか、0件の場合、過去に作成したﾌｧｲﾙが
    1447         * そのまま、残っていると、不要なﾄﾗﾌﾞﾙのもととなる為、実行前に削除するか
    1448         * どうかを指定できます。
    1449         * なお、fileAppend="true"(追加ﾓｰﾄﾞで書き込むを指定)時には、ﾃﾞｰﾀが0件でも
    1450         * 事前削除は行いません。
    1451         * 初期値は互換性のため削除しない(false)です。
    1452         *
    1453         * @og.rev 5.5.9.1 (2012/12/07) 新規作成
    1454         *
    1455         * @param       flag    事前削除するかどうか [true:削除する/false:削除しない]
    1456         */
    1457        public void setBeforeDelete( final String flag ) {
    1458                beforeDelete = nval( getRequestParameter( flag ),beforeDelete );
    1459        }
    1460
    1461        /**
    1462         * WriteTable ｵﾌﾞｼﾞｪｸﾄに渡すﾊﾟﾗﾒｰﾀｵﾌﾞｼﾞｪｸﾄをｾｯﾄします。
    1463         *
    1464         * WriteTableParamTag ｸﾗｽよりｾｯﾄされます。
    1465         *
    1466         * @og.rev 4.0.0.0 (2005/02/28) 新規追加
    1467         *
    1468         * @param       entry   HybsEntryｵﾌﾞｼﾞｪｸﾄ
    1469         */
    1470        protected void addParam( final HybsEntry entry ) {
    1471                if( param == null ) { param = new ArrayList<>(); }
    1472                param.add( entry );
    1473        }
    1474
    1475        /**
    1476         * このｵﾌﾞｼﾞｪｸﾄの文字列表現を返します。
    1477         * 基本的にﾃﾞﾊﾞｯｸﾞ目的に使用します。
    1478         *
    1479         * @return このｸﾗｽの文字列表現
    1480         * @og.rtnNotNull
    1481         */
    1482        @Override
    1483        public String toString() {
    1484                return ToString.title( this.getClass().getName() )
    1485                                .println( "VERSION"                     ,VERSION                )
    1486                                .println( "BASE_URL"            ,BASE_URL               )
    1487                                .println( "separator"           ,separator              )
    1488                                .println( "headerSequence"      ,headerSequence )
    1489                                .println( "fileURL"                     ,fileURL                )
    1490                                .println( "filename"            ,filename               )
    1491                                .println( "refFileURL"          ,refFileURL             )
    1492                                .println( "refFilename"         ,refFilename    )
    1493                                .println( "encode"                      ,encode                 )
    1494                                .println( "writerClass"         ,writerClass    )
    1495                                .println( "fileAppend"          ,fileAppend             )
    1496//                              .println( "direct"                      ,direct                 )               // 6.9.5.0 (2018/04/23) 物理的に廃止
    1497                                .println( "zip"                         ,zip                    )
    1498                                .println( "zipFilename"         ,zipFilename    )               // 6.0.4.0 (2014/11/28)
    1499//                              .println( "disposition"         ,disposition    )               // 6.9.5.0 (2018/04/23) 物理的に廃止
    1500                                .println( "tableId"                     ,tableId                )
    1501                                .println( "sheetName"           ,sheetName              )
    1502                                .println( "refSheetName"        ,refSheetName   )
    1503                                .println( "useNumber"           ,useNumber              )
    1504                                .println( "Other..."    ,getAttributes().getAttribute() )
    1505                                .fixForm().toString() ;
    1506        }
    1507}