2个回答
展开全部
这个要做是能实现的,你先解析了你的xls文件,我解析的是两行,第二行是数字才能通过,要不就会返回一个空,这样的情况下,你把那个xls文件做成一个流,返回一个整体的字符串,然后解析一下成为单个的String类型就行了。这个你自己参考一下,我的是在jsp里面运行的,你要是纯java的那就直接写个方法引入个流就行了,研究一两天肯定能行,
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class AnalsyXls {
public String readlsx(InputStream is) {
String totalString = "";
boolean bl = false;
try {
HSSFWorkbook book = new HSSFWorkbook(is);
for(int numSheet = 0; numSheet < book.getNumberOfSheets(); numSheet++){
HSSFSheet xssfSheet = book.getSheetAt(numSheet);
if(xssfSheet == null){
continue;
}
// 循环行Row
for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++ ){
HSSFRow xssfRow = xssfSheet.getRow( rowNum);
if(xssfRow == null){
continue;
}
if(xssfRow.getLastCellNum()==2){ //只允许是两列,如果不符合规则,直接跳出循环报错
for(int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++){
HSSFCell xssfCell = xssfRow.getCell( cellNum);
if(xssfCell == null){
continue;
}
if(cellNum == 1){
bl =isNum(getValue(xssfCell));
if(bl){//如果这个单元格是数字的话就进行拼串
totalString += getValue(xssfCell)+":100,";
}else{//如果这个单元格不是数字,返回页面报错
totalString="";
break;
}
}
else if(cellNum == 0) {
totalString += getValue(xssfCell)+":";
}else{
continue;
}
}
}else{
totalString="";
break;
}
// 循环列Cell
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return totalString;
}
public String getValue(HSSFCell hssfCell){
if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){
return String.valueOf( hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){
return String.valueOf( hssfCell.getNumericCellValue());
}else{
return String.valueOf( hssfCell.getStringCellValue());
}
}
public static boolean isNum(String str) { //一个静态方法,判断你输入的是不是数字
return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
}
}
--------引入流的一个简单举例
FileItemFactory factory = new DiskFileItemFactory(); //为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> itr = items.iterator();
String fieldName ="N";
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
//检查当前项目是普通表单项目还是上传文件
if(item.isFormField()){ //如果是普通表单项目,显示表单内容
fieldName = item.getFieldName();
} else { //如果是上传文件,显示文件名
String fileName=item.getName();
InputStream is= item.getInputStream();
String totalString=null;
if(fileName.lastIndexOf(".xlsx")>0) {
AnalsyXlsx a =new AnalsyXlsx(); //filePath= filePath.replaceAll("
\\\\
", "
\\\\\\\\
");替换文件中的路径
totalString =a.readXlsx(is);
//解析xlsx文件
if(totalString!=""){
rm.setCommon(totalString); // 进行数据库的申请写入
right="上传文件成功!等待审核!";
}else{
worry="<script type='text/javascript' >alert('您上传的文件不符合规则,请认真核对后再上传!');</script>";
}
}else{
AnalsyXls lsx= new AnalsyXls();
totalString =lsx.readlsx(is);
//解析xls文件
if(totalString!=""){
rm.setCommon(totalString); // 进行数据库的申请写入
right="上传文件成功!等待审核!";
}else{
worry="<script type='text/javascript' >alert('您上传的文件不符合规则,请认真核对后再上传!');</script>";
}
}
}
}
展开全部
xls文件做不到的吧? 如果是.csv倒是有可能,.csv打开就是Excel 也能被java解析,然后按照你的要求的话应该不需要三大框架,只需要Struts1.2+Hibernate3.0加上jsp+mysql数据库即可,如果怕麻烦也可以用JDBC来完成,如果你做不到的话我可以考虑帮你试试,用Hibernate+Struts来做。
追问
式样书要求要用spring+hibernate+struts一起做的。而且要求用split分开每个属性值判断。不知道能不能做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询