Java中,excel如何冻结多列用map,让一个键对应多列值,就是像Excel中,第一列值对应第二列,第三列,第四列这样的。

本帖子已过去太久远了,不再提供回复功能。22:35 提问
java怎么用map,list从excel中读取表数据
不会写,求高手代码实现!
可以的话,再加一个测试main方法
按赞数排序
import java.io.BufferedInputS
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.text.DecimalF
import java.text.SimpleDateF
import java.util.ArrayL
import java.util.A
import java.util.D
import java.util.L
import org.apache.poi.hssf.usermodel.HSSFC
import org.apache.poi.hssf.usermodel.HSSFDateU
import org.apache.poi.hssf.usermodel.HSSFR
import org.apache.poi.hssf.usermodel.HSSFS
import org.apache.poi.hssf.usermodel.HSSFW
import org.apache.poi.poifs.filesystem.POIFSFileS
public class ExcelOperate {
public static void main(String[] args) throws Exception {
File file = new File("ExcelDemo.xls");
String[][] result = getData(file, 1);
int rowLength = result.
for(int i=0;i&rowLi++) {
for(int j=0;j&result[i].j++) {
System.out.print(result[i][j]+"\t\t");
System.out.println();
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
* @param file 读取数据的源Excel
* @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List&String[]& result = new ArrayList&String[]&();
int rowSize = 0;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFCell cell =
for (int sheetIndex = 0; sheetIndex & wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
// 第一行为标题,不取
for (int rowIndex = ignoreR rowIndex &= st.getLastRowNum(); rowIndex++) {
HSSFRow row = st.getRow(rowIndex);
if (row == null) {
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize & rowSize) {
rowSize = tempRowS
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue =
for (short columnIndex = 0; columnIndex &= row.getLastCellNum(); columnIndex++) {
String value = "";
cell = row.getCell(columnIndex);
if (cell != null) {
// 注意:一定要设成这个,否则可能会出现乱码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date);
value = "";
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
value = cell.getNumericCellValue() + "";
case HSSFCell.CELL_TYPE_BLANK:
case HSSFCell.CELL_TYPE_ERROR:
value = "";
case HSSFCell.CELL_TYPE_BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y"
value = "";
if (columnIndex == 0 && value.trim().equals("")) {
values[columnIndex] = rightTrim(value);
hasValue =
if (hasValue) {
result.add(values);
in.close();
String[][] returnArray = new String[result.size()][rowSize];
for (int i = 0; i & returnArray. i++) {
returnArray[i] = (String[]) result.get(i);
return returnA
* 去掉字符串右边的空格
* @param str 要处理的字符串
* @return 处理后的字符串
public static String rightTrim(String str) {
if (str == null) {
return "";
int length = str.length();
for (int i = length - 1; i &= 0; i--) {
if (str.charAt(i) != 0x20) {
return str.substring(0, length);
File file = new File("c:\\a.xls");
InputStream in = new FileInputStream(file);
Workbook workbook = Workbook.getWorkbook(in);
//获取第一张Sheet表
Sheet sheet = workbook.getSheet(0);
//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
//获取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();
//获取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();
//我们可以通过指定行和列得到指定的单元格Cell对象
Cell cell = sheet.getCell(column, row);
//也可以得到某一行或者某一列的所有单元格Cell对象
Cell[] cells = sheet.getColumn(column);
Cell[] cells2 = sheet.getRow(row);
//然后再取每一个Cell中的值
String content = cell.getContents();
还可以用poi读取
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中。
你也可以在 : java的poi技术读取和导入Excel 了解到写入Excel的方法信息
使用JXL技术可以在 : java的jxl技术导入Excel
项目结构:
Excel中的测试数据:
数据库结构:
对应的SQL:
1 CREATE TABLE student_info (
id int(11) NOT NULL AUTO_INCREMENT,
no varchar(20) DEFAULT NULL,
name varchar(20) DEFAULT NULL,
age varchar(10) DEFAULT NULL,
score float DEFAULT '0',
PRIMARY KEY (id)
8 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入数据成功:
如果重复数据,则丢掉:
源码部分:
/ExcelTest/src/com/b510/client/Client.java
4 package com.b510.
6 import java.io.IOE
7 import java.sql.SQLE
9 import com.b510.excel.SaveData2DB;
* @author Hongten
* @created
15 public class Client {
public static void main(String[] args) throws IOException, SQLException {
SaveData2DB saveData2DB = new SaveData2DB();
saveData2DB.save();
System.out.println("end");
/ExcelTest/src/com/b510/common/Common.java
* @author Hongten
* @created
10 public class Common {
// connect the database
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String DB_NAME = "test";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
public static final String IP = "192.168.1.103";
public static final String PORT = "3306";
public static final String URL = "jdbc:mysql://" + IP + ":" + PORT + "/" + DB_NAME;
public static final String EXCEL_PATH = "lib/student_info.xls";
public static final String INSERT_STUDENT_SQL = "insert into student_info(no, name, age, score) values(?, ?, ?, ?)";
public static final String UPDATE_STUDENT_SQL = "update student_info set no = ?, name = ?, age= ?, score = ? where id = ? ";
public static final String SELECT_STUDENT_ALL_SQL = "select id,no,name,age,score from student_info";
public static final String SELECT_STUDENT_SQL = "select * from student_info where name like ";
/ExcelTest/src/com/b510/excel/ReadExcel.java
4 package com.b510.
6 import java.io.FileInputS
7 import java.io.IOE
8 import java.io.InputS
9 import java.util.ArrayL
10 import java.util.L
12 import org.apache.poi.hssf.usermodel.HSSFC
13 import org.apache.poi.hssf.usermodel.HSSFR
14 import org.apache.poi.hssf.usermodel.HSSFS
15 import org.apache.poi.hssf.usermodel.HSSFW
18 import com.b510.excel.vo.S
* @author Hongten
* @created
24 public class ReadExcel {
public List readXls() throws IOException {
InputStream is = new FileInputStream(Common.EXCEL_PATH);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
Student student =
List list = new ArrayList();
// 循环工作表Sheet
for (int numSheet = 0; numSheet & hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
// 循环行Row
for (int rowNum = 1; rowNum &= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow != null) {
student = new Student();
HSSFCell no = hssfRow.getCell(0);
HSSFCell name = hssfRow.getCell(1);
HSSFCell age = hssfRow.getCell(2);
HSSFCell score = hssfRow.getCell(3);
student.setNo(getValue(no));
student.setName(getValue(name));
student.setAge(getValue(age));
student.setScore(Float.valueOf(getValue(score)));
list.add(student);
@SuppressWarnings("static-access")
private 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());
// 返回字符串类型的值
return String.valueOf(hssfCell.getStringCellValue());
/ExcelTest/src/com/b510/excel/SaveData2DB.java
4 package com.b510.
6 import java.io.IOE
7 import java.sql.SQLE
8 import java.util.L
11 import com.b510.excel.util.DbU
12 import com.b510.excel.vo.S
* @author Hongten
* @created
18 public class SaveData2DB {
@SuppressWarnings({ "rawtypes" })
public void save() throws IOException, SQLException {
ReadExcel xlsMain = new ReadExcel();
Student student =
List list = xlsMain.readXls();
for (int i = 0; i & list.size(); i++) {
student = list.get(i);
List l = DbUtil.selectOne(Common.SELECT_STUDENT_SQL + "'%" + student.getName() + "%'", student);
if (!l.contains(1)) {
DbUtil.insert(Common.INSERT_STUDENT_SQL, student);
System.out.println("The Record was Exist : No. = " + student.getNo() + " , Name = " + student.getName() + ", Age = " + student.getAge() + ", and has been throw away!");
/ExcelTest/src/com/b510/excel/util/DbUtil.java
4 package com.b510.excel.
6 import java.sql.C
7 import java.sql.DriverM
8 import java.sql.PreparedS
9 import java.sql.ResultS
10 import java.sql.SQLE
11 import java.util.ArrayL
12 import java.util.L
15 import com.b510.excel.vo.S
* @author Hongten
* @created
21 public class DbUtil {
* @param sql
public static void insert(String sql, Student student) throws SQLException {
Connection conn =
PreparedStatement ps =
Class.forName(Common.DRIVER);
conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
ps = conn.prepareStatement(sql);
ps.setString(1, student.getNo());
ps.setString(2, student.getName());
ps.setString(3, student.getAge());
ps.setString(4, String.valueOf(student.getScore()));
boolean flag = ps.execute();
if(!flag){
System.out.println("Save data : No. = " + student.getNo() + " , Name = " + student.getName() + ", Age = " + student.getAge() + " succeed!");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ps != null) {
ps.close();
if (conn != null) {
conn.close();
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List selectOne(String sql, Student student) throws SQLException {
Connection conn =
PreparedStatement ps =
ResultSet rs =
List list = new ArrayList();
Class.forName(Common.DRIVER);
conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
if(rs.getString("no").equals(student.getNo()) || rs.getString("name").equals(student.getName())|| rs.getString("age").equals(student.getAge())){
list.add(1);
list.add(0);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
if (ps != null) {
ps.close();
if (conn != null) {
conn.close();
public static ResultSet selectAll(String sql) throws SQLException {
Connection conn =
PreparedStatement ps =
ResultSet rs =
Class.forName(Common.DRIVER);
conn = DriverManager.getConnection(Common.URL, Common.USERNAME, Common.PASSWORD);
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
if (ps != null) {
ps.close();
if (conn != null) {
conn.close();
/ExcelTest/src/com/b510/excel/vo/Student.java
4 package com.b510.excel.
* @author Hongten
* @created
12 public class Student {
public Integer getId() {
public void setId(Integer id) {
public String getNo() {
public void setNo(String no) {
public String getName() {
public void setName(String name) {
this.name =
public String getAge() {
public void setAge(String age) {
this.age =
public float getScore() {
public void setScore(float score) {
this.score =
源码下载:
用java读取excle文件用list,map接收,list实现了,map怎么也不行,急死了。
21:19 匿名 | 浏览 177 次
public static void main(String[] args) throws Exception {
Workbook workbook=
Sheet sheet=
List list =new ArrayList();
InputStream input=new FileInputStream("E://tt.xls");
workbook =Workbook.getWorkbook(input);
sheet=workbook.getSheet(0);
for (int i = 0; i &sheet.getRows(); i++) {
String []str=new String[sheet.getColumns()];
for (int j = 0; j &sheet.getColumns(); j++) {
Cell cell=sheet.getCell(j,i);
str[j]=cell.getContents();
list.add(str);
for (int i = 0; i & list.size(); i++) {
String[]str=(String[]) list.get(i);
for (int j = 0; j & str. j++) {
System.out.println(str[j]);
这是list的方法,求一个map的跟遍历输出谢谢。
首先感谢,劳驾你再帮帮忙,map中key的值是标题,比如标题是姓名,年龄,住址。数据是张三,12,海南。
22:00 提问者采纳
import java.io.FileInputS
import java.io.InputS
import java.util.*;
import jxl.*;
public class Test3{
public static void main(String[] args) throws Exception {
Workbook workbook=
Sheet sheet=
TreeMap&Integer,String[]&
map = new TreeMap&Integer,String[]&();
InputStream input=new FileInputStream("D://tt.xls");
workbook =Workbook.getWorkbook(input);
sheet=workbook.getSheet(0);
for (int i = 0; i &sheet.getRows(); i++) {
String []str=new String[sheet.getColumns()];
for (int j = 0; j &sheet.getColumns(); j++) {
Cell cell=sheet.getCell(j,i);
str[j]=cell.getContents();
map.put(i+1, str);
for (int i = 0; i & map.size(); i++) {
for (int j = 0; j & map.get(i+1). j++) {
System.out.print(map.get(i+1)[j]+"
System.out.println();
你是想要这种效果吗?
劳驾你再帮帮忙,map中key的值是标题,比如标题是姓名,年龄,住址。数据是张三,12,海南。
请问你的意思是 key里面存放列名
然后value里面存数据 然后 打印的时候 也要把 key值打出来吗?
public class Test3{
public static void main(String[] args) throws Exception {
Workbook workbook=
String columnName[] = {"姓名","年龄","住址"};
for(int i=0;i&columnName.i++){
System.err.print(columnName[i]+"\t");
System.out.println();
Sheet sheet=
TreeMap&String,String[]&
map = new TreeMap&String,String[]&();
InputStream input=new FileInputStream("D://tt.xls");
workbook =Workbook.getWorkbook(input);
sheet=workbook.getSheet(0);
for (int i = 0; i &sheet.getColumns(); i++) {
String []str=new String[sheet.getRows()];
for (int j = 0; j &sheet.getRows(); j++) {
Cell cell=sheet.getCell(i,j);
str[j]=cell.getContents();
map.put(columnName[i], str);
for (int i = 0, j=0; i&map.get(columnName[j]). i++) {
for ( j = 0; j & map.size(); j++) {
System.out.print(map.get(columnName[j])[i]+"\t");
System.out.println();
还加个main方法,怎么可以这么懒 。。。使用java poi
XSSFWorkbook类 。。。。
事实证明:楼上的是你亲妈 。。。
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
可参考如下:
public class Test3{
public static void main(String[] args) throws Exception {
Workbook workbook=
String columnName[] = {"姓名","年龄","住址"};
for(int i=0;i
System.err.print(columnName[i]+"\t");
System.out.println();
Sheet sheet=
map = new TreeMap();
InputStream input=new FileInputStream("D://tt.xls");
workbook =Workbook.getWorkbook(input);
sheet=workbook.getSheet(0);
for (int i = 0; i &sheet.getColumns(); i++) {
String []str=new String[sheet.getRows()];
for (int j = 0; j &sheet.getRows(); j++) {
Cell cell=sheet.getCell(i,j);
str[j]=cell.getContents();
map.put(columnName[i], str);
for (int i = 0, j=0; i&map.get(columnName[j]). i++) {
for ( j = 0; j & map.size(); j++) {
System.out.print(map.get(columnName[j])[i]+"\t");
System.out.println();俩个循环 获得俩值 怎么把俩个循环中的值放到 一个map
中一个做 key 一个做 value - Java相关当前位置:& &&&俩个循环 获得俩值 怎么把俩个循环中的值放到 一个m俩个循环 获得俩值 怎么把俩个循环中的值放到 一个map
中一个做 key 一个做 value&&网友分享于:&&浏览:80次俩个循环 获得俩值 如何把俩个循环中的值放到 一个map
中一个做 key 一个做 value俩个循环 获得俩值 如何把俩个循环中的值放到 一个map
中一个做 key 一个做 value &while(rs.next()) &
String mobilenum = rs.getString(&mobilenum&); &
} &while(rs.next()) &
String phone= rs.getString(&phone&); &
}这么查出来的 我想把它放到 map 中 一个座为key 一个最为 value& 就算你循环里面放值放到 map中 到时候不还得循环里面取值吗 问题 又来了请给点思路------解决方案--------------------
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 excel 多列筛选 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信