读取单元格的内容对不同的数据类型有不同的方法,如公式单元格,最麻烦的就是数字和日期时间不能区别,头都会搞大,如果只是普通的字符串类型就好办多了。 try { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA: HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(wb); if (logger.isDebugEnabled()) { logger.debug("公式内容:" + cell + "值:" + evaluator.evaluateFormulaCell(cell)); } value = String.valueOf(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_NUMERIC: value = String.valueOf(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_STRING: case HSSFCell.CELL_TYPE_BLANK: value = String.valueOf(cell); break; default: value = cell.getRichStringCellValue().getString(); }
HSSFDataValidation data_validation = new HSSFDataValidation(regions,
constraint);
data_validation.createPromptBox("tip","select"); 这是我的。。已经实现
要是只是获取一下excel的内容应该很简单,根据行列就可以直接取到了啊。
try {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_FORMULA:
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(wb);
if (logger.isDebugEnabled()) {
logger.debug("公式内容:" + cell + "值:" + evaluator.evaluateFormulaCell(cell));
}
value = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = String.valueOf(cell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_STRING:
case HSSFCell.CELL_TYPE_BLANK:
value = String.valueOf(cell);
break;
default:
value = cell.getRichStringCellValue().getString();
}
POIFSFileSystem fs = null;
HSSFWorkbook wb = null;
try {
fs = new POIFSFileSystem(new FileInputStream(FileSavePath + Newfilename));
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
out.println("<script langugage=javascript>alert('无效的Excel文件!');window.history.go(-1);</script>");
return;
}
// 第一个工作表,Sheet1
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;// Excel 中第一个名字的单元格
String name = "";
int rowNum;
int i;
rowNum = sheet.getLastRowNum(); // Excel 中的记录行数
for (i = 0; i <= rowNum; i++) {
row = sheet.getRow(i);
// 判断 Excel 文件 为空
if (row == null) {
out.println("<script langugage=javascript>alert(' Excel 文件 为空 !');window.history.go(-1);</script>");
return;
}
cell = row.getCell((short) 0);
if (cell == null || cell.getStringCellValue().trim() == "") {
out.println("<script langugage=javascript>alert('名字不能为空!');window.history.go(-1);</script>");
return;
} else {
name = cell.getStringCellValue().trim();
}
由于需要,想对每个单元格存储一些相应的信息,这样,在操作Excel单元格的时候(主要是移动),
能判断出该单元格所附加的信息,这个信息不能用批注的形式写入,所以想到用设置数据有效性信息的方法来保存部分隐藏信息,通过程序可以将该信息写入
方法:addValidationData(HSSFDataValidation dataValidation)
但是取不到写入的信息,哪位大侠有更好的方法,请赐教。
去看吧
public void setValidation(HSSFSheet sheet,String title,String content,boolean isShow,int rowno,int colno) {
DVConstraint constraint=DVConstraint.createNumericConstraint(DVConstraint.ValidationType.ANY,DVConstraint.OperatorType.BETWEEN, null, null);
//设置数据有效性位置
CellRangeAddressList regions=new CellRangeAddressList(rowno,rowno,colno,colno);
//创建验证对象
HSSFDataValidation data_validation = new HSSFDataValidation(regions, constraint);
//添加提示标题和内容
data_validation.createPromptBox(title,content);
//设置是否显示
data_validation.setShowPromptBox(isShow);
//添加到工作表中
sheet.addValidationData(data_validation);
}
可以设置某个单元格的数据有效性信息,title和content,但是不知道如何取出。