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