Java言語 StrutsでExcelレポートを生成して、ダウンロードする
1.Struts2配置ファイル
Javaコード:
<?xml version="1.0″ encoding="UTF-8″ ?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
“http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="base" extends="struts-default" namespace="/">
<action name="download" class="ivan.test.action.OutputExcelAction">
<!– EXCELテンプレートの場所 –>
<param name="templatePosition">/template.xls</param>
<result type="stream" name="success">
<!– ダウンロードファイルのタイプ, tomcat\conf\web.xmlで確認できる –>
<param name="contentType">application/vnd.ms-excel</param>
<!– excelStream为actionのパラメータ名 –>
<param name="inputName">excelStream</param>
<!– attachment ダウンロードパラメータを設定
fileName生成されたファイルの名前を指定 –>
<param name="contentDisposition">
attachment;filename=${excelFileName}
</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
2.Actionクラス
Javaコード:
package ivan.test.action;
import ivan.test.demo.ExcelUtil;
import java.io.InputStream;
import java.util.Map;
public class OutputExcelAction extends BaseAction {
private static final long serialVersionUID = 1L;
// output 出力ストリームパラメータ
private InputStream excelStream;
// output ダウンロードファイル名
private String excelFileName;
// injection テンプレートパス
private String templatePosition;
@Override
public String execute() throws Exception {
String templatePath = httpApplication.getRealPath(“/")
+ “WEB-INF/classes" + templatePosition;
Map<String, Object> map = ExcelUtil.getExcelMap(templatePath);
excelStream = (InputStream) map.get(“excelStream");
excelFileName = (String) map.get(“excelFileName");
return SUCCESS;
}
public InputStream getExcelStream() {
return excelStream;
}
public void setExcelStream(InputStream excelStream) {
this.excelStream = excelStream;
}
public String getExcelFileName() {
return excelFileName;
}
public void setExcelFileName(String excelFileName) {
this.excelFileName = excelFileName;
}
public String getTemplatePosition() {
return templatePosition;
}
public void setTemplatePosition(String templatePosition) {
this.templatePosition = templatePosition;
}
}
3.Excelの入力ストリームと名前を作成
Javaコード:
package ivan.test.demo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelUtil {
public static Map<String, Object> getExcelMap(String template)
throws Exception {
ByteArrayOutputStream os = null;
try {
// テンプレートを読む
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(
template));
// ビジネスロジックに従って、Excelシートを書く
HSSFSheet sheet = workbook.getSheet(“firstSheet");
for (int i = 1; i < 10; i++) {
HSSFRow row = sheet.createRow(i);
for (int j = 0; j < 10; j++) {
HSSFCell cell = row.createCell(j);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue(“(" + i + " , " + j + “)");
}
}
// Excel名前とInputStreamを取得
os = new ByteArrayOutputStream();
workbook.write(os);
InputStream excelStream = new ByteArrayInputStream(os.toByteArray());
String excelFileName = “text.xls";
// mapにロードされ、mapに戻る
Map<String, Object> excelMap = new HashMap<String, Object>();
excelMap.put(“excelFileName", excelFileName);
excelMap.put(“excelStream", excelStream);
return excelMap;
} catch (Exception e) {
System.out.println(“異常………….");
throw e;
} finally {
if (os != null) {
os.close();
}
}
}
}