Java POI技术

Apache.POI

官方地址:Apache POI - Component Overviewhttps://poi.apache.org/components/index.html

相关依赖


    org.apache.poi
    poi
    4.0.1



    org.apache.poi
    poi-ooxml
    4.0.1



    org.apache.poi
    poi-ooxml-schemas
    4.0.1

excel主要对象在不同版本中的对比:

对应excel名称 低版本中的类名 高版本中的类名
工作簿 HSSFWorkbook XSSFWorkbook
工作表 HSSFSheet XSSFSheet
HSSFRow XSSFRow
单元格 HSSFCell XSSFCell
单元格样式 HSSFCellStyle XSSFCellStyle

写入新文件

高级 API (包:org.apache.poi.ss.usermodel) 是大多数人应该使用的。用法非常简单。

工作簿是通过创建 的实例来创建的 org.apache.poi.ss.usermodel.Workbook. 要么创建 直接具体类 (org.apache.poi.hssf.usermodel.HSSFWorkbook or org.apache.poi.xssf.usermodel.XSSFWorkbook),或使用 方便的工厂类 org.apache.poi.ss.usermodel.WorkbookFactory.

工作表是通过从现有的调用 createSheet() 创建的 工作簿实例,创建的工作表会自动添加到 序列到工作簿。工作表本身没有工作表 名称(底部的选项卡);你设置 通过调用与工作表关联的名称 Workbook.setSheetName(sheetindex,“SheetName”,encoding). 对于 HSSF,名称可能为 8 位格式 (HSSFWorkbook.ENCODING_COMPRESSED_UNICODE) 或 Unicode (HSSFWorkbook.ENCODING_UTF_16)。违约 HSSF 的编码为每字符 8 位。对于 XSSF,名称 自动处理为 Unicode。

行是通过从现有的调用 createRow(rowNumber) 来创建的 工作表的实例。只有具有单元格值的行才应 添加到工作表中。要设置行的高度,您只需调用 setRowHeight(height) 在行对象上。高度必须以 缇,或 1/20 点。如果您愿意,还有一个 设置行高在点方法。

单元格是通过从 现有行。只有具有值的单元格才应添加到 排。单元格的单元格类型应设置为以下任一 Cell.CELL_TYPE_NUMERIC或Cell.CELL_TYPE_STRING取决于 它们是否包含数字或文本值。细胞还必须具有 值集。通过使用调用 setCellValue 来设置值 字符串或双精度作为参数。单个单元格没有 宽度;您必须调用 setColumnWidth(colindex, width) (使用单位 字符的 1/256th)在工作表对象上。(你不能这样做 GUI 中的个人基础)。

单元格使用单元格样式对象设置样式,而这些对象又包含 对字体对象的引用。这些是通过 通过调用 createCellStyle() 和 createFont() 的工作簿对象。 创建对象后,必须设置其参数(颜色, 边框等)。设置单元格样式调用的字体 setFont(fontobj).

生成工作簿后,您可以通过以下方式将其写出 从工作簿实例调用 write(输出流),传递 它是一个输出流(例如,文件输出流或 ServletOutputStream)。您必须自己关闭输出流。高山 不会为您关闭它。

下面是一些示例代码(摘自并改编自 org.apache.poi.hssf.dev.HSSF test class):

 xls 与xlsx 的使用示例

HSSF 和 XSSF 示例 (apache.org)https://poi.apache.org/components/spreadsheet/examples.html

HSSF用户模型类图

Java POI技术_第1张图片

Word示例

POI-XWPF示例(Word)https://svn.apache.org/repos/asf/poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/xwpf/usermodel/

EasyPOI

EasyPOIhttps://gitee.com/lemur/easypoi.git依赖


    cn.afterturn
    easypoi
    4.4.0

EasyPoi教程_V1.0http://easypoi.mydoc.io/#text_186905

FreeMarker

依赖


    org.freemarker
    freemarker
    2.3.32

介绍

FreeMarker 中文官方参考手册http://freemarker.foofun.cn/示例

入门http://freemarker.foofun.cn/pgui_quickstart.html动手配置

    @Bean("freemarkerConfig")
    public freemarker.template.Configuration getConfiguration() {
        // API 说明 https://freemarker.apache.org/docs/api/index.html
        freemarker.template.Configuration cfg = new freemarker.template.Configuration(freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        cfg.setClassForTemplateLoading(this.getClass(), FREEMARKER_TEMPLATE);
        cfg.setEncoding(Locale.CHINA, "UTF-8");
        cfg.setNumberFormat("0.##"); // 如果有,则保留两位小数
//        cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        return cfg;
    }

@Component
public class DocumentUtil {

    public static final String UTF_8 = "UTF-8";
    /**
     * 字体资源所在的位置
     */
    public static final String SIMSUN = "/font/simsun.ttc";

    @Resource
    Configuration freemarkerConfig;

    public DocumentUtil() {
    }

    /**
     * 通过模板导出pdf文件
     *
     * @param data             数据
     * @param templateFileName 模板文件名
     * @throws Exception
     */
    public ServletOutputStream createPDF(Map data, String templateFileName, HttpServletResponse response) throws Exception {
        ITextRenderer renderer = new ITextRenderer();
        ServletOutputStream outputStream = response.getOutputStream();
        renderer.getFontResolver().addFont(SIMSUN, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        Template template = freemarkerConfig.getTemplate(templateFileName, UTF_8);
        StringWriter writer = new StringWriter();
        template.process(data, writer);
        writer.flush();

        String html = writer.toString();
        renderer.setDocumentFromString(html);
        renderer.layout();
        renderer.createPDF(outputStream);
        return outputStream;
    }

}

制作模板




    
    
    


    
编号 ${p.no!''}
本金 ${p.principal !c} 分期 ${p.trem !''}

使用

String filename = "xxx.pdf";
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setContentType("application/octet-stream");

// response 为 HttpServletResponse
documentUtil.createPDF(data, PDF_TEMPLATED, response);

你可能感兴趣的:(POI,java,开发语言,POI)