All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.welemski.wrench.poi.util.SpreadsheetWriter Maven / Gradle / Ivy

/*
 * The MIT License
 *
 * Copyright 2016 Lemuel Raganas .
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package com.welemski.wrench.poi.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.function.BiConsumer;
import org.apache.commons.io.FilenameUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 *
 * @author Lemuel Raganas
 */
public class SpreadsheetWriter implements SheetWriter{
    
    private Workbook workbook;
    private Sheet currentSheet;
    private File file;
    
    public SpreadsheetWriter(File file){
        this.workbook = Spreadsheet.getWorkbook(file);
        this.file = file;
        if(this.workbook == null){
            String xt = FilenameUtils.getExtension(file.getName());
            if(xt.equalsIgnoreCase("xls")){
                this.workbook = new HSSFWorkbook();
            }else if(xt.equalsIgnoreCase("xlsx")){
                this.workbook = new XSSFWorkbook();
            }
        }
    }
    
    public SpreadsheetWriter(Workbook workbook){
        this.workbook = workbook;
    }
        
    /**
     * Specify the sheet to manipulate and if the sheet does not exists, will auto create.
     * 
     * Always call this method before performing writing to rows
     * 
     * @param sheetName
     * @return SpreadsheetWriter
     */
    @Override
    public SpreadsheetWriter useSheet(String sheetName){
        this.currentSheet = this.workbook.getSheet(sheetName);
        if(this.currentSheet == null){
            this.currentSheet = this.workbook.createSheet(sheetName);
        }
        return null;
    }
    
    @Override
    public SpreadsheetWriter setCell(String cellAddress, Object data){
        return this.setCell(cellAddress, data, null);
    }
    
    @Override
    public SpreadsheetWriter setCell(String cellAddress, Object data, BiConsumer format){
        CellReference cellRef = new CellReference(cellAddress);
        int atRow = cellRef.getRow();
        int atColumn = cellRef.getCol();
        Row row = this.currentSheet.getRow(atRow);
        if(row == null){
            row = this.currentSheet.createRow(atRow);
        }
        
        Cell cell = row.getCell(atColumn);
        if(cell == null){
            cell = row.createCell(atColumn);
        }
        
        if(format != null){
            format.accept(data, cell);
            return this;
        }
        
        if(data instanceof String){
            cell.setCellValue((String)data);
            return this;
        }
        
        if(data instanceof Number){
            cell.setCellValue(((Number)data).doubleValue());
            return this;
        }
        
        if(data instanceof java.util.Date){
            cell.setCellValue((java.util.Date)data);
            return this;
        }
        
        if(data instanceof Boolean){
            cell.setCellValue((Boolean)data);
            return this;
        }
        
        return this;
    }
    
    @Override
    public SpreadsheetWriter setCell(int row, int column, Object data, BiConsumer format){
        CellReference cellRef = new CellReference(row, column);
        String cellAddress = cellRef.toString();
        return this.setCell(cellAddress, data, format);
    }
    
    @Override
    public SpreadsheetWriter setCell(int row, int column, Object data){
        CellReference cellRef = new CellReference(row, column);
        String cellAddress = cellRef.formatAsString();
        return this.setCell(cellAddress, data, null);
    }
    
    @Override
    public SpreadsheetWriter setCell(int startAtRow, int startAtColumn, Object... items){
        int initialColumn = startAtColumn;
        for(Object item: items){
            this.setCell(startAtRow, initialColumn, item);
            initialColumn++;
        }
        return this;
    }
    
    @Override
    public boolean write(File file) throws FileNotFoundException, IOException{
        try (FileOutputStream fo = new FileOutputStream(file)) {
            this.workbook.write(fo);
        }
        return true;
    }
    
    @Override
    public boolean write() throws IOException{
        return this.write(this.file);
    }

    @Override
    public Workbook getWorkbook() {
        return this.workbook;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy