我的表格有2000万左右的数据,用navicat经过筛选得到约12万的数据,我需要把这个数据保存下来成为一个表格,我没找到方法直接保存,只好先导出这个结果,但是在导出之后的表格里面我看到只有5万多条数据了,导出过程并没有保错,怎么回事呢?我的想法是把这个结果做成一张表,再和其他表进行联合查询。
当导出数据量较大的情况下,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);
}
}
}
用这个导出Excel,Excel的上限是100万左右
也可用CSV,导出,这个导出比较快,但是需要调整