エクセルテンプレートからファイルを生成
public class ExcelMeetingSheet {
public void MakeExcelMeetingSheet2(Student student, String fileName) {
// カレントパスの取得
String basepath = System.getProperty("user.dir");
FileInputStream in = null;
Workbook wb = null;
try {
in = new FileInputStream(basepath + "/src/main/resources/excel/meetingSheet_2nd3term.xlsx");
wb = WorkbookFactory.create(in);
} catch (IOException ioException) {
ioException.printStackTrace();
} catch (InvalidFormatException invalidFormatException) {
invalidFormatException.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Sheet sheet = wb.getSheetAt(0);
getCell(sheet, 1, 22).setCellValue(student.getStudentName());
FileOutputStream out = null;
try{
out = new FileOutputStream(fileName);
wb.write(out);
}catch(IOException e){
e.printStackTrace();
}finally{
try {
out.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
/**
* <p>
* 引数で指定されたシートの、行番号、列番号で指定したセルを取得して返却する
* <p>
* 行番号、列番号は0から開始する
* <p>
* Excelテンプレートで該当のセルを操作していない場合、NullPointerExceptionになる
* @param sheet シート
* @param rowIndex 行番号
* @param colIndex 列番号
* @return セル
*/
private Cell getCell(Sheet sheet, int rowIndex, int colIndex) {
Row row = sheet.getRow(rowIndex);
return row.getCell(colIndex);
}
}
// ダウンロードメソッド
@Controller
public class DownloadController {
@Autowired
ZenkenService zenkenService;
@Autowired
ExcelMeetingSheet excelMeetingSheet;
/**
* 面談シートダウンロードメソッド.
*/
@GetMapping("/meetingSheet/{id:.+}")
public ResponseEntity<byte[]> getMeetingSheetDownload(@PathVariable("id") String studentId, Model model) {
// 生徒情報の取得
Student student = studentService.selectOne(studentId);
// 生徒名(カタカナ)をひらながなに変換
Transliterator transliterator = Transliterator.getInstance("Katakana-Hiragana");
String name = transliterator.transliterate(student.getNameRuby());
// 生徒名(ひらがな)をローマ字に変換
transliterator = Transliterator.getInstance("Hiragana-Latin");
String latinName = transliterator.transliterate(name);
// ファイル名作成用に日付を取得
LocalDate date = LocalDate.now();
// ファイル名を決める
String fileName = DateTimeFormatter.ofPattern("yyyyMMdd").format(date) + latinName + ".xlsx";
// エクセルファイルの作成
excelMeetingSheet.MakeExcelMeetingSheet2(student, fileName);
// サーバーに保存されているエクセルファイルをbyteで取得する
byte[] bytes = null;
try {
bytes = zenkenService.getFile(fileName);
} catch (IOException e) {
e.printStackTrace();
}
try {
//HTTPヘッダーの設定
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8");
headers.setContentDispositionFormData("filename", fileName);
// ZIPファイルを戻す
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
} finally {
// ファイルの削除
File file = new File(fileName);
file.delete();
}
}
}