利用Visulforce Page生成Excel文件并保存为附件
在现实的工作场景中,用户可能需要按月统计Opportunity的已关闭或已赢得的金额。然而,报表只能显示当前数据的结果,为了保存这一结果以便于以后对比查看每个月的数据变化,我们可以使用VF生成Excel文件。
生成Excel文件示例代码:
<apex:page sidebar="false" showHeader="false" wizard="false" contentType="application/vnd.ms-excel;charset=UTF-8#.xls" name="VFtoExcel" cache="true" applyHtmlTag="false" readOnly="true">
<html>
<head>
<meta http-equiv="Content-Type" content="test/html;charset = utf-8" />
<style>
table {
font-size: 14px;
vertical-align: middle;
}
table td {
height: 32px;
}
</style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="1" align="center" style="table-layout: fixed;">
<tr>
<td style="width: 250px;">
Status
</td>
<td style="width: 100px;">
Jan
</td>
<td style="width: 100px;">
Feb
</td>
<td style="width: 100px;">
Mar
</td>
<td style="width: 100px;">
Apr
</td>
<td style="width: 100px;">
May
</td>
<td style="width: 100px;">
Jun
</td>
<td style="width: 100px;">
Jul
</td>
<td style="width: 100px;">
Aug
</td>
<td style="width: 100px;">
Sep
</td>
<td style="width: 100px;">
Oct
</td>
<td style="width: 100px;">
Nov
</td>
<td style="width: 100px;">
Dec
</td>
</tr>
<tr style="text-align: left;">
<td >
<apex:outputText value="Active" />
</td>
<td >
<apex:outputText value="100" />
</td>
<td >
<apex:outputText value="200" />
</td>
<td >
<apex:outputText value="300" />
</td>
<td >
<apex:outputText value="400" />
</td>
<td >
<apex:outputText value="500" />
</td>
<td >
<apex:outputText value="600" />
</td>
<td >
<apex:outputText value="700" />
</td>
<td >
<apex:outputText value="800" />
</td>
<td >
<apex:outputText value="900" />
</td>
<td >
<apex:outputText value="1000" />
</td>
<td >
<apex:outputText value="1100" />
</td>
<td >
<apex:outputText value="1200" />
</td>
</tr>
</table>
</body>
</html>
</apex:page>
将Excel文件保存为附件
PageReference PDf = Page.VFtoExcel;
PDf.setRedirect(true);
Attachment attach = new Attachment();
Blob b = PDf.getContent();
attach.Body = b;
attach.Name = 'OppAmout.xlsx';
attach.IsPrivate = false;
attach.ParentId = 'sf record id';
insert attach;
System.debug(LoggingLevel.INFO, '*** attach.Id: ' + attach.Id);