使用poi调整字体格式、添加单元格注释、自动调整列宽

本文介绍如何使用Java POI库创建包含格式化数据、注释和自动调整列宽的Excel文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 创建新的工作铺

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;

public class PoiCreateExcelTest {
    public static void main(String[] args) {
        /** 
         * @see <a href="http://poi.apache.org/hssf/quick-guide.html#NewWorkbook">For more</a>
         */        
        // 1 创建新的Excel 工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

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

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

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

        // 4 设置字体
        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); //是否使用划线

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

        // 6 添加单元格注释
        // 7 创建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)0); //调整第一列宽度
        sheet.autoSizeColumn((short)1); //调整第二列宽度
        sheet.autoSizeColumn((short)2); //调整第三列宽度
        sheet.autoSizeColumn((short)3); //调整第四列宽度

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

}
在网上找的一篇自动调整列宽的案子,下一篇有poi具体的中文api。对于使用poi导出excel大概够用了。
<think>好的,用户问的是如何使用POI库生成Excel文件。首先我得确认用户对POI的了解程度。可能他们已经有Java基础,但不太熟悉POI的具体用法。POI有不同的版本,比如HSSF处理.xls,XSSF处理.xlsx,所以需要先说明两者的区别,以及如何选择。 接下来,用户可能需要一个简单的示例来快速上手。我应该分步骤讲解,从添加依赖开始。如果是Maven项目,给出Maven依赖的代码块,这样用户可以直接复制。然后创建一个基本的Excel文件,包括创建工作簿、工作表、行和单元格,并设置单元格的值。 可能还需要提到不同的文件格式对应的类,比如HSSFWorkbook和XSSFWorkbook,以及如何根据需求选择。同时,注意处理异常和关闭资源,确保代码的健壮性,比如使用try-with-resources来自动关闭流。 用户可能还想知道如何设置单元格样式,比如字体、颜色、对齐方式等,这部分可以作为一个进阶步骤来介绍。此外,处理不同类型的数据,比如日期或数字,可能需要不同的单元格类型设置,这也是需要注意的地方。 还要考虑用户可能遇到的常见问题,比如文件格式不兼容导致的错误,或者依赖冲突。需要提醒他们检查POI版本,以及处理大型文件时的内存问题,比如使用SXSSFWorkbook来优化内存使用。 最后,提供一个完整的示例代码,让用户能够直接运行测试,并看到生成的Excel文件。确保代码中的注释清晰,解释每一步的作用,这样用户更容易理解。同时,总结关键点,帮助用户回顾主要内容,并给出进一步学习的建议,比如参考官方文档或其他资源。</think>使用Apache POI生成Excel文件可分为以下步骤(以XSSF处理.xlsx格式为例): 1️⃣ 添加Maven依赖 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> ``` 2️⃣ 基础创建示例 ```java import org.apache.poi.xssf.usermodel.*; public class ExcelGenerator { public static void main(String[] args) throws Exception { // 1. 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 2. 创建工作表 XSSFSheet sheet = workbook.createSheet("员工数据"); // 3. 创建首行(标题行) XSSFRow headerRow = sheet.createRow(0); String[] headers = {"ID", "姓名", "部门", "入职日期"}; // 设置标题单元格 for (int i = 0; i < headers.length; i++) { XSSFCell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); } // 4. 添加数据行 Object[][] data = { {1, "张三", "技术部", "2023-01-15"}, {2, "李四", "市场部", "2023-03-22"} }; for (int rowNum = 0; rowNum < data.length; rowNum++) { XSSFRow row = sheet.createRow(rowNum + 1); for (int colNum = 0; colNum < data[rowNum].length; colNum++) { row.createCell(colNum).setCellValue(data[rowNum][colNum].toString()); } } // 5. 自动调整 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } // 6. 写入文件(使用try-with-resources自动关闭流) try (FileOutputStream outputStream = new FileOutputStream("员工信息.xlsx")) { workbook.write(outputStream); } System.out.println("Excel文件生成成功!"); } } ``` 3️⃣ 核心对象说明: - `Workbook`:工作簿顶级对象 - `HSSFWorkbook`:处理.xls格式(Excel 97-2003) - `XSSFWorkbook`:处理.xlsx格式(Excel 2007+) - `Sheet`:工作表 - `Row`:行对象 - `Cell`:单元格对象 4️⃣ 进阶功能示例(添加样式): ```java // 创建单元格样式 XSSFCellStyle headerStyle = workbook.createCellStyle(); XSSFFont font = workbook.createFont(); font.setBold(true); font.setColor(IndexedColors.WHITE.getIndex()); headerStyle.setFont(font); headerStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 应用样式到标题行 for (Cell cell : headerRow) { cell.setCellStyle(headerStyle); } ``` 5️⃣ 注意事项: - 处理大文件时建议使用`SXSSFWorkbook`(基于磁盘的临时文件存储) - 日期格式需要特殊处理: ```java CellStyle dateStyle = workbook.createCellStyle(); dateStyle.setDataFormat(workbook.createDataFormat().getFormat("yyyy-mm-dd")); cell.setCellStyle(dateStyle); cell.setCellValue(new Date()); ``` - 关闭资源:确保最后调用`workbook.close()` - 性能优化:避免频繁创建样式对象 建议通过以下方式验证结果: 1. 运行代码生成Excel文件 2. 使用Excel软件打开检查格式和数据 3. 尝试用POI读取生成的文件验证数据一致性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值