本文目录一览:
如何用java将数据库中的表导出到excel
第一步:如何用POI操作Excel
@Test
public void createXls() throws Exception {
// 声明一个工作薄
HSSFWorkbook wb = new HSSFWorkbook();
// 声明表
HSSFSheet sheet = wb.createSheet("第一个表");
// 声明行
HSSFRow row = sheet.createRow(7);
// 声明列
HSSFCell cel = row.createCell(3);
// 写入数据
cel.setCellValue("你也好");
FileOutputStream fileOut = new FileOutputStream("d:/a/b.xls");
wb.write(fileOut);
fileOut.close();
}
第二步:导出指定数据库的所有表
分析:
- 某个数据库有多少表,表名是什么?——
DataBaseMetadate.getMetadate().getTables(null, null, null, new String[]{"TABLE"})
- excel的文件名称。 - 对每一个表进行
select *
操作。——每一个sheet的名称。 - 分析表结构,
rs.getMetadate(); ResultSetMedated
- 多个列,列名是什么。——字段名就是sheet的第一行信息。
- 获取每一行的数据 —— 放到sheet第一行以后。
@Test
public void export() throws Exception {
// 声明需要导出的数据库
String dbName = "focus";
// 声明book
HSSFWorkbook book = new HSSFWorkbook();
// 获取Connection,获取db的元数据
Connection con = DataSourceUtils.getConn();
// 声明statement
Statement st = con.createStatement();
// st.execute("use "+dbName);
DatabaseMetaData dmd = con.getMetaData();
// 获取数据库有多少表
ResultSet rs = dmd.getTables(dbName, dbName, null, new String[]{"TABLE"});
// 获取所有表名 —— 就是一个sheet
List<String> tables = new ArrayList<>();
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
tables.add(tableName);
}
for (String tableName : tables) {
HSSFSheet sheet = book.createSheet(tableName);
// 声明sql
String sql = "select * from " + dbName + "." + tableName;
// 查询数据
rs = st.executeQuery(sql);
// 根据查询的结果,分析结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData();
// 获取这个查询有多少列
int cols = rsmd.getColumnCount();
// 获取所有列名
// 创建第一行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < cols; i++) {
String colName = rsmd.getColumnName(i + 1);
// 创建一个新的列
HSSFCell cell = row.createCell(i);
// 写入列名
cell.setCellValue(colName);
}
// 遍历数据
int index = 1;
while (rs.next()) {
row = sheet.createRow(index++);
// 声明列
for (int i = 0; i < cols; i++) {
String val = rs.getString(i + 1);
// 声明列
HSSFCell cel = row.createCell(i);
// 放数据
cel.setCellValue(val);
}
}
}
con.close();
book.write(new FileOutputStream("d:/a/" + dbName + ".xls"));
}
java怎么导出excel表格
通过这个例子,演示如何用Java生成Excel文件:
import org.apache.poi.hssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class CreateCells {
public static void main(String[] args) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(); // 建立新HSSFWorkbook对象
HSSFSheet sheet = wb.createSheet("new sheet"); // 建立新的sheet对象
// 创建一个行并添加一些单元格。行是0开始的。
HSSFRow row = sheet.createRow((short) 0); // 建立新行
// 创建一个单元格并添加值
HSSFCell cell = row.createCell((short) 0); // 建立新cell
cell.setCellValue(1); // 设置cell的整数类型的值
// 或者一行完成
row.createCell((short) 1).setCellValue(1.2); // 设置cell浮点类型的值
row.createCell((short) 2).setCellValue("test"); // 设置cell字符类型的值
row.createCell((short) 3).setCellValue(true); // 设置cell布尔类型的值
HSSFCellStyle cellStyle = wb.createCellStyle(); // 建立新的cell样式
cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm")); // 设置cell样式为定制的日期格式
HSSFCell dCell = row.createCell((short) 4);
dCell.setCellValue(new Date()); // 设置cell为日期类型的值
dCell.setCellStyle(cellStyle); // 设置该cell日期的显示格式
HSSFCell csCell = row.createCell((short) 5);
csCell.setEncoding(HSSFCell.ENCODING_UTF_16); // 设置cell编码解决中文高位字节截断
csCell.setCellValue("中文测试_Chinese Words Test"); // 设置中西文结合字符串
row.createCell((short) 6).setCellType(HSSFCell.CELL_TYPE_ERROR); // 建立错误cell
// 写入输出到文件
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
}
}
怎么用java实现导出excel
/**
* @author liuwu
* Excel的导入与导出
*/
@SuppressWarnings({ "unchecked" })
public class ExcelOperate {
/**
* @author liuwu
* 这是一个通用的方法,利用了JAVA的反射机制,
* 可以将放置在JAVA集合中并且符合一定条件的数据以EXCEL的形式输出到指定IO设备上
* @param title 表格标题名
* @param headers 表格属性列名数组
* @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。
* 此方法支持的 javabean属性【数据类型有java基本数据类型及String,Date,byte[](图片转成字节码)】
* @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
* @param pattern 如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
* @throws IOException
*/
public static void exportExcel(String title, String[] headers, Collection<?> dataset, OutputStream out, String pattern) throws IOException {
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 20);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 生成一个字体
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.VIOLET.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
// 生成并设置另一个样式
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 生成另一个字体
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
// 把字体应用到当前的样式
style2.setFont(font2);
// 产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
// 遍历集合数据,产生数据行
Iterator<?> it = dataset.iterator();
int index = 0;
while (it.hasNext()) {
index++;
row = sheet.createRow(index);
Object t = it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i < fields.length; i++) {
HSSFCell cell = row.createCell(i);
cell.setCellStyle(style2);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1); // 注意 实体get Set不要自己改名字不然反射会有问题
try {
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
HSSFRichTextString richString = new HSSFRichTextString(value.toString());
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
} catch (SecurityException e) {
e.printStackTrace();
e = null;
} catch (NoSuchMethodException e) {
e.printStackTrace();
e = null;
} catch (IllegalArgumentException e) {
e.printStackTrace();
e = null;
} catch (IllegalAccessException e) {
e.printStackTrace();
e = null;
} catch (InvocationTargetException e) {
e.printStackTrace();
e = null;
} finally {
// 清理资源
}
}
}
try {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
e = null;
}
}
}
java怎样输出excel文件
// java生成简单的Excel文件
package beans.excel;
import java.io.IOException;
import java.io.OutputStream;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class SimpleExcelWrite {
public void createExcel(OutputStream os) throws WriteException, IOException {
// 创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
// 创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet", 0);
// 创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
Label xuexiao = new Label(0, 0, "学校");
sheet.addCell(xuexiao);
Label zhuanye = new Label(1, 0, "专业");
sheet.addCell(zhuanye);
Label jingzhengli = new Label(2, 0, "专业竞争力");
sheet.addCell(jingzhengli);
Label qinghua = new Label(0, 1, "清华大学");
sheet.addCell(qinghua);
Label jisuanji = new Label(1, 1, "计算机专业");
sheet.addCell(jisuanji);
Label gao = new Label(2, 1, "高");
sheet.addCell(gao);
Label beida = new Label(0, 2, "北京大学");
sheet.addCell(beida);
Label falv = new Label(1, 2, "法律专业");
sheet.addCell(falv);
Label zhong = new Label(2, 2, "中");
sheet.addCell(zhong);
Label ligong = new Label(0, 3, "北京理工大学");
sheet.addCell(ligong);
Label hangkong = new Label(1, 3, "航空专业");
sheet.addCell(hangkong);
Label di = new Label(2, 3, "低");
sheet.addCell(di);
// 把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close();
}
}