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