帳票の作成:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import org.apache.commons.lang.time.DateFormatUtils;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.VerticalAlignment;
import jxl.write.DateFormat;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import com.hitachijoho.pm.models.Mdmt0010;
import com.hitachijoho.pm.models.Mdmt0020;
import com.hitachijoho.pm.util.CSVReader;
import com.hitachijoho.pm.util.CodeConstant;
import com.hitachijoho.pm.batch.common.SogoHantei;
/**
* MPMR0010_測定結果総合処理
*
* @version 1.0
* @see AbstractBatch
* @since 01-00
*/
public class CopyOfMPMR0010 {
// ----------------------様式定義-----------------------------------
private final WritableFont font1 = new WritableFont(WritableFont.createFont("MS Pゴシック"), 11, WritableFont.NO_BOLD);
/** 測定結果総合シート*/
private WritableCellFormat cf1 = new WritableCellFormat(font1);
private WritableCellFormat cf2 = new WritableCellFormat(font1);
private WritableCellFormat cf3 = new WritableCellFormat(font1);
private WritableCellFormat cf4 = new WritableCellFormat(font1);
/**
* 帳票出力処理
*
* @param kidoukeyuu
* @param inPath
* @param encoding
* @param wwb
* @param mdmt0010
* @param mdmt0020
* @param mdmt0030list
* @throws Exception
*/
public void reportWrite(boolean kidoukeyuu,String inPath,String encoding,WritableWorkbook wwb,
Mdmt0010 mdmt0010,Mdmt0020 mdmt0020,ArrayList<String[]> mdmt0030list) throws Exception {
// 様式設定
cf1.setBorder(Border.RIGHT, jxl.format.BorderLineStyle.THIN);
cf1.setBorder(Border.LEFT, jxl.format.BorderLineStyle.THIN);
cf1.setBorder(Border.TOP, jxl.format.BorderLineStyle.THIN);
cf1.setBorder(Border.BOTTOM, jxl.format.BorderLineStyle.THIN);
cf1.setVerticalAlignment(VerticalAlignment.CENTRE);
cf2.setBorder(Border.RIGHT, jxl.format.BorderLineStyle.THIN);
cf2.setBorder(Border.LEFT, jxl.format.BorderLineStyle.THIN);
cf2.setBorder(Border.TOP, jxl.format.BorderLineStyle.THIN);
cf2.setBorder(Border.BOTTOM, jxl.format.BorderLineStyle.THIN);
cf2.setVerticalAlignment(VerticalAlignment.CENTRE);
cf2.setAlignment(Alignment.CENTRE);
cf3.setBorder(Border.RIGHT, jxl.format.BorderLineStyle.HAIR);
cf3.setBorder(Border.LEFT, jxl.format.BorderLineStyle.THIN); //
cf3.setBorder(Border.BOTTOM, jxl.format.BorderLineStyle.THIN); //
cf3.setBorder(Border.TOP, jxl.format.BorderLineStyle.THIN); //
cf3.setVerticalAlignment(VerticalAlignment.CENTRE);
cf3.setAlignment(Alignment.CENTRE);
cf4.setVerticalAlignment(VerticalAlignment.CENTRE);
//帳票の測定結果総合シート
WritableSheet ws = wwb.getSheet(0);
//帳票のworkシート
WritableSheet ws1 = wwb.getSheet("work");
//指標値リスト
ArrayList<String[]> list = mdmt0030list;
//判定結果が「未記入」の項目数
int count = 0;
//判定対象の項目数
int count1 = 0;
//項目名
String itemname = CodeConstant.EMPTY;
//略称
String itemshort = CodeConstant.EMPTY;
//プロダクト名
String productName = CodeConstant.EMPTY;
//部署名
String productPost = CodeConstant.EMPTY;
//測定日時
String create = CodeConstant.EMPTY;
if (kidoukeyuu == true) {
// プロダクト情報
ArrayList<String[]> filelist1 = new ArrayList<String[]>(50);
// プロダクト情報を開く
CSVReader csvreader1 = new CSVReader(inPath + CodeConstant.FILE_PRODUCT_CSV, encoding);
// プロダクト情報の内容を取る
filelist1 = csvreader1.getRowElements();
// 測定ファイル
ArrayList<String[]> filelist2 = new ArrayList<String[]>(50);
// 測定ファイルを開く
CSVReader csvreader2 = new CSVReader(inPath + CodeConstant.FILE_TOTAL_CSV, encoding);
// 測定ファイルの内容を取る
filelist2 = csvreader2.getRowElements();
// 指標値
ArrayList<String[]> filelist3 = new ArrayList<String[]>(50);
// 指標値を開く
CSVReader csvreader3 = new CSVReader(inPath + CodeConstant.FILE_GUIDELINE_CSV, encoding);
// 指標値の内容を取る
filelist3 = csvreader3.getRowElements();
list = filelist3;
if (!(filelist1.size() == 1 || filelist2.size() == 1)) {
//プロダクト情報の内容を取る
//プロダクト名を取る
productName = filelist1.get(1)[1];
//部署名
productPost = filelist1.get(1)[2];
//測定日時
create = filelist2.get(1)[0];
}
} else {
//プロダクト名を取る
productName = mdmt0010.getProductname();
//部署名
productPost = mdmt0010.getProductpost();
//測定日時
create = DateFormatUtils.format(mdmt0020.getMeasuredate(), CodeConstant.DATE_FORMAT1);
}
//プロダクト名を帳票に記入
Label r5C4 = new Label(3, 4, productName);
ws.addCell(r5C4);
r5C4.setCellFormat(cf1);
//部署名を帳票に記入
Label r6C4 = new Label(3, 5, productPost);
ws.addCell(r6C4);
r6C4.setCellFormat(cf2);
//測定日時を帳票に記入
DateFormat df = new DateFormat("yyyy/mm/dd hh:mm:ss");
WritableCellFormat wcf = new WritableCellFormat(font1, df);
wcf.setBorder(Border.RIGHT, jxl.format.BorderLineStyle.THIN);
wcf.setBorder(Border.LEFT, jxl.format.BorderLineStyle.THIN);
wcf.setBorder(Border.TOP, jxl.format.BorderLineStyle.THIN);
wcf.setBorder(Border.BOTTOM, jxl.format.BorderLineStyle.THIN);
wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
wcf.setAlignment(Alignment.CENTRE);
Label r6C8 = new Label(7, 5, create);
ws.addCell(r6C8);
r6C8.setCellFormat(wcf);
//判定結果が「未記入」の項目数と判定対象の項目数を統計
for (int i = 0;i < 23;i++) {
if (CodeConstant.EMPTY.equals(ws.getCell(8, i + 26).getContents().toString())) {
count++;
count1++;
} else if (!(CodeConstant.TAISYOKAI.equals(ws.getCell(8, i + 26).getContents().toString()))) {
count1++;
}
}
//判定結果が「未記入」の項目数
BigDecimal normal = new BigDecimal(count);
//判定対象の項目数
BigDecimal taisyo = new BigDecimal(count1);
//総合判定
String hanteikeka = CodeConstant.TAISYOKAI;
BigDecimal sougouhantei = new BigDecimal(0);
if (taisyo.compareTo(sougouhantei) > 0) {
sougouhantei = normal.multiply(new BigDecimal(100)).divide(taisyo,1,BigDecimal.ROUND_HALF_UP);
hanteikeka = sougouhantei.toString();
}
//総合判定結果を帳票に記入
Label r9C4 = new Label(3, 8, hanteikeka);
ws.addCell(r9C4);
r9C4.setCellFormat(cf2);
}
/**
* 小数を表示
*
* @param item
* @return String
*/
private static String getitem(String item) {
// 空の場合、判定対象外とする
if(item == null || "".equals(item)){
return item;
}
// 桁区切(,)を使用する。また小数点第一位まで表示する。
return new DecimalFormat("###,##0.#").format(Double.valueOf(item));
}
}