2017-06-01 2 views
0

こんにちは、javaのapache-POIを使用してxlsxファイルの日付制約の検証を作成しようとしています。 以下は私が使用しているコードです。javaのapache-POIを使用してxlsxの日付制約の検証が機能しない

XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(spreadsheet); 
XSSFDataValidationConstraint constraint = (XSSFDataValidationConstraint)dvHelper.createDateConstraint(OperatorType.BETWEEN, 
        "25/10/2014", "30/10/2015", "dd/mm/yyyy"); 
CellRangeAddressList addressList = new CellRangeAddressList(0,0,0,0); 
       XSSFDataValidation dataValidation = (XSSFDataValidation)dvHelper.createValidation(constraint, addressList); 
dataValidation.setShowErrorBox(true); 
dataValidation.setEmptyCellAllowed(false); 
spreadsheet.addValidationData(dataValidation); 

しかし、動作しません。その値を除いて値を編集しようとすると、値を変更できません。あたかもその特定の価値に対するものであるかのようです。

私は、ファイルを開くと、以下のように、データ検証セクションで、検証が表示されます。

enter image description here

そして、私は開始日と終了日から「=」記号を削除した場合、今、それは動作します。 ここで私を助けてください。

答えて

1

では、String dateFormatは無視されます。したがって、単に "25/10/2014"と "30/10/2015"という文字列がExcelの日付ではなく数式に追加されました。

ではなく

DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN, 
        ""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), ""); 

います。

ありDateUtilorg.apache.poi.ss.usermodel.DateUtilで、sdfjava.text.SimpleDateFormat次のとおりです。

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy") 

コンプリート例:

import java.io.FileOutputStream; 

import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType; 
import org.apache.poi.ss.util.CellRangeAddressList; 
import org.apache.poi.ss.usermodel.DateUtil; 

import java.text.SimpleDateFormat; 

class DataValidationDateBetween { 

public static void main(String[] args) { 
    try { 

    Workbook workbook = new XSSFWorkbook(); 
    Sheet sheet = workbook.createSheet("Sheet1"); 

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 

    DataValidationHelper dvHelper = sheet.getDataValidationHelper(); 
    DataValidationConstraint dvConstraint = dvHelper.createDateConstraint(OperatorType.BETWEEN, 
        ""+DateUtil.getExcelDate(sdf.parse("25/10/2014")), ""+DateUtil.getExcelDate(sdf.parse("30/10/2015")), ""); 
    CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);    
    DataValidation validation = dvHelper.createValidation(dvConstraint, addressList); 

    validation.setShowErrorBox(true); 

    sheet.addValidationData(validation); 

    workbook.write(new FileOutputStream("DataValidationDateBetween.xlsx")); 
    workbook.close(); 

    } catch (Exception ex) { 
    ex.printStackTrace(); 
    } 
} 
} 
+0

おかげでアクセル、それが働きました。しかし、これと同じことはHSSFでも有効です。だから私はXSSFでもうまくいくと思った。 – paramvir

+1

はい、[HSSFDataValidationHelper.createDateConstraint](https://svn.apache.org/viewvc/poi/tags/REL_3_16_FINAL/src/java/org/apache/poi/hssf/usermodel/HSSFDataValidationHelper.java?revision=1791046&view=markup #140)は、指定された 'String dateFormat'を無視しません。 –

関連する問題