官方地址: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):
HSSF 和 XSSF 示例 (apache.org)https://poi.apache.org/components/spreadsheet/examples.html
POI-XWPF示例(Word)https://svn.apache.org/repos/asf/poi/trunk/poi-examples/src/main/java/org/apache/poi/examples/xwpf/usermodel/
EasyPOIhttps://gitee.com/lemur/easypoi.git依赖
cn.afterturn
easypoi
4.4.0
EasyPoi教程_V1.0http://easypoi.mydoc.io/#text_186905
依赖
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);