gpt4 book ai didi

java - 如何从 HTML 输入读取 Excel 文件内容?

转载 作者:行者123 更新时间:2023-12-02 10:42:28 25 4
gpt4 key购买 nike

我有一个输入(type="file"),客户端可以在其中附加 Excel 文档。问题是我不知道如何阅读它来获取我需要的一些信息。

如果我使用 Excel 路径创建文件,我可以从文档中读取我需要的信息:

@Override
public String obtenerTelefono(File excelFile) throws IOException {
File file = new File("C:\\Users\\usuario\\Desktop\\Cosas\\tlf.xls");
FileInputStream iFile = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(iFile);
HSSFSheet sheet = workbook.getSheetAt(0);
workbook.close();
return obtenerTelefono(sheet);
}

public String obtenerTelefono(HSSFSheet sheet) {
HSSFRow row = sheet.getRow(0);
int telefono = (int) row.getCell(1).getNumericCellValue();
return String.valueOf(telefono);
}

问题是当我必须使用附加文档(文件 excelFile)而不是路径时,我不知道如何做同样的事情。我有一个示例方法,但我无法让它适合我的情况:

public void importarFichero() throws IOException, IcaException {
boolean validado = validarFichero();
if (validado) {
prefijo = fichero.getFileName().split("\\.")[0];
String sufijo = fichero.getFileName().split("\\.")[1];
File file = File.createTempFile(prefijo + "_", "." + sufijo, new File(System.getProperty("java.io.tmpdir")));
OutputStream outputStream = new FileOutputStream(file);
org.apache.poi.util.IOUtils.copy(fichero.getInputstream(), outputStream);
FileInputStream inputStream = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
HSSFSheet sheet = workbook.getSheetAt(0);
List<UnidadPoblacion> unidadPoblacionImportadas = obtenerUnidadesPoblacionExcel(sheet, this.anyoEjercicio);
if (service.guardaUnidadPoblacionImportadas(unidadPoblacionImportadas)) {
if (this.getListado() != null) {
try {
loadListadoFromDDBB();
} catch (IcaException e) {
addMessageError("actualizar_multiple_error");
}
}
int resultado = service.actualizaPoblacionEjercicioBonificacion(this.anyoEjercicio.intValue(),Integer.parseInt(unidadPoblacionImportadas.get(0).getProvincia().getCodigoProvincia()));
if(resultado >= 0) {
addMessageInfo("importar_fichero_ok", (Object) fichero.getFileName());
} else {
addMessageError("importar_fichero_ok_actualizar_poblacion_error", fichero.getFileName());
}
fichero = null;
anyoEjercicio = null;

} else {
addMessageError("importar_fichero_error", fichero.getFileName());
}
}
}

我认为我无法重用它,因为fichero是名为UploadedFile的类的实例,并且我正在使用File,所以我没有getInputStream() em> 方法,我找不到类似的 File 方法。

您知道如何使用原始文档中的信息创建该临时文件,然后读取该文件吗?也许我从 HTML 接收的输入信息不应该存储为 File 实例?

在服务器端,我使用 SpringMVC。

这是 HTML 部分:

<div class="form-group form-inline form-xtra required">
<label>Seleccionar archivo:</label>
<div required="true">
<input type="file" id="destinatarioExcel" name="destinatarioExcel" disabled="disabled"/>
</div>
</div>

这是 Controller 部分:

@RequestMapping(value = "/guardarMensaje", method = RequestMethod.POST)
public String guardarMensaje(@Valid @ModelAttribute("mensaje") MensajeDto mensaje, @RequestParam("destinatarioExcel") File excelFile, BindingResult errors,
final RedirectAttributes attr,
final ModelMap model) throws IOException {

if (errors.hasErrors()) {
attr.addFlashAttribute("org.springframework.validation.BindingResult.mensaje", errors);
attr.addFlashAttribute("mensaje", mensaje);
}

Calendar fechaActual = Calendar.getInstance();
Date fechaSql = new Date((fechaActual.getTime()).getTime());
String hora = Integer.valueOf(fechaActual.get(Calendar.HOUR_OF_DAY)).toString();

mensaje.setIdLatiniaSMS("Prueba");
mensaje.setIdUsuario(new Long(1));
mensaje.setEstadoSMS("E");
mensaje.setFechaSMS(fechaSql);
mensaje.setHoraSMS(hora);
mensaje.setResEnvio("Prue");
mensaje.setResEnvioDec("Prue");
mensaje.setEstadoEnvio("Est");

if (mensaje.getTelfLibreta() != null) {
mensaje.setNumTlfn(mensaje.getTelfLibreta());
} else if (mensaje.getTelfManual() != null) {
mensaje.setNumTlfn(mensaje.getTelfManual());
} else if (excelFile != null) {
mensaje.setNumTlfn(this.mensajeProvider.obtenerTelefono(excelFile));
}

Boolean res;
res = this.mensajeProvider.guardarMensaje(mensaje);
if (res) {
attr.addFlashAttribute("feedback", new MensajeDto(false, "Mensaje guardado correctamente"));

} else {
attr.addFlashAttribute("feedback", new MensajeDto(true, "Error al guardar el mensaje"));

}
model.clear();
return "redirect:/mensajes";

}

最佳答案

你可以使用这样的东西:

@PostMapping("/image/tmp")
open fun saveMediaContentTmp(file: MultipartFile): ResponseEntity<Map<String, String>> {

val endPath = Path(PATH_TO_TMP_FILE)
Files.copy(file.inputStream, endPath, StandardCopyOption.REPLACE_EXISTING)

importarFichero(endPath.toFile())

return ResponseEntity.ok(mapOf(
"name" to file.originalFilename
))
}

这是 Kotlin 语言,但我希望能够清楚地表达出来。

关于java - 如何从 HTML 输入读取 Excel 文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52834169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com