我想用java,在JSP页面弄个浏览按钮,选择文件然后把选择到的文件上传到自己的服务器,tomcat上面,然后根据读取上传的excel文件的内容!求高手!!!!还有个问题,做这个功能所需的JAR包,为什么我有了JXL.JAR包在后台java页面还是导入不了
,比如:import jxl.*;
import jxl.write.*;
JXL是红色的,我的包也放到了项目的lib目录中!高手们有做的话,给我附带个包,谢谢了!!!!!
,比如:import jxl.*;
import jxl.write.*;
JXL是红色的,我的包也放到了项目的lib目录中!高手们有做的话,给我附带个包,谢谢了!!!!!
这样import就正常了
jar包下载地址:
http://poi.apache.org/download.html
是的!上传可以看下struts2的上传控件,或者smartupload也不错,自己google下
public Map getMap() throws BiffException, IOException, DocumentException{
// HashMap mapGroup = new HashMap();
getDts();
HashMap mapPerson = new HashMap();
File file1 = new File("resource/zu.xls");// 读取组的xls文件
InputStream is1 = new FileInputStream(file1);
jxl.Workbook rwb1 = Workbook.getWorkbook(is1);
Sheet st1 = rwb1.getSheet(0);// 得到excel中的第1张表
for (int i = 1; i < st1.getRows(); i++) {// 判断有哪些组添加到hashmap中
Cell cgroup = st1.getCell(1, i);
String group = cgroup.getContents();
Cell cperson = st1.getCell(0, i);
String person = cperson.getContents();
// mapGroup.put(group, person);
mapPerson.put(person, group);
}
return mapPerson;
}
哥们自己写的,你参考下吧。
前些日子刚整理的 用jxl实现jsp读取Excel数据
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;import javax.faces.application.Application;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;/**
* author:wx * describe:Reads the Excel example *
*/
public class ReadExcelServerlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private String filename = ""; /**
* * Constructor of the object.
*/
public ReadExcelServerlet() {
super();
} /**
* Destruction of the servlet. <br>
*
*/
public void destroy() {
super.destroy();
}// Just puts "destroy" string in log // Put your code here
/**
* doGet
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
} /**
* doPost
*/
public static String doubledate2str(String datestr) {
String sss = "1900-01-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
try {
c.setTime(sdf.parse(sss));
} catch (ParseException e) {
e.printStackTrace();
}
String[] st = datestr.split("\\.");
if (st.length == 2) {
int i1 = Integer.parseInt(st[0]);
String str = "0." + st[1];
long i2 = (long) (Double.parseDouble(str) * 24 * 3600);
c.add(Calendar.DAY_OF_MONTH, i1);
for (int i = 0; i < (i2 / Integer.MAX_VALUE); i++) {
c.add(Calendar.SECOND, Integer.MAX_VALUE);
}
int iii = (int) (i2 % Integer.MAX_VALUE);
c.add(Calendar.SECOND, iii);
return sdf.format(c.getTime());
}
return "";
} /**
* 上传
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
* @throws SQLException
*/
public void upload(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException, SQLException {
req.setCharacterEncoding("GB2312"); SmartUpload smart = new SmartUpload(); PageContext pageContext = JspFactory.getDefaultFactory()
.getPageContext(this, req, resp, null, true, 8192, true); // 上传初始化
smart.initialize(pageContext);
smart.setMaxFileSize(10000000); // 单位应该为kb
smart.setTotalMaxFileSize(40000000); // 文件总大小
smart.setAllowedFilesList("csv,xls"); // 允许上传的文件类型
smart.setDeniedFilesList("exe,html,,");// 禁止上传类型, 两个逗号代表没有后缀名
// 准备上传
try {
smart.upload();
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
filename = sdf.format(d);// 根据上传的时间修改上传的文件名为自定义格式,避免重复名称
// ServletContext application = this.getServletContext();
// 获取文件扩展名
String ext = smart.getFiles().getFile(0).getFileExt();
// 保存上传的文件 smart.getFiles().getFile(0).saveAs(
"/upload/" + filename + "." + ext);
filename = filename + "." + ext;// 赋值给方法用 } catch (ServletException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SmartUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// -----------------------上传部分----------------------------
try {
this.upload(request, response);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("成功");
// ------------------------上传部分---------------------------
response.setContentType("text/html;charset=gb2312"); ServletContext application = this.getServletContext();
List<Object> list = new ArrayList<Object>();
String str = ""; try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
application.getRealPath("") + "/upload/" + filename));
// 创建工作簿
HSSFWorkbook workBook = new HSSFWorkbook(fs); // 获得Excel中工作表个数 System.out.println("工作表个数 :" + workBook.getNumberOfSheets()
+ "<br>");
for (int i = 0; i < workBook.getNumberOfSheets(); i++) { System.out.println("<font color='red'> " + i
+ " ***************工作表名称:" + workBook.getSheetName(i)
+ " ************</font><br>");
// 创建工作表
HSSFSheet sheet = workBook.getSheetAt(i);
int rows = sheet.getPhysicalNumberOfRows(); // 获得行数,不准确,中间有空行有错误
System.out.println("getPhysicalNumberOfRows总共读取到了几行:" + rows);
if (rows > 0) {
sheet.getMargin(HSSFSheet.TopMargin);
// 还是getLastRowNum()好!应该默认下标是0开始的,测试有7行数据读取到了6,所以<=
for (int j = 0; j <= sheet.getLastRowNum(); j++) { // 行循环
HSSFRow row = sheet.getRow(j);
String value = "";
if (row != null) {
int cells = row.getLastCellNum();// 获得列数
for (short k = 0; k < cells; k++) { // 列循环
HSSFCell cell = row.getCell(k);
if (cell != null) { switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil
.isCellDateFormatted(cell)) {
// 如果是date类型则 ,获取该cell的date值
value = HSSFDateUtil.getJavaDate(
cell.getNumericCellValue())
.toString();
System.out.println("第" + j + "行,第"
+ k + "列值:" + value
+ "<br>");
} else {// 纯数字
value = String.valueOf(cell
.getNumericCellValue());
System.out.println("第" + j + "行,第"
+ k + "列值:" + value
+ "<br>");
}
break;
// 此行表示单元格的内容为string类型
case HSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getRichStringCellValue()
.toString();
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
break;
case HSSFCell.CELL_TYPE_FORMULA:// 公式型
// 读公式计算值
value = String.valueOf(cell
.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
//
value = cell
.getRichStringCellValue()
.toString();
}
// cell.getCellFormula();读公式
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
break;
case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
value = " "
+ cell.getBooleanCellValue();
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
break;
// 此行表示该单元格值为空
case HSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
break;
default:
value = cell.getRichStringCellValue()
.toString();
System.out.println("第" + j + "行,第" + k
+ "列值:" + value + "<br>");
}
// 理论是从第二行开始找,这样又少判断一行,减少压力,找类似*****.的字符串就转换为日期格式
if (j >= 1 && value.indexOf(".") >= 4) {
value = doubledate2str(value);
}
str = str + "<td><font size=-1>" + value
+ "</font></td>"; }
} } list.add(str);
str = "";
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.print("<script>alert('解析完毕');</script>");
System.out.flush();
System.out.close();
request.setAttribute("list", list);
request.getRequestDispatcher("/index.jsp").forward(request, response);
} public void init() throws ServletException {
// Put your code here
}
}