poi导出数据分割成多个excel

时间:2021-10-24 09:38:03
获取数据list,然后按照list大小,分割成500条数据一个excel.生成多个excel.

23 个解决方案

#1


现在已经获取list数据,然后就算是不知道该怎么分割,生成多个excel.求解.

#2


循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

#3


引用 2 楼 u010533788 的回复:
循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

如何获取存储501或者1001这个值呢

#4


POI 不是有创建excel 的方法啊。直接调用。

#5


引用 4 楼 rui888 的回复:
POI 不是有创建excel 的方法啊。直接调用。

我知道啊,关键现在是我不知道该怎么分割,具体代码卡壳了.
例如我想把1-5000这个范围中的数据分割成每500条数据生成一个excel.

#6


#7


引用 5 楼 alphaes 的回复:
Quote: 引用 4 楼 rui888 的回复:

POI 不是有创建excel 的方法啊。直接调用。

我知道啊,关键现在是我不知道该怎么分割,具体代码卡壳了.
例如我想把1-5000这个范围中的数据分割成每500条数据生成一个excel.

需求是这样的,下载的excel最多能65536行,现在做个一个功能从编号A到编号B里面数据生成一个excel.
但是客户感觉这样数据量有点多,想把这一个范围里面的数据按照每500条,分割成一个excel

#8


 
            HSSFWorkbook workbook = new HSSFWorkbook();  
       
            HSSFSheet sheet = workbook.createSheet();  
通过总条数然后判断有几个sheet ,然后循环写到对应 的excel

#9


引用 8 楼 rui888 的回复:
 
            HSSFWorkbook workbook = new HSSFWorkbook();  
       
            HSSFSheet sheet = workbook.createSheet();  
通过总条数然后判断有几个sheet ,然后循环写到对应 的excel

不是要有多个sheet,而是每500条数据生成一个excel

#10


那就生成excel 的时候生成多个。

#11


引用 10 楼 rui888 的回复:
那就生成excel 的时候生成多个。

如何获取存储501或者1001这个值呢

#12


你那是不是循环item 从 501 开始 写到新的excel里面。

#13


引用 12 楼 rui888 的回复:
你那是不是循环item 从 501 开始 写到新的excel里面。

对的,list从501开始循环在写到另外一个excel里面

#14


都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

#15


引用 14 楼 bzssd 的回复:
都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

#16


引用 15 楼 alphaes 的回复:
Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决

#17


引用 16 楼 alphaes 的回复:
Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

#18


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.excel;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

/**
 *
 * @author lugl
 */
