java 通过Apache poi导出excel代码demo实例

poi实现对树形结构数据导出excel并合并表格 poi实现对树形结构数据导出excel并合并表格 最近好像得罪了poi,遇到的都是导出word、Excel、pdf的问题。下面我记录一下poi对树形结构的处理,前面先梳理整体思路,文章末尾会贴上完整代码。 首先我们看一下模板和效果图吧: 怎么样,效果还行吧,有没有达到你心目中的标准?如果你也遇到了这样的问题,那么请静下心来花费几分钟时间,我会详细的梳理出自己的思路,希望能够帮助到你。 现在开始... 阅读详情

原文:java 通过Apache poi导出excel代码demo实例

源代码下载地址:http://www.zuidaima.com/share/1550463470062592.htm

详情看下载,所需jar、demo测试例子、完整注释。

java 通过Apache poi导出excel代码demo实例

 

package com.zuidaima.excel.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

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;

/**
 * @描述 负责将数据集(表单数据)导出Excel文件
 * @author www.zuidaima.com

 */
public class ExcelUtil {

    /**
     * 类实例
     */
    private static ExcelUtil export;

    /**
     * excel文档
     */
    private HSSFWorkbook workbook;

    /**
     * excel sheet
     */
    private HSSFSheet sheet;

    /**
     * 字节流
     */
    private OutputStream fileOutput;

    /**
     * 声明私有构造方法
     */
    private ExcelUtil() {

    }

    /**
     * 产生一个excel导出工具类实例(单例模式)
     * 
     * @return excel导出工具类对象
     */
    public static ExcelUtil newInstance() {
        if (export == null)
            export = new ExcelUtil();
        return export;
    }

