java 如何将sqlserver中的数据转到word 以表格形式 20
展开全部
首先需加载你的SQLCUTE是不能错(指明点就是数据库的连接)
创建的方法查询所有的数据:
public List<User> AllObject();
得到所有的数据,我们就可以开始了(最好是写在你的Service中)
创建表格输出的方法(我们的数据肯定是以流的形式写进写出的,表明点就是下载该文件\\恩文件上传下载应该会吧)
好话不多说,开始工程
在service中定义方法:
public InputStream getInputStream(){
//为了好看点我就采用和word同类的软件exel
//相当于我们创建的exel的窗体,可以查看exel的表格样式就是.xsl
HSSFWorkbook wb=new HSSFWorkbook();
//创建sheet1 一般我们的exel默认的有三个exel
HSSFSheet hs=wb.createSheet("sheet1");
//创建row行
HSSFRow hr=hs.createRow(0);
//创建单元格
HSSFCell hc=hr.createCell((short)0);
//设置单元格的编码
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置表头的value的值
hc.setCellValue("ID");
//还要创建多个表头的值
hc=hr.createCell((short)1);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("姓");
hc=hr.createCell((short)2);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("名");
hc=hr.createCell((short)3);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("年龄");
//从数据库中查出所有的用户
List<User> ls=iuserdao.AllListUser();
//便利所有的数据
for(int i=0;i<ls.size();i++){
//得到第i个数据
User us=ls.get(i);
//把数据放入表格中 i是从0开始读取 所以我们加一
hr=hs.createRow(i+1);
//设置编码
hc=hr.createCell((short)0);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置序号 也就是在ID下的值,同样的是从0开始
hc.setCellValue(i+1);
//我们已经从数据库中获得了数据,所以我们可以从user中取出
hc=hr.createCell((short)1);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getUname());
hc=hr.createCell((short)2);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getSuname());
hc=hr.createCell((short)3);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getAge());
}
//这里是在硬盘上创建一个临时文件用于用户下载,这是第一种方法
//放入文件 ,所以必须创建个文件
String fileName=com.test.util.CUtils.getRandomString(5);
//上面的文件名是用随机数写的,这样就会没相同的文件,便于输写
fileName=new StringBuffer().append(fileName).append(".xls").toString();
final File file=new File(fileName);
//将文件输出到我们的硬盘
try {
OutputStream os=new FileOutputStream(file);
//把我们的数据输出到我们的HSSFWookbook中 ,以写入文件中
wb.write(os);
os.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//构建个输入流
InputStream is=null;
try {
//输入文件
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return is; //返回该输入流,完成
}
写完之后,可在servlet中直接调用,service中的getInputStream方法
你可以写方法接收,也可以写流接收,因为过来的方法有返回值IS
public InputStream getDownloadFile(){
return iuserservice.getInputStream();
}
这里后面就是你自己的事勒,简单点就是重定向某个页面(查看成功啦)等等
这有个弊端就是在Disk(磁盘)创建了多个文件,也就是不用的时候就是垃圾数据。实在有点勉强的话,加我QQ:236133039帮你解答(实战操作)
创建的方法查询所有的数据:
public List<User> AllObject();
得到所有的数据,我们就可以开始了(最好是写在你的Service中)
创建表格输出的方法(我们的数据肯定是以流的形式写进写出的,表明点就是下载该文件\\恩文件上传下载应该会吧)
好话不多说,开始工程
在service中定义方法:
public InputStream getInputStream(){
//为了好看点我就采用和word同类的软件exel
//相当于我们创建的exel的窗体,可以查看exel的表格样式就是.xsl
HSSFWorkbook wb=new HSSFWorkbook();
//创建sheet1 一般我们的exel默认的有三个exel
HSSFSheet hs=wb.createSheet("sheet1");
//创建row行
HSSFRow hr=hs.createRow(0);
//创建单元格
HSSFCell hc=hr.createCell((short)0);
//设置单元格的编码
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置表头的value的值
hc.setCellValue("ID");
//还要创建多个表头的值
hc=hr.createCell((short)1);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("姓");
hc=hr.createCell((short)2);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("名");
hc=hr.createCell((short)3);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue("年龄");
//从数据库中查出所有的用户
List<User> ls=iuserdao.AllListUser();
//便利所有的数据
for(int i=0;i<ls.size();i++){
//得到第i个数据
User us=ls.get(i);
//把数据放入表格中 i是从0开始读取 所以我们加一
hr=hs.createRow(i+1);
//设置编码
hc=hr.createCell((short)0);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
//设置序号 也就是在ID下的值,同样的是从0开始
hc.setCellValue(i+1);
//我们已经从数据库中获得了数据,所以我们可以从user中取出
hc=hr.createCell((short)1);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getUname());
hc=hr.createCell((short)2);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getSuname());
hc=hr.createCell((short)3);
hc.setEncoding(HSSFCell.ENCODING_UTF_16);
hc.setCellValue(us.getAge());
}
//这里是在硬盘上创建一个临时文件用于用户下载,这是第一种方法
//放入文件 ,所以必须创建个文件
String fileName=com.test.util.CUtils.getRandomString(5);
//上面的文件名是用随机数写的,这样就会没相同的文件,便于输写
fileName=new StringBuffer().append(fileName).append(".xls").toString();
final File file=new File(fileName);
//将文件输出到我们的硬盘
try {
OutputStream os=new FileOutputStream(file);
//把我们的数据输出到我们的HSSFWookbook中 ,以写入文件中
wb.write(os);
os.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//构建个输入流
InputStream is=null;
try {
//输入文件
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return is; //返回该输入流,完成
}
写完之后,可在servlet中直接调用,service中的getInputStream方法
你可以写方法接收,也可以写流接收,因为过来的方法有返回值IS
public InputStream getDownloadFile(){
return iuserservice.getInputStream();
}
这里后面就是你自己的事勒,简单点就是重定向某个页面(查看成功啦)等等
这有个弊端就是在Disk(磁盘)创建了多个文件,也就是不用的时候就是垃圾数据。实在有点勉强的话,加我QQ:236133039帮你解答(实战操作)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询