java保存数据到excel

Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作,在这篇博客中将为大家介绍其中一种方法:jxl

因为在网上找过很多帖子都写得比较复杂,要不就过于简单,没有需要的功能,此处贴出两个小时整理出来的Java程序员所需的基本保存功能。(后续可能会更新读取的方法)

import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * 根据方法提示可直接保存数据到excel
 * @author Sam
 */
public class ExcelUtil {
    public static List<String> titles = new ArrayList<String>();

    /**
     * @param objects   数据集合的集合,按照内层横外层竖的规则传入
     * @param sheetName 工作簿的名字
     * @param path      文件路径,包含文件名
     */
    public static void exportExcel(List<List<Object>> objects, String sheetName, String path) {
        // 创建一个工作簿
        WritableWorkbook workbook = null;
        Long startTime = System.currentTimeMillis();
        System.out.println("开始保存文件" + path);
        try {
            File xlsFile = new File(path);
            workbook = Workbook.createWorkbook(xlsFile);

            // 创建一个工作表
            WritableSheet sheet = workbook.createSheet(sheetName, 0);
            int title = 0;
            if (titles.size() > 0) {
                title = 1;
                for (int i = 0; i < titles.size(); i++) {
                    String string = titles.get(i);
                    sheet.addCell(new Label(i, 0, string));
                }
            }
            for (int row = 0; row < objects.size(); row++) {
                List<Object> temp = objects.get(row);
                for (int col = 0; col < temp.size(); col++) {
                    // 向工作表中添加数据
                    sheet.addCell(new Label(col, row + title, temp.get(col).toString()));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.write();
                workbook.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("目录为" + path + "的文件已保存完毕");
            System.out.println("共计耗时:" + (System.currentTimeMillis() - startTime) / 1000.0 + "秒");
        }

    }

    /**
     * @see 工作簿名默认为sheet1
     * @param objects 数据集合的集合,按照内层横外层竖的规则传入
     * @param path    文件路径,包含文件名
     */
    public static void exportExcel(List<List<Object>> objects, String path) {
        exportExcel(objects, "sheet1", path);
    }

    /**
     * @param objects 直接传入对象集合
     * @param path    文件路径,包含文件名
     */
    public static void exportExcel(String path, List<?> objects) throws Exception {
        List<List<Object>> cells = new ArrayList<List<Object>>();
        for (int row = 0; row < objects.size(); row++) {
            Object temp = objects.get(row);
            Class<?> clazz = temp.getClass();
            Field[] declaredFields = clazz.getDeclaredFields();
            List<Object> tempList = new ArrayList<Object>();
            int titleLength = titles.size();
            for (int i = 0; i < declaredFields.length; i++) {
                Field field = declaredFields[i];
                field.setAccessible(true);
                if (Modifier.isStatic(field.getModifiers()) || Modifier.isFinal(field.getModifiers())) {// 跳过静态和final的属性
                    continue;
                }
                if (null == field.get(temp) || "".equals(field.get(temp)) || " ".equals(field.get(temp))) {
                    tempList.add("null");
                } else if (field.get(temp) instanceof Calendar) {
                    Calendar calendar = (Calendar) field.get(temp);
                    tempList.add((new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(calendar.getTime()));
                } else {
                    tempList.add(field.get(temp));
                }
                if (titleLength <= 0) {
                    titles.add(field.getName());
                }
            }
            cells.add(tempList);
        }
        exportExcel(cells, path);
    }
}

至此,基本方法完毕,有问题的朋友可以私信或者留言。 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值