ユーザーが特定のExcelファイルをアップロードできるアプリケーションを作成する必要があります。 Sumarizingでは、システムはファイルを受信し、特定のセルに何かを書き込んで、同じファイルをビューに変更して戻す必要があります。ユーザーはこの新しいファイルをダウンロードできます。メモリ内に同じファイルをアップロード、変更、ダウンロードする
私はApache POIを使用してExcelファイルを変更していますが、このファイルをビューに戻す方法はわかりません。
アップロードビュー:
<form method="POST" enctype="multipart/form-data" th:action="@{/pessoa/lote}">
<table>
<tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
<tr><td></td><td><input type="submit" value="Upload" /></td></tr>
</table>
</form>
コントローラー:ここで私は私が何をする必要があるか分からない、私は「ConsultaPessoaService」と命名されたサービスから「consultaLote」という名前のメソッドを呼び出します。
@RequestMapping(value = "/lote", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
try {
cpService.consultaLote(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
redirectAttributes.addFlashAttribute("message",
"You successfully uploaded " + file.getOriginalFilename() + "!");
return "redirect:/";
}
サービスでは、ファイルを読み込んで編集し、FileOutputStreamを生成できます。この時点で私は継続する方法がわからない、私は、コントローラを使用してビューにファイルを返却する必要がありますが、私は方法がわからない:あなたはconsultaLote
メソッドからバイト配列を返す必要があります
@Service
public class ConsultaPessoaService {
public FileOutputStream consultaLote(MultipartFile file) throws IOException {
DataFormatter formatter = new DataFormatter();
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
FileInputStream inputStream = new FileInputStream(convFile);
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = firstSheet.iterator();
while (iterator.hasNext()) {
Row nextRow = iterator.next();
System.out.println(formatter.formatCellValue(nextRow.getCell(3)));
nextRow.getCell(3).setCellValue("test");
}
FileOutputStream outputStream = new FileOutputStream("arquivot.xlsx");
workbook.write(outputStream);
workbook.close();
outputStream.flush();
outputStream.close();
return outputStream;
}
}
あなたはあなたのファイルをフラッシュしたい/ユーザーにダウンロード可能にしたいですか? –
はい、私はそれを修正した後にファイルをダウンロードする必要があります –
値を変更した後、 'workbook'オブジェクトが新しいファイルを保持していることを確認するだけですか? –