从你的描述似乎在您的Excel
中,小数分隔符是您当前区域设置中的逗号。因此,{"0,5", "1", "1,5", "2", "2,5"}
中的逗号与列表约束公式中用作列表分隔符的逗号冲突。这是因为这个列表约束公式将是<formula1>"0,5,1,1,5,2,2,5"</formula1>
。
当使用{"0.5", "1", "1.5", "2", "2.5"}
时,列表约束公式将是<formula1>"0.5,1,1.5,2,2.5"</formula1>
。但是现在这个公式中的点与您的语言环境设置冲突,逗号为小数分隔符,点作为日期文字中的分隔符。
这是一个众所周知的Excel
问题。当前Excel
版本正在通过使用不同类型的存储列表约束来解决此问题:<x12ac:list>"0,5",1,"1,5",2,"2,5"</x12ac:list>
而不是:<formula1>"0,5,1,1,5,2,2,5"</formula1>
。但apache poi
不支持这一点。
作为解决方法,我建议使用隐藏工作表来存储列表项。
例子:
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.util.*;
class CreateExcelDataValidationList {
public static void main(String[] args) throws Exception{
Workbook workbook = new XSSFWorkbook();
//create sheet for storing the list items:
Sheet sheet = workbook.createSheet("ListSheet");
sheet.createRow(0).createCell(0).setCellValue("SourceList");
int r = 1;
for (double d = 0.5; d < 3; d+=0.5) {
sheet.createRow(r++).createCell(0).setCellValue(d);
}
//unselect that sheet because we will hide it later
sheet.setSelected(false);
//create a named range for the list contraint
Name namedCell = workbook.createName();
namedCell.setNameName("SourceList");
String reference = "ListSheet!$A$2:$A$5";
namedCell.setRefersToFormula(reference);
//create the visible sheet
sheet = workbook.createSheet("Sheet1");
sheet.createRow(0).createCell(0).setCellValue("Take the ListItems from B1:");
sheet.setActiveCell(new CellAddress("B1"));
sheet.autoSizeColumn(0);
//create the data validation
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint("SourceList");
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 1, 1);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
sheet.addValidationData(validation);
//hide the ListSheet
workbook.setSheetHidden(0, true);
//set Sheet1 active
workbook.setActiveSheet(1);
workbook.write(new FileOutputStream("CreateExcelDataValidationList.xlsx"));
workbook.close();
}
}
谢谢你,为我工作:) – sHarivaRi