优化Excel导出计算sheet数目的方式
1. 导出数据的总条数刚好等于sheet最大行数时,会多产生一个空白sheet 测试代码如下: public static void main(String[] args) { System.out.println("无数据时,1页:" + getTotalPage(sheetSize * 0)); System.out.println("刚好1页:" + getTotalPage(sheetSize * 1)); System.out.println("刚好7页:" + getTotalPage(sheetSize * 7)); System.out.println("1页:" + getTotalPage(200)); System.out.println("2页:" + getTotalPage(sheetSize * 1 + 200)); System.out.println("8页:" + getTotalPage(sheetSize * 7 + 200)); System.out.println("========="); System.out.println("无数据时,1页:" + getTotalPage2(sheetSize * 0)); System.out.println("刚好1页:" + getTotalPage2(sheetSize * 1)); System.out.println("刚好7页:" + getTotalPage2(sheetSize * 7)); System.out.println("1页:" + getTotalPage2(200)); System.out.println("2页:" + getTotalPage2(sheetSize * 1 + 200)); System.out.println("8页:" + getTotalPage2(sheetSize * 7 + 200)); } private static double getTotalPage(int size) { //原方法。 //ceil方法中是两个int做除法,结果还是int。ceil实际上没有起到作用。 return Math.ceil(size / sheetSize); } private static int getTotalPage2(int size) { //修改后的方法。 //size * 1.0 使int转为double,做除法后还是double。max(1, ...)是为了在size为0时,始终能生成一个sheet。 //需要修改for循环的判断条件 return Math.max(1, (int)Math.ceil(size * 1.0 / sheetSize)); } 测试结果: //预期结果:0,0,6,0,1,7 无数据时,1页:0.0 刚好1页:1.0 刚好7页:7.0 1页:0.0 2页:1.0 8页:7.0 ========= //预期结果:1,1,7,1,2,8 无数据时,1页:1 刚好1页:1 刚好7页:7 1页:1 2页:2 8页:8 2. 有疑问的地方(本次提交没有做修改): 1105行 index是从0开始的,即sheet的后缀名也是从0开始的。如果要使后缀名从1开始,可以考虑 (index + 1)
This commit is contained in:
@ -465,8 +465,8 @@ public class ExcelUtil<T>
|
||||
public void writeSheet()
|
||||
{
|
||||
// 取出一共有多少个sheet.
|
||||
double sheetNo = Math.ceil(list.size() / sheetSize);
|
||||
for (int index = 0; index <= sheetNo; index++)
|
||||
int sheetNo = Math.max(1, (int)Math.ceil(list.size() * 1.0 / sheetSize));
|
||||
for (int index = 0; index < sheetNo; index++)
|
||||
{
|
||||
createSheet(sheetNo, index);
|
||||
|
||||
@ -1091,12 +1091,12 @@ public class ExcelUtil<T>
|
||||
* @param sheetNo sheet数量
|
||||
* @param index 序号
|
||||
*/
|
||||
public void createSheet(double sheetNo, int index)
|
||||
public void createSheet(int sheetNo, int index)
|
||||
{
|
||||
this.sheet = wb.createSheet();
|
||||
this.styles = createStyles(wb);
|
||||
// 设置工作表的名称.
|
||||
if (sheetNo == 0)
|
||||
if (sheetNo == 1)
|
||||
{
|
||||
wb.setSheetName(index, sheetName);
|
||||
}
|
||||
|
Reference in New Issue
Block a user