    /**
     * @功能描述 设置excel文档(单表单)
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:25:58
     * @param tName
     *            excel表名集
     * @param tHeader
     *            excel表头数据集
     * @param tValue
     *            excel表单数据集(除表头)
     * @param tHeaderStyle
     *            excel表头单元格样式
     * @param tValueStyle
     *            excel表单数据单元格样式(除表头)
     * @param filePath
     *            excel文件地址
     * @throws Exception
     *             异常往上抛出
     */
    public void exportExcel(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
            Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle, String filePath) throws Exception {

        try {
            // 当excel文档不存在时创建
            workbook = new HSSFWorkbook();

            // 单个表单赋值和样式
            this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle);
            // 导出excel文件
            this.export(workbook, filePath);

        } catch (Exception e) {
            e.printStackTrace();

        }
    }

    /**
     * @功能描述 设置excel文档(单表单)
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:25:58
     * @param tName
     *            excel表名集
     * @param tHeader
     *            excel表头数据集
     * @param tValue
     *            excel表单数据集(除表头)
     * @param tHeaderStyle
     *            excel表头单元格样式
     * @param tValueStyle
     *            excel表单数据单元格样式(除表头)
     * @throws Exception
     *             异常往上抛出
     */
    public InputStream exportExcelToStream(String tName, ArrayList<String> tHeader,
            ArrayList<ArrayList<Object>> tValue, Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle)
            throws Exception {

        // 当excel文档不存在时创建
        workbook = new HSSFWorkbook();

        // 单个表单赋值和样式
        this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle);

        // 导出excel文件
        return export(workbook);

    }

    /**
     * @功能描述 设置excel文档(多表单)
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:25:58
     * @param tName
     *            excel表名集
     * @param tHeader
     *            excel表头数据集
     * @param tValue
     *            excel表单数据集(除表头)
     * @param tHeaderStyle
     *            excel表头单元格样式
     * @param tValueStyle
     *            excel表单数据单元格样式(除表头)
     * @param filePath
     *            excel文件地址
     * @throws Exception
     *             异常往上抛出
     */
    public void exportExcel(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
            ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
            ArrayList<Map<String, Short>> tValueStyle, String filePath) throws Exception {

        try {
            // 当excel文档不存在时创建
            workbook = new HSSFWorkbook();

            // for循环完成文档各个表单的赋值和样式
            for (int i = 0; i < tName.size(); i++) {
                this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
            }

            // 导出excel文件
            this.export(workbook, filePath);

        } catch (Exception e) {
        }
    }

    /**
     * @功能描述 设置excel文档(多表单)
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:25:58
     * @param tName
     *            excel表名集
     * @param tHeader
     *            excel表头数据集
     * @param tValue
     *            excel表单数据集(除表头)
     * @param tHeaderStyle
     *            excel表头单元格样式
     * @param tValueStyle
     *            excel表单数据单元格样式(除表头)
     * @throws Exception
     *             异常往上抛出
     */
    public InputStream exportExcelToStream(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
            ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
            ArrayList<Map<String, Short>> tValueStyle) throws Exception {

        // 当excel文档不存在时创建
        workbook = new HSSFWorkbook();

        // for循环完成文档各个表单的赋值和样式
        for (int i = 0; i < tName.size(); i++) {
            this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
        }
        return export(workbook);
    }

    /**
     * @功能描述 设置excel表单
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:23:02
     * @param tName
     *            excel表名
     * @param tHeader
     *            excel表头数据集
     * @param tValue
     *            excel表单数据集(除表头)
     * @param tHeaderStyle
     *            excel表头单元格样式
     * @param tValueStyle
     *            excel表单数据单元格样式(除表头)
     * @throws Exception
     *             异常往上抛出
     */
    private void setSheet(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
            Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle) throws Exception {

        try {
            // 创建表单并设置其表名
            sheet = workbook.createSheet(tName);

            // 创建表单行
            HSSFRow tRow = sheet.createRow(0);

            // 赋值和样式(此时,为表头行)
            tRow = this.setTRow(tRow, tHeader, tHeaderStyle);

            // for循环完成表单数据的赋值和样式(除表头)
            for (int i = 0; i < tValue.size(); i++) {
                tRow = sheet.createRow(i + 1); // 获取表单行

                tRow = this.setTRow(tRow, tValue.get(i), tValueStyle); // 设置当前行的数据和样式
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @功能描述 设置excel表单行数据
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:22:30
     * @param row
     *            excel表单行
     * @param tRow
     *            excel表单行数据
     * @param tHeaderStyle
     *            excel表头样式
     * @return 设置后的的表单行
     * @throws Exception
     *             异常往外抛出
     */
    @SuppressWarnings("unchecked")
    private HSSFRow setTRow(HSSFRow row, ArrayList tRow, Map<String, Short> tHeaderStyle) throws Exception {

        try {
            // 获取单元格样式
            HSSFCellStyle cellStyle = this.setCellStyle(tHeaderStyle);
            // 声明单元格
            HSSFCell cell = null;

            // for循环完成该表单某行各个列赋值和样式
            for (int i = 0; i < tRow.size(); i++) {
                cell = row.createCell(i); // 获取每列单元格
                cell.setCellStyle(cellStyle); // 设置样式

                sheet.autoSizeColumn((short) i); // 设置单元格自适应
                Object obj = tRow.get(i); // 获取当前列的值
                // 判断对象所属类型, 并强转
                if (obj instanceof Integer) // 当数字时
                    cell.setCellValue((Integer) obj);
                if (obj instanceof String) // 当为字符串时
                    cell.setCellValue((String) obj);
                if (obj instanceof Boolean) // 当为布尔时
                    cell.setCellValue((Boolean) obj);
                if (obj instanceof Date) // 当为时间时
                    cell.setCellValue((Date) obj);
                if (obj instanceof Calendar) // 当为时间时
                    cell.setCellValue((Calendar) obj);
                if (obj instanceof Double) // 当为小数时
                    cell.setCellValue((Double) obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return row; // 返回
    }

    /**
     * @功能描述 设置单元格样式
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:21:40
     * @param fontStyle
     *            样式Map集合
     * @return 设置后单元格样式
     * @throws Exception
     *             异常往外抛出
     */
    private HSSFCellStyle setCellStyle(Map<String, Short> fontStyle) throws Exception {

        // 声明单元格样式
        HSSFCellStyle cellStyle = null;
        try {
            // 创建字体
            HSSFFont font = workbook.createFont();
            // 设置字体样式
            // 设置字体颜色(红色为:HSSFFont.COLOR_RED 这里表示short类型 10)
            font.setColor(fontStyle.get("color"));
            // 设置字体形体(宽体为:HSSFFont.BOLDWEIGHT_BOLD 700) -- 粗体
            font.setBoldweight(fontStyle.get("weight"));

            // 创建单元格样式
            cellStyle = workbook.createCellStyle();
            // 添加字体样式
            cellStyle.setFont(font);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return cellStyle; // 返回
    }

    /**
     * @功能描述 导出Excel
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:57:37
     * @param workbook
     *            excel文档
     * @param filePath
     *            xls文件地址
     * @throws Exception
     *             异常往外抛出
     */
    private void export(HSSFWorkbook workbook, String filePath) throws Exception {

        try {
            // 根据指定xls文件创建文件字符流
            fileOutput = new FileOutputStream(filePath);
            // 将文档写入指定文件
            workbook.write(fileOutput);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭流, 释放资源
                fileOutput.close();
            } catch (IOException e) {
                e.printStackTrace();
                ;
            }
        }
    }

    /**
     * @功能描述 获取流
     * @创建人 www.zuidaima.com
     * @创建时间 2011-5-27 下午02:57:37
     * @param workbook
     *            excel文档
     * @throws Exception
     *             异常往外抛出
     */
    private InputStream export(HSSFWorkbook workbook) throws IOException {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            try {
                workbook.write(baos);
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte[] ba = baos.toByteArray();
            ByteArrayInputStream bais = new ByteArrayInputStream(ba);
            return bais;
        } finally {
            // 关闭流, 释放资源
            baos.close();
        }
    }
}

	    			

 

 

利用POI将数据导出到EXCEL模板 在开发中导出导入数据,我们是经常用到的,近期,公司开发中需要将指定数据导入到用户给定的EXCEL模板中,并根据要求合并单元格,在这里,我写了个简单的demo,可以概括我所用到的知识点,以供有需要的朋友借鉴。         相关DEMO下载:PoiTest           public class Test { public static void main(String[] args) 阅读详情

相关推荐

SpringBoot整合POI实现Excel文件的导出与导入

Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格式文件(如 Excel、Word、PowerPoint、Visio 等)而设计,支持 Office 97-2016 版本的文件操作‌。其名称源于“Poor Obfuscation Implementation”(简洁版的模糊实现)的首字母缩写‌。Apache POI 功能全面,覆盖 Office 文件的全生命周期操作。‌社区活跃,文档丰富,适用于复杂场景(如:模板替换、动态生成报表)‌。

pan_junbiao的博客 1553

apache-poi导出数据到excel(SXSSF)

poi之SXSSF导出数据到excel

初心不改 3201

Java-Excel导入导出通用实现Demo(附源码Git地址)

说明:本工具适用大部分导入导出场景,花点时间搞懂怎么用了之后灰常方便,阅读本文前,建议下载源码后参考着阅读。源码地址:https://gitee.com/xwzhang1/excel-util.git 在使用过程中如果有不懂的地方,请随时在项目issue中提问,我会在最短的时间内答复。  如果有好的建议也十分希望不吝赐教。 目录 导语 第一步 创建项目 第二步 引入POI依赖 第三...

冰公主我女神 的博客 5133

Apache / poi 操作excel导入导出 【Springboot Web】

Excel文件版本:2003版本扩展名为.xls使用HSSFWorkbook类操作(只能65536行,超过报错)2007版本扩展名为.xlsx使用XSSFWorkbook类操作XSSFWorkbook 优化使用(缓存) 使用SXSSFWorkbook类操作。

m0_51315555的博客 3467

优化poi 导入导出excel,不造成电脑卡死问题

其实生活中不乏很多需要从数据库向excel导入数据的情况,但是如果数据库的东西很多且字段很长,会造成卡死机的状态。 那么如何解决这个一问题呢,其实网络上有一门技术叫做poi,官方介绍是: Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 其实可以把它理解为Java和Microsoft之间互相沟通的一...

无发可脱 4201

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

Apache POI 导出Excel报表

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。

sytdsqzr的博客 1949

长期换衣行人重识别(Long-Term Clothes-Changing Person Reid)数据集汇总

长期换衣行人重识别任务中目前常用的数据集总览目前换衣数据集的主要问题数据集换衣/总体情况集统计DeepChange(2021)LaST(2021)COCAS(2020)VC-Clothes(2020)LTCC(2020)PRCC(2019)Celebrities-reID(2019) 总览 在长期换衣行人重识别的任务当中,数据集的获取(尤其是对于学术环境下)是一个难点,主要的困难有以下几点: 采集大规模的数据集比较困难。 采集不同的衣服的数据集比较困难。 采集不同衣服不同角度的数据集比较困难。 目前也有

KingsMan666的博客 8384

Apache POI 以及 导出Excel表

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。

islunatic的博客 1594

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3014

极化码理论及算法研究4-巴氏参数、GA算法以及matlab仿真

目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 极化码编码 ...

1万+

使用Apache poi导出Excel总结

poi实操,拿来即用

albort_steven的博客 1421

光耦CTR参数实战:如何避免误触发与功耗陷阱(附计算公式)

本文深入解析光耦CTR参数在电路设计中的关键作用,探讨如何平衡误触发风险与功耗表现。通过TLP521、PC817等常见型号的实测数据对比,提供不同工作状态下的选型策略和计算公式,帮助工程师优化设计,提升系统稳定性和能效。

2a4s6d8f0g的博客 324

JavaPOI根据模板生成Excelxlsx文件:简化Excel文件生成的核心工具

JavaPOI根据模板生成Excelxlsx文件:简化Excel文件生成的核心工具 去发现同类优质开源项目:https://gitcode.com/ 在当今快节奏的工作环境中,自动化处理Excel文件的需求日益增长。Java POI根据模板生成Excel(xlsx)文件的项目,为开发者和企业提供了一种高效生成Excel文件的解决方案。以下是关于此项目的详细介绍,助您快速掌握其核心功能和应用场景。 ...

gitblog_06793的博客 288

YOLO车辆测距、车辆识别与单目测距

YOLO(You Only Look Once)是一种实时物体检测系统,能够识别视频或图像中的多个对象,并确定其位置。结合车辆识别与单目测距技术,YOLO可以用于交通监控、自动驾驶等应用场景,通过单个摄像头实现车辆的识别与距离测量。YOLO结合单目测距技术,在多个应用领域展现出巨大的潜力与灵活性。其实时性和准确性为智能交通、自动驾驶等领域提供了强有力的技术支持。

走向CTO的路上... 1777

JavaSwing_4.2: JDialog、JOptionPane(对话框)

JDialog,对话框。使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。

谢TS的博客 7万+

Java导出Excel(Poi详解)

福利: 直接可用的导出,自己根据下边的讲解自行修改,不修改直接用也可以! https://blog.youkuaiyun.com/w893932747/article/details/89370894 一、POI简介: Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 HSSF 是Horrible S...

养只狗名叫猫 16万+

YOLOv11改进-卷积-引入小波卷积WTConv 解决多尺度小目标问题

1.首先,WTConv利用二维Haar小波变换对输入图像进行多级分解。低频分量 (LL):捕捉图像的低频信息,如整体形状或轮廓。水平高频分量 (LH):捕捉图像中的水平边缘信息。垂直高频分量 (HL):捕捉图像中的垂直边缘信息。对角线高频分量 (HH):捕捉图像的对角线细节。在每一级的小波变换中,图像被下采样(空间分辨率减半),但频率信息得到了更细的分解。递归地执行小波变换(称为多级分解)可以得到不同尺度下的频率分量。

qq_64693987的博客 1万+

POI导出Excel工具类(简单看完就会)

(一)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。 本文介绍的是用POI做一个导出excel报表的工具类,相当实用也相当简单。 (二)POI导出报表要用到的包 1...

zeng_ll的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

POI导入导出Excel数据(IDEA版)简单运用

一、POI Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能,简单来说就是能在Java程序中导入导出Word,Excel,PPT,Visio等文件内容。 二、使用POI 运行环境: IDEA 2019.3.3 x64 JDK 1.8.0_241 Maven 3.6.3 我将以Excel表格的导入导出为例,演示如何使用POI。 1.创建Maven项目 新建Maven项目,通过模板创建可以更快捷。 配置电脑中

The_3的博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Java】POI实现Excel导入和导出(源码测试)

POI实现Excel导入和导出(源码测试)

m0_64210833的博客 7305

java poi 导出excel经典demo

package org.leno.export.util;import java.io.*; import java.lang.reflect.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.text.SimpleDateFormat;

晴天的专栏 2211

POI导出图片到excel中

使用POI向Excel中导入图片。在java的开发过程中经常会需要把图片导出到excel中,找了一个不错的方法,我自己整理了一下,希望对大家有用。 废话不多说,直接上代码。 首项需要的jar包有:1.poi-3.8-20120326.jar                                     2.commons-codec-1.10.jar Java 测试代码: pa

u010571844的专栏 8962

Springboot+Poi实现Excel的导入导出

目录 POI操作Excel EasyPOI操作Excel 解决不同浏览器导出excel中文名称乱码问题 使用POI将HTML Table导出Excel POI操作Excel 一、poi简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 1、HSSF:HSSF ...

默存 6万+
上一篇: jquery插件jqzoom放大镜插件特效代码分享
下一篇: java JFreechart开发报表的实例demo下载
springmvc_springdata
博客等级 码龄12年 197粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值