关于用java导出excel表格是所有数据在一个单元格内

问题遇到的现象和发生背景
response.reset();
response.addHeader("Content-Type", "text/csv; charset=utf-8");
response.addHeader("Content-Disposition", "attachment; filename=test.csv");
//输出表头
out.println("已认证未绑定微信数");
out.println("会员ID,姓名,手机号,邮箱,企业ID,企业名称");

img


之前是按照csv输出的,加上逗号的话,它就是逗号分隔值,能把逗号直接的数据放到单独的单元格内,但是我改成application/vnd.ms-excel就不行了

response.reset();
response.addHeader("Content-Type", "application/vnd.ms-excel; charset=utf-8");
response.addHeader("Content-Disposition", "attachment; filename=test.xls");
//输出表头
out.println("已认证未绑定微信数");
out.println("会员ID,姓名,手机号,邮箱,企业ID,企业名称");

img

我想要的效果是

img

求怎么实现呀

可在java中导入free spire.xls for java的包,然后写入数组数据,导出成Excel文件,如下方法:

import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;

public class InsertArray {

    public static void main(String[] args) {

        //创建Workbook对象
        Workbook wb = new Workbook();

        //获取第一张工作表
        Worksheet sheet = wb.getWorksheets().get(0);

        //定义一维数据
        String[] oneDimensionalArray = new String[]{"苹果", "梨子", "葡萄", "香蕉"};

        //将数组从指定单个格开始写入工作表,true表示纵向写入,设置为false为横向写入
        sheet.insertArray(oneDimensionalArray, 1, 1, true);

        //定义二维数组
        String[][] twoDimensionalArray = new String[][]{
                {"姓名", "年龄", "性别", "学历"},
                {"小张", "25", "男", "本科"},
                {"小王", "24", "男", "本科"},
                {"小李", "26", "女", "本科"}
        };

        //从指定单元格开始写入二维数组到工作表
        sheet.insertArray(twoDimensionalArray, 1, 3);

        //保存文档
        wb.saveToFile("InsertArrays.xlsx", ExcelVersion.Version2016);
    }
}

效果图:

img

参考这个https://poi.apache.org/components/spreadsheet/quick-guide.html POI相关库

我用的easypoi

这个是测试demo 导出csv

 <dependency>
            <groupId>net.sourceforge.javacsv</groupId>
            <artifactId>javacsv</artifactId>
            <version>2.0</version>
        </dependency>

   ServletOutputStream out = response.getOutputStream();
        response.setCharacterEncoding(request.getCharacterEncoding());
        response.setContentType("application/octet-stream");
        String fileName = new String("测试.csv".getBytes("UTF-8"), "ISO-8859-1");
        response.setHeader("Content-Disposition", "attachment; filename="+fileName);
        CsvWriter write = new CsvWriter(out, ',', Charset.forName("utf-8"));
        write.setForceQualifier(true);
        write.writeRecord(new String[] {"key","value" });
        write.writeRecord(
                new String[] {"a1", "b1"}

        );
        write.writeRecord(
                new String[] {"a2", "b2"}
        );
        write.writeRecord(
                new String[] {"a3", "b3"}
        );
        write.flush();
        write.close();
        response.flushBuffer();