我的表格有2000万左右的数据,用navicat经过筛选得到约12万的数据,我需要把这个数据保存下来成为一个表格,我没找到方法直接保存,只好先导出这个结果,但是在导出之后的表格里面我看到只有5万多条数据了,导出过程并没有保错,怎么回事呢?我的想法是把这个结果做成一张表,再和其他表进行联合查询。
2条回答 默认 最新
关注当导出数据量较大的情况下,excel支持最多65535行数据左右。
参考:
/** * @version 1.0.0 * @className: BigExcelFileInit * @description: excel大数据量导出工具类 * @author: LiJunYi * @create: 2022/7/6 8:45 */ public class BigExcelFileInit { /** * xlsx excel 每个 sheet 写入的数据 */ private static final int NUM_PER_SHEET = 300000; /** * xlsx excel 每次向 sheet 中写入的数据(分页写入) */ private static final int NUM_BY_TIMES = 50000; /** * excel通用大数据量分sheet分次写入 * * @param passWord 密码 * @param fileName 文件名字 * @param data 数据 * @param filePath 文件路径 * @param elementType 元素类型 * @throws Exception 异常 */ public static void bigExcelFileInit(List<?> data, String passWord, String fileName, String filePath, Class<?> elementType) throws Exception { // 获取 sheet 的个数 int sheetNum = data.size() % NUM_PER_SHEET == 0 ? data.size() / NUM_PER_SHEET : data.size() / NUM_PER_SHEET + 1; // 获取每个sheet 写入的次数 int writeNumPerSheet = NUM_PER_SHEET / NUM_BY_TIMES; // 最后一个 sheet 写入的数量 int writeNumLastSheet = data.size() - (sheetNum - 1) * NUM_PER_SHEET; // 最后一个 sheet 写入的次数 int writeNumPerLastSheet = writeNumLastSheet % NUM_BY_TIMES == 0 ? writeNumLastSheet / NUM_BY_TIMES : writeNumLastSheet / NUM_BY_TIMES + 1; // 指定写入的文件 try(ExcelWriter excelWriter = EasyExcel.write(filePath, elementType).build()) { for (int i = 0; i < sheetNum; i++) { String sheetName = "sheet" + i; WriteSheet writeSheet = EasyExcel.writerSheet(i, sheetName).build(); // 每个sheet 写入的次数 int writeNum = i == sheetNum - 1 ? writeNumPerLastSheet : writeNumPerSheet; // 每个sheet 最后一次写入的最后行数 int endEndNum = i == sheetNum - 1 ? data.size() : (i + 1) * NUM_PER_SHEET; for (int j = 0; j < writeNum; j++) { int startNum = i * NUM_PER_SHEET + j * NUM_BY_TIMES; int endNum = j == writeNum - 1 ? endEndNum : i * NUM_PER_SHEET + (j + 1) * NUM_BY_TIMES; excelWriter.write(data.subList(startNum, endNum), writeSheet); } } } if (StrUtil.isNotEmpty(passWord)) { // 设置excel打开密码 FileReadonlyProtectionUtil.enforceEncryptProtectionExcel(filePath, passWord); } } }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报