`

Java 做Excel读写操作

    博客分类:
  • Java
阅读更多

=========================1 files========================

package com.teckwah.logistics.dms.dao;

import java.util.Date;

import jxl.Cell;
import jxl.Sheet;

import com.teckwah.logistics.util.ActionMessageException;
import com.teckwah.logistics.util.Converter;

public abstract class PriceBookInfo {

    private String projectCode;

    /**
     * @param projectCode
     */
    public PriceBookInfo(String projectCode) {
        this.projectCode = projectCode;
    }

    protected abstract Boolean isEOF(Sheet sheet,int row);
   
    protected String getCellStringValue(Sheet sheet,int col,int row){
       
        Cell cell = null;
        try{
            cell=sheet.getCell(col,row);
        }
        catch (Exception e){
           
        }
        String result = null;
        if(cell!=null){
            result = cell.getContents();
            if (result!=null&&!"".equals(result.trim())){
                result = result.trim();
            }
        }
        return result;
    }
   
    protected Double getCellDoubleValue(Sheet sheet,int col,int row){
       
        Double result=0.0;
        String value = getCellStringValue(sheet,col,row);
        if (value!=null && !value.equals("")){
            try{
                result=Double.valueOf(value);
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }else{
            throw new ActionMessageException("TheValueNotAllowEmpty:"+(row+1)+":line,"+(col+1)+":column in file");
        }
        return result;
    }
   
    protected Long getCellLongValue(Sheet sheet,int col,int row){
       
        Long result=0L;
        String value = getCellStringValue(sheet,col,row);
        if (value!=null && !value.equals("")){
            try{
                result=Long.valueOf(value);
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }else{
            throw new ActionMessageException("TheValueNotAllowEmpty:"+(row+1)+":line,"+(col+1)+":column in file");
        }
        return result;
    }
   
    protected Date getCellDateValue(Sheet sheet,int col,int row){
       
        Date result=null;
        String value = getCellStringValue(sheet,col,row);
        if (value!=null && !value.equals("")){
            try{
                result=Converter.convertStringToDateTimeByUS(value);
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }else{
            throw new ActionMessageException("TheValueNotAllowEmpty:"+(row+1)+":line,"+(col+1)+":column in file");
        }
        return result;
    }
   
    protected Boolean getCellBooleanValue(Sheet sheet,int col,int row){
       
        Boolean result=false;
        String value = getCellStringValue(sheet,col,row);
        if (value!=null && !value.trim().equals("") &&
                (value.trim().equalsIgnoreCase("yes") ||
                        value.trim().equalsIgnoreCase("true") ||
                        value.trim().equalsIgnoreCase("1"))){
            result =true;
        }
        return result;
    }

    /**
     * @return projectCode
     */
    public String getProjectCode() {
        return projectCode;
    }

    /**
     * @param projectCode 要设置的 projectCode
     */
    public void setProjectCode(String projectCode) {
        this.projectCode = projectCode;
    }
   
   
}
=========================2 files========================

/**
 * @author Linian
 */
package com.teckwah.logistics.dms.dao;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;

import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import com.teckwah.logistics.dms.dao.impl.PriceBookCodeDAO;
import com.teckwah.logistics.dms.dao.impl.PriceBookDAO;
import com.teckwah.logistics.domain.ItemMaster;
import com.teckwah.logistics.domain.ItemMasterId;
import com.teckwah.logistics.domain.PriceBook;
import com.teckwah.logistics.domain.PriceBookCode;
import com.teckwah.logistics.domain.PriceBookCodeId;
import com.teckwah.logistics.mim.dao.impl.ItemMasterDAO;
import com.teckwah.logistics.util.ActionMessageException;
import com.teckwah.logistics.util.Converter;
import com.teckwah.logistics.util.GlobUtil;
import com.teckwah.logistics.util.PropertiesUtil;

/**
 * @author Linian
 *
 */
public class UploadPriceBookInfo extends PriceBookInfo {

    private final int startColumn = 0;
   
    private final int firstRow = 0;
   
    private final int startRow = 1;
   
    private final static String SHEETNAME = "PriceBook Details Info";
   
    private String projectCode;
   
    private String timeZone;
   
    public static String datePatternByUS="yyyy-MM-dd HH:mm:ss";
   
    private ItemMasterDAO itemMasterDao;
   
    private PriceBookDAO priceBookDao;
   
    private PriceBookCodeDAO priceBookCodeDao;

    private HashSet<String> set;
   
    private jxl.write.DateFormat dateFormat;
   
    private jxl.write.WritableCellFormat cellFormat;
   
    private Map<String, PriceBookCode> priceBookCodeMap;
   
    public UploadPriceBookInfo(String projectCode, String timeZone, ItemMasterDAO itemMasterDao, PriceBookDAO priceBookDao, PriceBookCodeDAO priceBookCodeDao) {
        super(projectCode);
        this.projectCode = projectCode;
        this.timeZone = timeZone;
        this.itemMasterDao = itemMasterDao;
        this.priceBookDao = priceBookDao;
        this.priceBookCodeDao = priceBookCodeDao;
        this.set = new HashSet<String>();
        this.dateFormat = new jxl.write.DateFormat(datePatternByUS);
        this.cellFormat = new jxl.write.WritableCellFormat(dateFormat);
        this.priceBookCodeMap = new HashMap<String, PriceBookCode>();
    }

    /* (非 Javadoc)
     * @see com.teckwah.logistics.dms.dao.PriceBookInfo#isEOF(jxl.Sheet, int)
     */
    @Override
    protected Boolean isEOF(Sheet sheet, int row) {
        Boolean result=true;
        if(sheet!=null){
            String value=getCellStringValue(sheet,startColumn,row+startRow);
            result = value ==null || value.trim().equals("");
        }
        return result;
    }
   
    private String isValid(String itemNo){
        if(itemNo==null||"".equals(itemNo.trim()))
            throw new ActionMessageException("err.ItemNoIsNull");
        if(!set.contains(itemNo)){
            ItemMasterId id = new ItemMasterId(projectCode, itemNo);
            ItemMaster itemMaster = itemMasterDao.findById(id);
            if(itemMaster==null||itemMaster.getId().getItemNo()==null||"".equals(itemMaster.getId().getItemNo().trim())){
                set.clear();
                throw new ActionMessageException("err.ItemNoNotExist");
            }else
                set.add(itemNo);
        }
        return itemNo;
    }
   
    private PriceBookCode initPriceBookCode(PriceBookCode code, PriceBookCodeId id){
        String key = id.getProjectCode()+id.getPriceBook();
        if(!priceBookCodeMap.containsKey(key)){
            code = priceBookCodeDao.getPriceBookCodeBy(projectCode, id.getPriceBook());
            if(code!=null){
                code.getId().setOrigin(id.getOrigin());
                priceBookCodeMap.put(key, code);
            }else{
                throw new ActionMessageException("err.PriceBookNotExist");
            }
        }else{
            code = priceBookCodeMap.get(key);
        }
        return code;
    }
   
    private Long isValid(Long origin){
        boolean result = true;
        if(origin!=null){
            for(PropertiesUtil.Origin e : PropertiesUtil.Origin.values()){
                if(e.ordinal()==origin.intValue()){
                    result = false;
                    break;
                }
            }
        }else{
            throw new ActionMessageException("err.OriginIsNull");
        }
        if(result){
            throw new ActionMessageException("err.OriginIsValid");
        }
        return origin;
    }

    private Date isValid(Date date){
        if(date==null)
            throw new ActionMessageException("err.DateNotAllowEmpty");
        return date;
    }
   
    private String isEmpty(String str){
        if(str!=null && !"".equals(str.trim()))
            return str.trim();
        else
            throw new ActionMessageException("err.TheValueNotAllowEmpty");
       
    }
    private Boolean getBooleanValue(Boolean data){
        if(data==null)
            data = false;
        return data;
    }
   
    private Double isValid(Double data){
        if(data==null||data<=0D)
            throw new ActionMessageException("qtyOrPriceLessThanZero");
        return data;
    }
   
    private void initPriceBook(PriceBook obj, Sheet st, int row){
        PriceBookCodeId codeId = new PriceBookCodeId();
        codeId.setProjectCode(projectCode);
        codeId.setOrigin(isValid(getCellLongValue(st, startColumn, row+startRow)));
        codeId.setPriceBook(isEmpty(getCellStringValue(st, startColumn+1, row+startRow)));
        PriceBookCode code = new PriceBookCode();
        obj.setPriceBookCode(initPriceBookCode(code, codeId));
        obj.setItem(isValid(getCellStringValue(st, startColumn+2, row+startRow)));
        obj.setCurrency(isEmpty(getCellStringValue(st, startColumn+3, row+startRow)));
        obj.setMinQty(isValid(getCellDoubleValue(st, startColumn+4, row+startRow)));
        obj.setQtyUnit(isEmpty(getCellStringValue(st, startColumn+5, row+startRow)));
        obj.setEffectiveDate(Converter.convertToGmtDate(timeZone, isValid(getCellDateValue(st, startColumn+6, row+startRow))));
        obj.setExpiredDate(Converter.convertToGmtDate(timeZone, isValid(getCellDateValue(st, startColumn+7, row+startRow))));
        obj.setPrice(isValid(getCellDoubleValue(st, startColumn+8, row+startRow)));
        obj.setForQuotation(getBooleanValue(getCellBooleanValue(st, startColumn+9, row+startRow)));
        obj.setIsDefaultBook(getBooleanValue(getCellBooleanValue(st, startColumn+10, row+startRow)));
        obj.setEntryDate(Converter.convertToGmtDate(timeZone, isValid(getCellDateValue(st, startColumn+11, row+startRow))));
        obj.setRemark(isEmpty(getCellStringValue(st, startColumn+12, row+startRow)));
    }
   
    private void doPriceBook(Workbook workbook){
        if(workbook!=null){
            PriceBook obj;
            Sheet st = workbook.getSheet(0);    /// the first sheet...
            if(st!=null){
                for(int i=0; i<st.getRows(); i++){
                    if(isEOF(st, i)) break;
                    obj = new PriceBook();
                    initPriceBook(obj, st, i);
                    if(obj!=null)
                        priceBookDao.attachDirty(obj);
                }
            }
        }
    }
   
    public void doGenPriceBookInfo(Workbook workbook){
        doPriceBook(workbook);
    }
   
    private void writeToSheet(WritableSheet sheet, List<PriceBook> list){
        if(list!=null&&list.size()>0){
            PriceBook obj;
            for(int i=0; i<list.size(); i++){
                obj = list.get(i);
                try {
                    sheet.addCell(new Label(startColumn, i+startRow, obj.getPriceBookCode().getId().getOrigin().toString()));
                    sheet.addCell(new Label(startColumn+1, i+startRow, obj.getPriceBookCode().getId().getPriceBook()));
                    sheet.addCell(new Label(startColumn+2, i+startRow, obj.getItem()));
                    sheet.addCell(new Label(startColumn+3, i+startRow, obj.getCurrency()));
                    sheet.addCell(new jxl.write.Number(startColumn+4, i+startRow, obj.getMinQty()));
                    sheet.addCell(new Label(startColumn+5, i+startRow, obj.getQtyUnit()));
                    sheet.addCell(new jxl.write.DateTime(startColumn+6, i+startRow, Converter.convertToLocalDateEx(timeZone, obj.getEffectiveDate()), cellFormat));
                    sheet.addCell(new jxl.write.DateTime(startColumn+7, i+startRow, Converter.convertToLocalDateEx(timeZone, obj.getExpiredDate()), cellFormat));
                    sheet.addCell(new jxl.write.Number(startColumn+8, i+startRow, obj.getPrice()));
                    sheet.addCell(new jxl.write.Boolean(startColumn+9, i+startRow, obj.getForQuotation()));
                    sheet.addCell(new jxl.write.Boolean(startColumn+10, i+startRow, obj.getIsDefaultBook()));
                    sheet.addCell(new jxl.write.DateTime(startColumn+11, i+startRow, Converter.convertToLocalDateEx(timeZone, obj.getEntryDate()), cellFormat));
                    sheet.addCell(new Label(startColumn+12, i+startRow, obj.getRemark()));
                    sheet.addCell(new jxl.write.Number (startColumn+13, i+startRow, obj.getPriceBookId()));
                    sheet.addCell(new Label(startColumn+14, i+startRow, obj.getPriceBookCode().getId().getProjectCode()));
                } catch (RowsExceededException e) {
                    e.printStackTrace();
                } catch (WriteException e) {
                    e.printStackTrace();
                }
            }
        }
    }
   
    private void genDownLoadPriceBookInfo(String realPath, List<PriceBook> list){
        try {
            WritableWorkbook book = Workbook.createWorkbook(new File(realPath));
            WritableSheet sheet = book.createSheet(SHEETNAME, 0);
            jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD,
                    false, jxl.format.UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
            jxl.write.WritableCellFormat format = new jxl.write.WritableCellFormat(wfc);
            format.setAlignment(jxl.format.Alignment.JUSTIFY);
            format.setBackground(jxl.format.Colour.GRAY_25);
            for(int i=0; i<=14; i++)sheet.setColumnView(i, 18);
            sheet.addCell(new Label(startColumn, firstRow, "ORIGIN", format));
            sheet.addCell(new Label(startColumn+1, firstRow, "PRICEBOOK", format));
            sheet.addCell(new Label(startColumn+2, firstRow, "ITEMNO", format));
            sheet.addCell(new Label(startColumn+3, firstRow, "CURRENCY", format));
            sheet.addCell(new Label(startColumn+4, firstRow, "MINQTY", format));
            sheet.addCell(new Label(startColumn+5, firstRow, "QTYUNIT", format));
            sheet.addCell(new Label(startColumn+6, firstRow, "EFFECTIVEDATE", format));
            sheet.addCell(new Label(startColumn+7, firstRow, "EXPIREDDATE", format));
            sheet.addCell(new Label(startColumn+8, firstRow, "PRICE", format));
            sheet.addCell(new Label(startColumn+9, firstRow, "FORQUOTATION", format));
            sheet.addCell(new Label(startColumn+10, firstRow, "ISDEFAULTBOOK", format));
            sheet.addCell(new Label(startColumn+11, firstRow, "ENTRYDATE", format));
            sheet.addCell(new Label(startColumn+12, firstRow, "REMARK", format));
            sheet.addCell(new Label(startColumn+13, firstRow, "PRICEBOOKID", format));
            sheet.addCell(new Label(startColumn+14, firstRow, "PROJECTCODE", format));
            writeToSheet(sheet, list);
            book.write();
            book.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (RowsExceededException ee) {
            ee.printStackTrace();  
        } catch (WriteException e) {  
            e.printStackTrace();  
        }  
    }
   
   
    public String downloadPriceBookInfo(List<PriceBook> list){
        String path = "/secure/printReport/";
        String fileName = projectCode + "_" + (new Date()).getTime()+ ".xls";
        String slash = GlobUtil.getSlash();
        String realPath = GlobUtil.getRealPath("secure"+slash+"printReport" + slash +fileName);
        genDownLoadPriceBookInfo(realPath, list);
        return path+fileName;
    }

    /**
     * @param itemMasterDao 要设置的 itemMasterDao
     */
    public void setItemMasterDao(ItemMasterDAO itemMasterDao) {
        this.itemMasterDao = itemMasterDao;
    }

    /**
     * @return priceBookDao
     */
    public PriceBookDAO getPriceBookDao() {
        return priceBookDao;
    }

    /**
     * @return set
     */
    public HashSet<String> getSet() {
        return set;
    }

    /**
     * @return projectCode
     */
    public String getProjectCode() {
        return projectCode;
    }

    /**
     * @return dateFormat
     */
    public jxl.write.DateFormat getDateFormat() {
        return dateFormat;
    }

    /**
     * @return cellFormat
     */
    public jxl.write.WritableCellFormat getCellFormat() {
        return cellFormat;
    }

    /**
     * @return priceBookCodeMap
     */
    public Map<String, PriceBookCode> getPriceBookCodeMap() {
        return priceBookCodeMap;
    }

    /**
     * @return priceBookCodeDao
     */
    public PriceBookCodeDAO getPriceBookCodeDao() {
        return priceBookCodeDao;
    }

    /**
     * @return timeZone
     */
    public String getTimeZone() {
        return timeZone;
    }

   
}

  • 大小: 18.3 KB
分享到:
评论

相关推荐

    java操作excel读写

    java操作excel读写,可以根据自己的需要灵活修改。导入导出excel

    java excel 读写 java excel 导入数据库

    以上就是关于"Java Excel 读写"和"Java Excel 导入数据库"的关键知识点,涵盖了从文件读写到数据库操作的整个过程,希望对你的开发工作有所帮助。在实际应用中,根据项目需求选择合适的库,合理设计数据处理逻辑,...

    java poi excel读写demo

    java poi excel操作demo 支持xls和xlsx两个格式的excel文件的读写操作。读取模式包含用户模式和事件驱动模式 ,事件驱动模式能够支持大数据量的读操作,写操作xlsx使用sxssf方式支持大数据量的写入操作。 demo 基于...

    java读写excel文件

    在Java编程中,读写Excel文件是一项常见的任务,特别是在数据处理、数据分析或报表生成的场景下。本篇文章将深入探讨如何使用Java进行Excel文件的读取与写入操作,主要聚焦于Apache POI库,这是一个广泛使用的开源...

    Java操作Excel读写的POI包

    Java操作Excel读写的POI包是Apache软件基金会开发的一个开源项目,主要用来处理Microsoft Office格式的文件,尤其是Excel。在给定的文件列表中,我们看到了三个关键的库文件:`poi-3.9-20121203.jar`、`poi-ooxml-...

    java poi 读写excel

    这篇博客文章可能详细介绍了如何使用Java POI进行Excel的读写操作。 在Java开发中,使用POI库可以实现以下功能: 1. **创建Excel工作簿**:通过`WorkbookFactory.create()`方法可以创建一个新的Excel工作簿对象,...

    java 读写excel

    java 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写exceljava 读写excel

    excel 读写操作类

    在编程领域,为了实现对Excel文件的自动化处理,我们通常会利用特定的库或API来执行读写操作。本篇将详细介绍如何进行Excel的读写操作,并探讨相关的编程知识点。 1. **库的选择**: - 对于Python,我们可以使用`...

    Java实现Excel读写的poi 5.2.1版本jar

    它将XML文档映射到Java对象,使得POI可以方便地操作Excel文件中的元素。 `poi-ooxml-5.2.1.jar`:此文件包含了处理OOXML文件格式的完整功能,与lite版本相比,它提供了更全面的API和功能。 `poi-scratchpad-5.2.1....

    Java读写文件(excel)

    Java读写文件-Excel

    Java Excel读写组件jxl使用

    Java Excel读写组件jxl使用 例如导出ofice文件

    jxl的excel读写操作

    Java中的JXL库是一个广泛使用的库,用于读取和写入Microsoft Excel文件。...以上就是JXL库在Java中进行Excel读写操作的基本知识。通过理解和应用这些概念,你可以有效地在Java应用程序中处理Excel数据。

    java对Excel的操作

    Java提供了多种库来支持对Excel的读写操作,使得开发者能够方便地进行Excel文件的处理。本篇文章将深入探讨Java对Excel的操作。 首先,我们最常使用的Java库是Apache POI。Apache POI是一个开源项目,它提供了API来...

    java 读写Excel组件

    综上所述,Java中的Excel读写组件为开发者提供了灵活且强大的工具,通过选择合适的库并遵循最佳实践,可以高效地处理Excel文件。在实际开发中,可以根据项目的具体需求和资源限制来选择Apache POI、JExcelAPI或其他...

    一种基于Java注解和反射机制的Excel文件读写操作方法.zip

    在Excel读写操作中,我们可以通过反射获取带有`@ExcelColumn`注解的字段,并根据其对应的列名来读取或写入Excel数据。 下面是一个简化的流程概述: 1. 定义一个实体类,其中的字段使用`@ExcelColumn`注解,指定...

    Excel文件读写java代码

    2. **Java中的Excel操作**:Java本身并不内置对Excel文件的直接支持,但可以通过第三方库如JXL(Java Excel API)来实现读写Excel文件的功能。JXL是一个开源的Java库,它提供了方便的API,使得开发者可以轻松地操作...

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    总的来说,Java开发者可以通过Apache POI和JExcelAPI轻松地读写Excel文件,进行各种操作,如设置列宽、处理合并或拆分的单元格。理解并熟练掌握这些库,将极大地提升你在处理Excel数据时的效率。在实际项目中,根据...

    java生成excel图表

    2. Apache POI:一个Java库,用于读写Excel文件。 3. iText:一个Java库,用于生成PDF文件。 Java生成Excel图表的常用方法: 1. 使用ChartFactory创建JFreeChart对象。 2. 使用DefaultPieDataset创建饼状图数据集...

    一种基于Java注解和反射机制的Excel文件读写操作方法.pdf

    本研究提出了一种改进型的Excel文件读写操作方法,该方法通过Java注解和反射机制,实现了业务逻辑与文件操作的分离,使得应用程序能够更灵活地处理Excel文件数据。 4. 松耦合编程思想:在软件工程中,松耦合是一种...

Global site tag (gtag.js) - Google Analytics