在处理Excel中数据的时候,我们经常会手动的在Excel中写数据,修改数据,但是当数据量过多,所要进行的操作有规律,但是你还是不得不人工的一条条的修改纪录,这样导致花费很多时间和精力,而且准确率也不能得到保证。因此对于熟悉计算机语言的人来说,我们就可以用代码实现Excel的操作,然后将数据写入到本地Excel中,简单方便。下面我就将一个简单的例子贴出来,大家可以学习下,需要的时候按照自己的数据稍作修改就ok。
首先,将Excel中的数据写入到数据库中,我使用的是mysql数据库,用可视化工具navicat管理,导入Excel数据也方便,不会导入数据的可以百度查看教程。为了方便,我在数据库中创建了一个简单的单表,如下:
接下来,直接贴代码。
(1)Model类,用来对应数据库中表的结构
package mypackage;
public class Model
{
private String name;//数据库中数据对应的字段
private String pwd;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getPwd()
{
return pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
@Override
public String toString()
{
return "同学 [姓名:" + name + " 密码:" + pwd + "]";
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((pwd == null) ? 0 : pwd.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Model other = (Model) obj;
if (name == null)
{
if (other.name != null)
return false;
}
else if (!name.equals(other.name))
return false;
if (pwd == null)
{
if (other.pwd != null)
return false;
}
else if (!pwd.equals(other.pwd))
return false;
return true;
}
}
ps:里面的方法都是自动生成的,特别说明的是,最后的hashCode()和equals()方法的重写,对于这个我也不是很清楚,网上有相关的说明,我还没有弄懂,需要再接再厉。
(2)Database_Conn类,连接数据库的类,主要从表里面读数据,然后存到ArrayList中
package mypackage;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
/**
* 数据库连接类
* @author DELL
*
*/
public class Database_Conn
{
private Connection conn=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
public ArrayList<Model> open_db()
{
ArrayList<Model> stu=new ArrayList<Model>();
try
{
//连接数据库代码,先要加载mysql驱动
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","password");
String sql="select * from admin";
ps = conn.prepareStatement(sql);
//ps.setString(1,username);
//ps.setString(2,userpwd);
rs = ps.executeQuery();
System.out.println("-----------------------------------------------------");
while(rs.next())
{
Model mo=new Model();
mo.setName(rs.getString(2));
mo.setPwd(rs.getString(3));
stu.add(mo);
System.out.println(mo);
}
System.out.println("--------------------------------------------------------------");
rs.close();
ps.close();
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("连接失败");
}
return stu;
}
}
(3)Test类,测试,里面包含了main函数执行,主要写入到本地Excel的代码在其中。
package mypackage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
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 Test
{
/**测试写入ArrayList中的数据到本地Excel中
* @param args
*/
public static void main(String[] args)
{
ArrayList<Model> people=new Database_Conn().open_db();
//将ArrayList中的数据写入到本地excel中///
//第一步,创建一个workbook对应一个excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
//第二步,在workbook中创建一个sheet对应excel中的sheet
HSSFSheet sheet = workbook.createSheet("用户表一");
//第三步,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制
HSSFRow row = sheet.createRow(0);
//第四步,创建单元格,设置表头
HSSFCell cell = row.createCell(0);
cell.setCellValue("用户名");
cell = row.createCell(1);
cell.setCellValue("密码");
cell=row.createCell(2);
cell.setCellValue("备注");
//第五步,写入实体数据,实际应用中这些数据从数据库得到,对象封装数据,集合包对象。对象的属性值对应表的每行的值
for (int i = 0; i <people.size(); i++)
{
HSSFRow row1 = sheet.createRow(i+1);
Model mo=people.get(i);
//创建单元格设值
row1.createCell(0).setCellValue(mo.getName());
row1.createCell(1).setCellValue(mo.getPwd());
}
//将文件保存到指定的位置
try
{
FileOutputStream fos = new FileOutputStream("H:\\folders\\用户表.xls");
workbook.write(fos);
System.out.println("恭喜您!写入成功!!!!!!");
fos.close();
}
catch (IOException e)
{
System.out.println("写入文件出错啦!");
e.printStackTrace();
}
}
}
以上就是全部代码,执行Test类的main函数之后,在指定目录下就可以看到相应的Excel。
PS:以上只是一个简易的流程代码,在具体的情况下,还要对数据库中读取出来的数据作各种处理,然后写到本地Excel中,对于具体的处理每个人按照自己的实际需求进行对ArrayList数据处理即可。