Java/Groovy 读写 Excel 表 - Apache POI

一、简介:

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

二、常用类(基本功能):

HSSF - 提供读写 Excel 格式文档的功能。

XSSF - 提供读写 Excel OOXML 格式文档的功能。

HWPF - 提供读写 Word 格式文档的功能。

HSLF - 提供读写 PowerPoint 格式档案的功能。

HDGF - 提供读写 Visio 格式档案的功能。

由于我们开发中经常用到的是对Excel的处理,因此以本篇文章只提供HSSF这个类的常用方法的说明和简单的代码示例。

三、HSSF 常用类和方法:

HSSFWorkbook :工作簿类,代表一个Excel文档

        HSSFWorkbook(); // 创建一个新的工作簿
                   HSSFWorkbook(InputStream inputStream); // 创建一个带有输入流的工作簿,可以将一个excel文件封装成工作簿
                   createSheet(String sheetname); // 创建一个新的Excel Sheet
                   getSheet(String sheetName); // 通过sheet名字来获取Sheet
                   getSheetAt(int index); // 通过索引获取Sheet
                   createCellStyle(); // 创建单元格样式
                   getNumberOfSheets(); //获取整个Excel表中sheet的个数
                   setActiveSheet(int index); //设置默认选中的sheet
                   write();
                   write(File newFile);
                   write(OutputStream stream);

HSSFSheet:工作表,代表Excel中的Shee

        createRow(int rownum); // 创建新行,需要指定行号,行号从0开始
                   getRow(int index); // 根据索引获取指定的行
                   addMergedRegion(CellRangeAddress region); // 合并单元格 
                   CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); // 单元格范围, 用于合并单元格
                   autoSizeColumn(int column); // 自动调整列的宽度来适应内容
                   getLastRowNum(); // 获取最后的行的索引,没有行或者只有一行的时候返回0
                   setColumnWidth(int columnIndex, int width); // 设置某一列的宽度,width=字符个数 * 256

HSSFRow :

                   createCell(int column);  // 创建新的单元格
                   setCell(shot index);
                   getCell(shot index);
                   setRowStyle(HSSFCellStyle style);  // 设置行样式
                   short getLastCellNum();  // 获取最后的单元格号
                   setHeightInPoints(float height);  // 设置行的高度

HSSFCell:单元格 

                   setCellValue(String value);  //设置单元格的值
                   setCellType();  //设置单元格类型,如 字符串、数字、布尔等
                   setCellStyle();  //设置单元格样式
                   getStringCellValue();  //获取单元格中的字符串值
                   setCellStyle(HSSFCellStyle style);  //设置单元格样式,例如字体、加粗、格式化
                   setCellFormula(String formula);  //设置计算公式,计算的结果作为单元格的值

HSSFCellStyle :单元格样式

                   setFont(Font font); //为单元格设置字体样式
                   setAlignment(HorizontalAlignment align); //设置水平对齐方式
                   setVerticalAlignment(VerticalAlignment align); //设置垂直对齐方式
                   setFillPattern(FillPatternType fp);
                   setFillForegroundColor(short bg); //设置前景色
                   setFillBackgroundColor(short bg); //设置背景颜色

HSSFFont:字体

                   setColor(short color); // 设置字体颜色
                   setBold(boolean bold); // 设置是否粗体
                   setItalic(boolean italic); // 设置倾斜
                   setUnderline(byte underline); // 设置下划线

HSSFName: //名称
           HSSFDataFormat : //日期格式化
           HSSFHeader : //Sheet的头部
           HSSFFooter : //Sheet的尾部
           HSSFDateUtil : //日期工具
           HSSFPrintSetup : //打印设置
           HSSFErrorConstants: //错误信息表

四、代码示例:

/**
 * 此代码为Groovy代码
 */
class PoiExcelTools {

    /** Config your folder path here*/
    public static final targetFolderPath = "D:\\POIDemo\\"

