package jp.satomichan.nucalgen; import java.util.ArrayList; import java.util.List; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; public class MextStdFoodCompTable { private String brightColoredVegetablesXmlFileName = ""; private List brightColoredVegetableList = new ArrayList(); MextStdFoodCompTable(String brightColoredVegetablesXmlFileName_){ this.brightColoredVegetablesXmlFileName = brightColoredVegetablesXmlFileName_; try { XMLConfiguration config = new XMLConfiguration(this.brightColoredVegetablesXmlFileName); List vegetableNames = config.getList("bright-colored-vegetable.name"); for(Object vegeObj : vegetableNames) { this.brightColoredVegetableList.add(vegeObj.toString()); } } catch (ConfigurationException e) { e.printStackTrace(); } } //変換 void processInto(Workbook outputWorkbook) { Sheet foodComposithonSheet = outputWorkbook.cloneSheet(0); outputWorkbook.setSheetName(18, "成分表"); outputWorkbook.setSheetOrder("成分表", 0); //「成分識別子」行 Row idRow = foodComposithonSheet.getRow(10); for(int i = 4; i <= 61; i++) { Cell idCell = idRow.getCell(i); idCell.setCellValue(idCell.toString().replaceAll(" ", "")); } idRow.createCell(62).setCellValue("GROUP"); idRow.createCell(63).setCellValue("BRIGHT_COLORED_VEGETABLE"); int compSheetRowIndex = 11; //18 の食品群ごとの処理 for(int group = 1; group <= 18; group++) { Sheet thisSheet = outputWorkbook.getSheetAt(group); int rowCount = 0; for (Row thisRow : thisSheet) { rowCount++; if(rowCount < 12) {continue;} Row compRow = foodComposithonSheet.createRow(compSheetRowIndex); for (int cellCount = 1; cellCount <= 61; cellCount++) { Cell thisCell = thisRow.getCell(cellCount); String cellString = thisCell.toString(); cellString = cellString.replaceAll("\\(", ""); cellString = cellString.replaceAll("\\)", ""); cellString = cellString.replaceAll("-", "0"); cellString = cellString.replaceAll("Tr", "0"); //セル値・書式 コピー //Cell compCell = foodComposithonSheet.getRow(compSheetRowIndex).getCell(cellCount); Cell compCell = compRow.createCell(cellCount); compCell.setCellValue(cellString); compCell.setCellStyle(thisCell.getCellStyle()); compCell.setCellType(thisCell.getCellTypeEnum()); if(cellString.matches("^[\\d\\.]+$")) { compCell.setCellValue(Double.parseDouble(cellString)); CellStyle aCellStyle = compCell.getCellStyle(); aCellStyle.setDataFormat((short) 0); compCell.setCellStyle(aCellStyle); } } //CELL //食品群(1~18)書き込み compRow.createCell(62).setCellValue(group); //緑黄色野菜か? boolean isBrightColored = false; if(group == 6 && brightColoredVegetablesXmlFileName.length() > 0) { String foodName = thisRow.getCell(3).getStringCellValue(); for(String aBright : this.brightColoredVegetableList) { if(foodName.matches(".*" + aBright + ".*")) { isBrightColored = true; break; } } if(isBrightColored) { compRow.createCell(63).setCellValue(1); } } compSheetRowIndex++; } //ROW } //GROUP //元の表 削除 for(int i = 18; i > 0; i--) { outputWorkbook.removeSheetAt(i); } } }