public class Test {

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        for (int i = 0; i < 30; i++) {
            strings.add("test" + i);
        }
        for (int i = 0; i < strings.size(); i++) {
            if (i % 3 == 0) {
                List<String> list = new ArrayList<>();
                int fromIndex = i / 3 * 3;
                int toIndex = (i / 3 + 1) * 3;
                if (toIndex > strings.size()) {
                    toIndex = strings.size();
                }
                list = strings.subList(fromIndex, toIndex);
                createEx(list, "sheet" + i);
            }
        }
    }

    public static void createEx(List<String> list, String sheetName) {
        FileOutputStream os = null;
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet(sheetName);
        for (int i = 0; i < list.size(); i++) {
            String string = list.get(i);
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue(string);
        }
        try {
            os = new FileOutputStream("D:\\" + sheetName + ".xls");
            wb.write(os);
            os.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

#19


随便写了一个,你导入poi的包之后就可以直接运行的,拿去参考一下吧

#20


引用 17 楼 bzssd 的回复:
Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

#21


引用 20 楼 alphaes 的回复:
Quote: 引用 17 楼 bzssd 的回复:

Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

我用了你写的那个代码,没有数据啊

#22


引用 21 楼 alphaes 的回复:
Quote: 引用 20 楼 alphaes 的回复:

Quote: 引用 17 楼 bzssd 的回复:

Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

我用了你写的那个代码,没有数据啊

帮我远程看一下吧,先谢啦

#23


引用 3 楼 alphaes 的回复:
Quote: 引用 2 楼 u010533788 的回复:

循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

如何获取存储501或者1001这个值呢


for(int i=0;i<list.size();i++){
  if(i>500){
    ...
}
}

#1


现在已经获取list数据,然后就算是不知道该怎么分割,生成多个excel.求解.

#2


循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

#3


引用 2 楼 u010533788 的回复:
循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

如何获取存储501或者1001这个值呢

#4


POI 不是有创建excel 的方法啊。直接调用。

#5


引用 4 楼 rui888 的回复:
POI 不是有创建excel 的方法啊。直接调用。

我知道啊,关键现在是我不知道该怎么分割,具体代码卡壳了.
例如我想把1-5000这个范围中的数据分割成每500条数据生成一个excel.

#6


#7


引用 5 楼 alphaes 的回复:
Quote: 引用 4 楼 rui888 的回复:

POI 不是有创建excel 的方法啊。直接调用。

我知道啊,关键现在是我不知道该怎么分割,具体代码卡壳了.
例如我想把1-5000这个范围中的数据分割成每500条数据生成一个excel.

需求是这样的,下载的excel最多能65536行,现在做个一个功能从编号A到编号B里面数据生成一个excel.
但是客户感觉这样数据量有点多,想把这一个范围里面的数据按照每500条,分割成一个excel

#8


 
            HSSFWorkbook workbook = new HSSFWorkbook();  
       
            HSSFSheet sheet = workbook.createSheet();  
通过总条数然后判断有几个sheet ,然后循环写到对应 的excel

#9


引用 8 楼 rui888 的回复:
 
            HSSFWorkbook workbook = new HSSFWorkbook();  
       
            HSSFSheet sheet = workbook.createSheet();  
通过总条数然后判断有几个sheet ,然后循环写到对应 的excel

不是要有多个sheet,而是每500条数据生成一个excel

#10


那就生成excel 的时候生成多个。

#11


引用 10 楼 rui888 的回复:
那就生成excel 的时候生成多个。

如何获取存储501或者1001这个值呢

#12


你那是不是循环item 从 501 开始 写到新的excel里面。

#13


引用 12 楼 rui888 的回复:
你那是不是循环item 从 501 开始 写到新的excel里面。

对的,list从501开始循环在写到另外一个excel里面

#14


都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

#15


引用 14 楼 bzssd 的回复:
都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

#16


引用 15 楼 alphaes 的回复:
Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决

#17


引用 16 楼 alphaes 的回复:
Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

#18


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.excel;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

/**
 *
 * @author lugl
 */
public class Test {

    public static void main(String[] args) {
        List<String> strings = new ArrayList<>();
        for (int i = 0; i < 30; i++) {
            strings.add("test" + i);
        }
        for (int i = 0; i < strings.size(); i++) {
            if (i % 3 == 0) {
                List<String> list = new ArrayList<>();
                int fromIndex = i / 3 * 3;
                int toIndex = (i / 3 + 1) * 3;
                if (toIndex > strings.size()) {
                    toIndex = strings.size();
                }
                list = strings.subList(fromIndex, toIndex);
                createEx(list, "sheet" + i);
            }
        }
    }

    public static void createEx(List<String> list, String sheetName) {
        FileOutputStream os = null;
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet(sheetName);
        for (int i = 0; i < list.size(); i++) {
            String string = list.get(i);
            Row row = sheet.createRow(i);
            Cell cell = row.createCell(0);
            cell.setCellValue(string);
        }
        try {
            os = new FileOutputStream("D:\\" + sheetName + ".xls");
            wb.write(os);
            os.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

#19


随便写了一个,你导入poi的包之后就可以直接运行的,拿去参考一下吧

#20


引用 17 楼 bzssd 的回复:
Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

#21


引用 20 楼 alphaes 的回复:
Quote: 引用 17 楼 bzssd 的回复:

Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

我用了你写的那个代码,没有数据啊

#22


引用 21 楼 alphaes 的回复:
Quote: 引用 20 楼 alphaes 的回复:

Quote: 引用 17 楼 bzssd 的回复:

Quote: 引用 16 楼 alphaes 的回复:

Quote: 引用 15 楼 alphaes 的回复:

Quote: 引用 14 楼 bzssd 的回复:

都拿到list了还不能根据条数创建表?
HSSFWorkbook workbook;
HSSFSheet sheet;
for(int i=0;i<list.size;i++){
    if(i%500==0){
         workbook = new HSSFWorkbook();  
         sheet = workbook.createSheet();  
    }
    //todo 向里面放list的数据
}

具体循环放怎么弄啊,老是一下把所有的数据都放在一个excel里面了

能否远程帮我一下啊,是在是没发解决


来加个Q

772316481
非常感谢啊

我用了你写的那个代码,没有数据啊

帮我远程看一下吧,先谢啦

#23


引用 3 楼 alphaes 的回复:
Quote: 引用 2 楼 u010533788 的回复:

循环,一条一条的写入, 当到第501条的时候新建excel 然后到1001的时候在新建。。。以此类推 。  理论上是可行的。

如何获取存储501或者1001这个值呢


for(int i=0;i<list.size();i++){
  if(i>500){
    ...
}
}