import java.util.Calendar;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
/**
Excel に書き込むデータを保持する
*/
public class ExcelData {
private HSSFWorkbook m_wb;
private HSSFSheet hsheet;
private HSSFRow hrow;
private HSSFCell hcell;
/** コンストラクタ */
public ExcelData(){
m_wb=new HSSFWorkbook();
}
public ExcelData(HSSFWorkbook wb){
m_wb=wb;
}
public void addData(String sheet,int col,int row,String val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(String sheet,int col,int row,String val,
int top,int bottom,int left,int right){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート名
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(String sheet,int col,int row,String val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(String sheet,int col,int row,boolean val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(String sheet,int col,int row,boolean val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート名
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(String sheet,int col,int row,boolean val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(String sheet,int col,int row,Calendar val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(String sheet,int col,int row,Calendar val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート名
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(String sheet,int col,int row,Calendar val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(String sheet,int col,int row,double val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(String sheet,int col,int row,double val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート名
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(String sheet,int col,int row,double val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(String sheet,int col,int row,Date val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(String sheet,int col,int row,Date val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート名
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(String sheet,int col,int row,Date val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(int sheet,int col,int row,String val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(int sheet,int col,int row,String val,
int top,int bottom,int left,int right){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(int sheet,int col,int row,String val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(int sheet,int col,int row,boolean val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(int sheet,int col,int row,boolean val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(int sheet,int col,int row,boolean val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(int sheet,int col,int row,Calendar val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(int sheet,int col,int row,Calendar val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(int sheet,int col,int row,Calendar val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(int sheet,int col,int row,double val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(int sheet,int col,int row,double val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(int sheet,int col,int row,double val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
public void addData(int sheet,int col,int row,Date val){
addData(sheet,col,row,val,0,0,0,0);
}
public void addData(int sheet,int col,int row,Date val,
int top,int bottom,int left,int right ){
addData(sheet,col,row,val,top,bottom,left,right,(short)0);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param top 罫線フラグ
@param bottom 罫線フラグ
@param left 罫線フラグ
@param right 罫線フラグ
@param color 色 */
public void addData(int sheet,int col,int row,Date val,
int top,int bottom,int left,int right,short color ){
getcell(sheet,col,row);
hcell.setCellValue(val);
setstyle(bottom,top,left,right,color);
}
/** エクセルに書き込むセル単位のデータを追加
@param sheet シート
@param col 行
@param row 列
@param val 値
@param style */
public void addData(int sheet,int col,int row,Object val,HSSFCellStyle style){
getcell(sheet,col,row);
if(val instanceof Boolean){
hcell.setCellValue(((Boolean)val).booleanValue());
}else if(val instanceof Calendar){
hcell.setCellValue((Calendar)val);
}else if(val instanceof Date){
hcell.setCellValue((Date)val);
}else if(val instanceof Double){
hcell.setCellValue(((Double)val).doubleValue());
}else if(val instanceof String){
hcell.setCellType(HSSFCell.CELL_TYPE_STRING);
//hcell.setEncoding(HSSFCell.ENCODING_UTF_16);
hcell.setCellValue((String)val);
if(((String)val).indexOf("\n")>=0){
style.setWrapText(true);
}
}
setstyle(style);
}
private void getcell(String sheet,int col,int row){
if(m_wb.getSheetIndex(sheet)<0){
hsheet=m_wb.createSheet(sheet);
}else{
hsheet=m_wb.getSheet(sheet);
}
hrow=hsheet.getRow((short)row);
if(hrow==null){
hrow=hsheet.createRow((short)row);
}
hcell=hrow.getCell(col);
if(hcell==null){
hcell=hrow.createCell(col);
}
}
private void getcell(int sheet,int col,int row){
hsheet=m_wb.getSheetAt(sheet);
if(hsheet==null){
hsheet=m_wb.createSheet();
}
hrow=hsheet.getRow((short)row);
if(hrow==null){
hrow=hsheet.createRow((short)row);
}
hcell=hrow.getCell(col);
if(hcell==null){
hcell=hrow.createCell(col);
}
}
private void setstyle(HSSFCellStyle style){
hcell.setCellStyle(style);
}
private void setstyle(int bottom,int top,int left,int right,
short color){
HSSFCellStyle style =m_wb.createCellStyle();
if(bottom>0){
if(bottom==1){
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBottomBorderColor(HSSFColor.BLACK.index);
}
}
if(left>0){
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setLeftBorderColor(HSSFColor.BLACK.index);
}
if(right>0){
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setRightBorderColor(HSSFColor.BLACK.index);
}
if(top>0){
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setTopBorderColor(HSSFColor.BLACK.index);
}
if(color>0){
style.setFillForegroundColor(color);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
}
hcell.setCellStyle(style);
}
public HSSFWorkbook get(){
return m_wb;
}
}