一、描述
无论是jsp中还是swing中的上传文件组件都可能上传一个Excel文件并且按行读取文件的记录,读取记录后可以提供数据的显示功能,也可以构造sql语句进行数据库中数据的查询等。
例如我们上传一份用户名单,其中包括用户姓名,性别和身份证号,我们将用户真实姓名加上身份证后四位作为用户账号查询数据库中是否有该用户信息,上传的表格如下:
二、所需工具
java要调用Excel并且读取Excel文件中的数据,就必须使用jxl.jar札包,所以先获取该札包然后引入到java项目中。
该札包的免费下载地址:http://download.csdn.net/detail/tongyuehong/8321997
三、源代码
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import jxl.Sheet;
import jxl.Workbook;
/**
*
* @author Tong
*/
public class CountUserServer{
public static File chooseFile;
private static JFileChooser fileChooser;
public CountUserServer (){
fileChooser = new JFileChooser();
//过滤Excel文件,只寻找以xls结尾的Excel文件,如果想过滤word文档也可以写上doc
FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files", "xls");
fileChooser.setFileFilter(filter);
int returnValue = fileChooser.showOpenDialog(null);
//弹出一个文件选择提示框
if (returnValue == fileChooser.APPROVE_OPTION) {
//当用户选择文件后获取文件路径
chooseFile = fileChooser.getSelectedFile();
//根据文件路径初始化Excel工作簿
Workbook workBook=null;
try {
workBook = Workbook.getWorkbook(chooseFile);
} catch (Exception e) {
e.printStackTrace();
}
//获取该工作表中的第一个工作表
Sheet sheet=workBook.getSheet(0);
//获取该工作表的行数,以供下面循环使用
int rowSize=sheet.getRows();
System.out.println("行数:"+rowSize);
String account="";
for(int i=1;i<rowSize;i++)
{
//获取姓名字段数据,第A列第i行,注意Excel中的行和列都是从0开始获取的,A列为0列
String name=sheet.getCell(0,i).getContents();
//去掉该所有空格
name=name.replaceAll(" ", "");
//获取身份证号码字段数据,第C列第i行
String IdCard=sheet.getCell(2,i).getContents();
IdCard=IdCard.replaceAll(" ", "");
String last4Idcard="";
last4Idcard=IdCard.substring(14);
if(i==(rowSize-1)){
account +="'"+name+last4Idcard+"'"; //如果是最后一行就不要在末尾加上逗号
}else{
account +="'"+name+last4Idcard+"',";
}
}
//构造一个sql查询语句,查询该用户账号的信息
System.out.println("select * from user where account in ("+account+")");
}
}
public static void main(String[] args){
new CountUserServer();
}
}
运行结果输出:select * from user where account in ('张三7224','李四2814','王小五4173')
三、总结
1、java要调用Excel并且读取Excel文件中的数据,就必须使用jxl.jar札包,所以先获取该札包然后引入到java项目中;
2、Excel中的行和列都是从0开始获取的,A列即为0列