使用poi进行数据的导出Demo

这是本人在项目中遇到了一个导出数据时,如果该条数据中包含汉字,就会出现excel单元格的大小与期望的样式不一样,也是查找了半天,也没有发现哪里出的问题.

现将一个小Demo奉献在这里,可以在遇到使用poi导出数据时,可以用来进行参考.

使用的是Springboot+poi

引入的依赖就只有poi的依赖

    <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
        </dependency>

编写的测试类为:

package exercise.demo;

import org.apache.poi.hssf.usermodel.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.FileOutputStream;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {

    @Test
    public  void excelUtils() {
        /**
         * @see <a href="http://poi.apache.org/hssf/quick-guide.html#NewWorkbook">For more</a>
         */
        // 创建新的Excel 工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        // 在Excel工作簿中建一工作表,其名为缺省值, 也可以指定Sheet名称
        HSSFSheet sheet = workbook.createSheet();
        //HSSFSheet sheet = workbook.createSheet("SheetName");

        // 用于格式化单元格的数据
        HSSFDataFormat format = workbook.createDataFormat();

        // 创建新行(row),并将单元格(cell)放入其中. 行号从0开始计算.
        HSSFRow row = sheet.createRow((short) 1);

        // 设置字体
        HSSFFont font = workbook.createFont();
        font.setFontHeightInPoints((short) 20); //字体高度
        font.setColor(HSSFFont.COLOR_RED); //字体颜色
        font.setFontName("黑体"); //字体
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度
        font.setItalic(true); //是否使用斜体
//        font.setStrikeout(true); //是否使用划线

        // 设置单元格类型
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFont(font);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中
        cellStyle.setWrapText(true);

        // 添加单元格注释
        // 创建HSSFPatriarch对象,HSSFPatriarch是所有注释的容器.
        HSSFPatriarch patr = sheet.createDrawingPatriarch();
        // 定义注释的大小和位置,详见文档
        HSSFComment comment = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 6, 5));
        // 设置注释内容
        comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
        // 设置注释作者. 当鼠标移动到单元格上是可以在状态栏中看到该内容.
        comment.setAuthor("Xuys.");

//        // 创建单元格
        HSSFCell cell = row.createCell((short) 1);
//        HSSFRichTextString hssfString = new HSSFRichTextString("Hello World!");
//        cell.setCellValue(hssfString);//设置单元格内容
//        cell.setCellStyle(cellStyle);//设置单元格样式
//        cell.setCellType(HSSFCell.CELL_TYPE_STRING);//指定单元格格式:数值、公式或字符串
//        cell.setCellComment(comment);//添加注释
//
//        //格式化数据
//        row = sheet.createRow((short) 2);
//        cell = row.createCell((short) 2);
//        cell.setCellValue(11111.25);
//        cellStyle = workbook.createCellStyle();
//        cellStyle.setDataFormat(format.getFormat("0.0"));
//        cell.setCellStyle(cellStyle);
//
//        row = sheet.createRow((short) 3);
//        cell = row.createCell((short) 3);
//        cell.setCellValue(9736279.073);
//        cellStyle = workbook.createCellStyle();
//        cellStyle.setDataFormat(format.getFormat("#,##0.0000"));
//        cell.setCellStyle(cellStyle);//        sheet.autoSizeColumn((short)1); //调整第一列宽度
//        sheet.autoSizeColumn((short)1); //调整第二列宽度
//        sheet.autoSizeColumn((short)2); //调整第三列宽度
//        sheet.autoSizeColumn((short)3); //调整第四列宽度

        try {
            FileOutputStream fileOut = new FileOutputStream("G:/3.xls");
            workbook.write(fileOut);
            fileOut.close();
        } catch (Exception e) {
            System.out.println(e.toString());
        }
    }


}

直接放在测试类中运行这段代码就会在指定的文件中出现这个Excel文件.

猜你喜欢

转载自www.cnblogs.com/qingmuchuanqi48/p/11286062.html