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 * <og:writeTable 066 * fileURL = "{@USER.ID}" 保存先ディレクトリ名 067 * filename = "{@filename}" 保存ファイル名 068 * encode = "UnicodeLittle" 保存ファイルエンコード名 069 * /> 070 * 071 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 072 * 073 * ●Tag定義: 074 * <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 * > ... Body ... 122 * </og:writeTable> 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 * <og:writeTable ・・・・・ > 131 * <og:writeTableParam 132 * key = "Tablename" value="GE12" 133 * /> 134 * <og:writeTableParam 135 * key = "First" First:最初に登録 136 * > 137 * insert into GE12bk 138 * select * from GE12 139 * where SYSTEM_ID='**' 140 * </og:writeTableParam 141 * <og:writeTableParam 142 * key = "First" First:の2番目に登録 143 * > 144 * delete from GE12 where SYSTEM_ID='**' and KBSAKU='0' 145 * </og:writeTableParam 146 * <og:writeTableParam 147 * key = "Last" Last:最後に登録 148 * > 149 * update GE12 set XXXX='YYYY' where SYSTEM_ID='**' and KBSAKU='0' 150 * </og:writeTableParam 151 * </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) または、2文字目が、 839 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 840 * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。 841 * fileURL = "{@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) または、2文字目が、 1036 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 1037 * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。 1038 * fileURL = "{@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 * 雛形ファイルを使用する場合、雛形シートもキーブレイクに伴って、+1されます。 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}