java导出excel,java导出excel数据量大 优化

发布时间:2023-01-07

本文目录一览:

  1. 如何用java将数据库中的表导出到excel
  2. java怎么导出excel表格
  3. 怎么用java实现导出excel
  4. java怎样输出excel文件

如何用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();
}

第二步:导出指定数据库的所有表

分析:

  1. 某个数据库有多少表,表名是什么?——DataBaseMetadate.getMetadate().getTables(null, null, null, new String[]{"TABLE"}) - excel的文件名称。
  2. 对每一个表进行select *操作。——每一个sheet的名称。
  3. 分析表结构,rs.getMetadate(); ResultSetMedated
  4. 多个列,列名是什么。——字段名就是sheet的第一行信息。
  5. 获取每一行的数据 —— 放到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();
    }
}