一、前言
第一次开始记录自己学的东西,感觉不一样啊。本人Java新手,希望大佬们指正指正(?)
二、两种导出excel的方式
- 通过sql语句直接导出excel表,但是有一点缺点,就是excel没有列名,相当于只有数据库表的记录而已,没有属性名。并且excel表的每一格的样式不可以设置。(不推荐)
- java代码连接数据库导出excel表格,可以修改单元格样式,添加每一列的列名(推荐)
三、具体实现
sql语句如下:
use one;//使用哪一个数据库
select * from tb_driver order by id asc into outfile "G:/2.xls" character set gbk;
sql语句导出excel文件注意事项
- 对于我这里只可以导出xls文件,另外一种xlsx我电脑上打不开,之后遇到需要导出xlsx文件,我会补充在这?
- 在我这设置了导出文件的编码格式为gbk,不设置的话中文会显示乱码。这是excel表格打开文件的编码引起的(我认为,网上说excel打开文件默认gbk编码打开)
通过java实现导出待列名的excel表
Java代码如下
package function.java.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
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.ss.usermodel.HorizontalAlignment;
public class DataToExcel {
/**
* @Title: ToExcel
* @Description: TODO 导出excel表格
* @Param: @param rowDatas 每一条记录,就是总的记录, List<List<Object>> 第一个是列名,后面的才是记录,
* @Param: @param outputType 导出的种类 藕塘putType -1代表导出到本地,1代表网页上导出,下载
* @Param: @param path 导出的路径,如果是导出到本地
* @Param: @param fileName 导出的文件名
* @Param: @param response 用于下载
* @Param: @return true|false
* @Return: boolean
* @Throws
*/
public static boolean ToExcel(List<List<Object>>rowDatas, Integer outputType, String path, String fileName, final HttpServletResponse response) {
@SuppressWarnings("resource")
HSSFWorkbook wb = new HSSFWorkbook();//定义一个excel文件
HSSFSheet sheet = wb.createSheet();//创建第一页
HSSFCellStyle style = wb.createCellStyle();//创建样式风格
style.setAlignment(HorizontalAlignment.CENTER);//为样式设置值,这里是居中
HSSFRow row;
HSSFCell cell;
for(int i = 0; i < rowDatas.size(); i++) {
row = sheet.createRow(i);
for(int j = 0; j < rowDatas.get(i).size(); j++) {
cell = row.createCell(j);//创建单元格
cell.setCellStyle(style);//单元格应用样式
Object o = rowDatas.get(i).get(j);
//转换为文本格式,这样在导出文件中展示完全,可以自己尝试
if(o instanceof Integer || o instanceof Double || o instanceof Float)
cell.setCellValue(Double.parseDouble(""+o));//这里转换为文本格式
else {
cell.setCellValue(""+o);//这里转换为文本格式
}
}
}
if(outputType==-1) {
try {
FileOutputStream fout = new FileOutputStream(path+"//"+fileName);
wb.write(fout);
}catch(Exception e) {
e.printStackTrace();
}
}
else if(outputType == 1) {
OutputStream out = null;
try {
out = response.getOutputStream();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="
+ URLEncoder.encode(fileName, "UTF-8"));
wb.write(out);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
public static void main(String args[]) {
//实例
List<List<Object>>rowDatas = new ArrayList<List<Object>>();
List<Object>datas = null;
for(int j = 0; j < 5; j++) {
datas = new ArrayList<Object>();
for(int i = 0; i < 10;i++) {
datas.add(i+"");
}
rowDatas.add(datas);
}
DataToExcel.ToExcel(rowDatas, -1,"G:", "tb.driver.xls", null);
System.out.println("OKs");
}
}
代码说明
如果看不懂,那请注意看一下这个说明
上述代码是一个静态工具类。
方法ToExcel是实现一个List<List>rowDatas中的数据导出成excel表中的数据,get(0)是列名,后面的才是数据。
outputType代表输出种类,其实用户下面判断,-1代表导出到本地,1代表网页上用于下载的.
path代表导出路径,比如可以是“G:”,或者“F:”,或者"G:/1"(代表g盘的文件夹1下面)
fileName代表文件名称,比如“one.xls”, “two.xls”,
response如果是想导出excel,通过网页上点击导出然后下载的话,就需要传递response对象进来
Java导出excel注意事项
- List<List>rowDatas中第一个(就是get(0)这里代表列名)代表的列名,后面的代表的记录数据
- 设置的单元格样式可以更改
- 这里需要导入某一个jar包。这里给这个jar的下载地址http://central.maven.org/maven2/org/apache/poi/poi/4.1.0/poi-4.1.0.jar。这是直接到maven中下的
可以直接复制代码,在eclipse中运行,直接成功,然后自己分析
总结这是很久之前写的代码,突然想记录下来,以便下次参考,小白第一次写≧ ﹏ ≦,有点说不清楚,大家不要见怪"★,°:.☆( ̄▽ ̄)/$:.°★ 。"