    public static void main(String[] args) {

        PoiExcelTools tools = new PoiExcelTools()
        //准备测试数据
        Map<String,String> excelContentMap = ["key1":"value1","key2":"value2"]

        //创建Excel表格
        tools.createExcel(excelContentMap)
    }
    /**
     * 创建Excel
     * @param excelContentMapList
     * @return
     */
    private void createExcel(Map excelContentMap){

        String excelFileName = targetFolderPath + "ExcelTest_" + new Date().getTime() +".xls"
        String sheetName = "ExcelContentSheet"

        //创建Excel工作簿
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook()
        HSSFSheet excelSheet = hssfWorkbook.createSheet(sheetName)
        //设置默认列宽
        excelSheet.setDefaultColumnWidth(50)
        //行
        HSSFRow hssfRow = null
        //列
        HSSFCell hssfCell = null

        //创建表头 , 此处以测试数据中的key作为表头
        if (excelContentMap?.size() > 0){

            def excelHeader = excelContentMap?.keySet()
            hssfRow = excelSheet?.createRow(0)
            excelHeader?.eachWithIndex {currentKey ,currentIndex->

                hssfCell = hssfRow?.createCell(currentIndex)
                hssfCell.setCellValue((String)currentKey)
                setHeaderCellStyle(hssfWorkbook,hssfCell)
            }
        }
        //创建表格内容,此处以测试数据的Value作为表格内容
        excelContentMap?.eachWithIndex{ currentCell, currentCellIndex ->

            hssfRow = excelSheet?.createRow(1)
            hssfCell = hssfRow.createCell(currentCellIndex)
            hssfCell.setCellValue((String)currentCell.value)

        }

        FileOutputStream fileOutputStream = new FileOutputStream(excelFileName)
        hssfWorkbook.write(fileOutputStream)
    }

    /**
     * 设置表头单元格样式
     * @param hssfWorkbook
     * @param hssfCell
     */
    private void setHeaderCellStyle(HSSFWorkbook hssfWorkbook,HSSFCell hssfCell) {
        HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle()

        hssfCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)
        hssfCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex())
        hssfCellStyle.setWrapText(true)

        HSSFFont hssfFont = hssfWorkbook.createFont()
        hssfFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD)

        hssfCellStyle.setFont(hssfFont)
        hssfCell.setCellStyle(hssfCellStyle)
    }
}

五、官方文档:

更多用法,可以参考官方文档:http://poi.apache.org/apidocs/index.html

Thank All !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个警告是由于在您的应用程序中使用了不受支持的反射操作所导致的。这可能是由于使用了旧版本的库或框架,或者由于代码中使用了不推荐的功能。 要解决这个警告,您可以尝试以下几种方法: 1. 更新您的应用程序中使用的库和框架,确保使用最新版本的软件包。 2. 检查您的代码,查找是否有使用反射操作的地方,并尝试使用更安全的替代方法。 3. 如果您使用的是Groovy语言,请确保您使用的是最新版本的Groovy,并检查是否有任何过时的功能或用法。 4. 如果您无法解决这个警告,您可以通过在启动应用程序时添加以下参数来禁用警告: - 在命令行中运行应用程序时,可以使用`--illegal-access=deny`参数。 - 如果是在Maven项目中,可以在`pom.xml`文件中的`<build>`部分添加以下配置: ```xml <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <compilerArgs> <arg>--illegal-access=deny</arg> </compilerArgs> </configuration> </plugin> </plugins> ``` - 如果是在Gradle项目中,可以在`build.gradle`文件中的`tasks.withType(JavaCompile)`部分添加以下配置: ```gradle tasks.withType(JavaCompile) { options.compilerArgs << "--illegal-access=deny" } ``` 请注意,禁用警告可能会导致某些功能无法正常工作,因此最好的解决方法是更新代码和依赖项以避免使用不受支持的反射操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值