feat: adiciona suporte para arquivos XLS e atualiza mensagens de erro na importação

This commit is contained in:
FelipeCN
2026-03-03 08:30:28 -03:00
parent bbfa66979b
commit b0e216a6ff
2 changed files with 10 additions and 10 deletions
+7 -7
View File
@@ -1,7 +1,5 @@
use crate::domain::errors::{ErroArquivo, ResumoAvisos};
use calamine::{open_workbook, Reader, Xlsx};
use std::fs::File;
use std::io::BufReader;
use calamine::{open_workbook_auto, Reader};
use std::path::Path;
const LIMITE_BYTES: u64 = 50 * 1024 * 1024;
@@ -22,17 +20,19 @@ pub struct ResultadoXlsx {
pub avisos: ResumoAvisos,
}
/// Lista as abas disponíveis em um arquivo XLSX.
/// Lista as abas disponíveis em um arquivo XLSX (ou XLS com extensão .xls mas conteúdo XLSX).
pub fn listar_abas(caminho: &Path) -> Result<Vec<String>, ErroArquivo> {
verificar_tamanho(caminho)?;
let workbook: Xlsx<BufReader<File>> = open_workbook::<Xlsx<_>, _>(caminho)
let workbook = open_workbook_auto(caminho)
.map_err(|e| ErroArquivo::Corrompido(e.to_string()))?;
Ok(workbook.sheet_names().to_vec())
}
/// Lê os dados de uma aba XLSX a partir de uma linha de início.
/// Lê os dados de uma aba XLSX (ou XLS com extensão .xls mas conteúdo XLSX) a partir de uma linha de início.
///
/// O formato real é detectado pelo conteúdo do arquivo (magic bytes), não pela extensão.
///
/// # Parâmetros
/// - `caminho`: caminho do arquivo
@@ -45,7 +45,7 @@ pub fn ler_xlsx(
) -> Result<ResultadoXlsx, ErroArquivo> {
verificar_tamanho(caminho)?;
let mut workbook: Xlsx<BufReader<File>> = open_workbook::<Xlsx<_>, _>(caminho)
let mut workbook = open_workbook_auto(caminho)
.map_err(|e| ErroArquivo::Corrompido(e.to_string()))?;
let range: calamine::Range<calamine::Data> = workbook
+3 -3
View File
@@ -24,7 +24,7 @@ pub fn renderizar(ui: &mut Ui, _ctx: &Context, app: &mut App) {
if ui.button("📂 Selecionar arquivo...").clicked() {
if let Some(caminho) = rfd::FileDialog::new()
.add_filter("Planilhas", &["csv", "xlsx"])
.add_filter("Planilhas", &["csv", "xlsx", "xls"])
.pick_file()
{
on_arquivo_selecionado(app, caminho);
@@ -140,7 +140,7 @@ fn on_arquivo_selecionado(app: &mut App, caminho: PathBuf) {
app.caminho_arquivo = Some(caminho);
app.notas_importadas.clear();
}
"xlsx" => {
"xlsx" | "xls" => {
app.tipo_arquivo_atual = TipoArquivo::Xlsx;
match listar_abas_xlsx(&caminho) {
Ok(info) => {
@@ -157,7 +157,7 @@ fn on_arquivo_selecionado(app: &mut App, caminho: PathBuf) {
}
}
_ => {
app.exibir_erro("Formato de arquivo não suportado. Use CSV ou XLSX.");
app.exibir_erro("Formato de arquivo não suportado. Use CSV, XLSX ou XLS.");
}
}
}