Загрузите ExcelFile через Ajax и прочитайте его на контроллере - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужно прочитать файл Excel, отправленный на контроллер через ajax (формат httppostfilebase) и получить их данные Файл будет загружен с веб-сайта и не должен быть сохранен на диске. Я получил это на PageWeb (кнопка, чтобы выбрать файл и тот, кто делает загрузку ("Analizar"):

<input type="file" accept=".xls,.xlsx" id="cargarArchivo" class="cargarArchivo"/>
    <br/>
 <input type="button" class="analizarArchivo" value="Analizar" onclick="AnalizarArchivoEmpleados()"/>

Это на JS (тот, кто отправляет файл, в формате "HttpPostFileBase" (остальное только проверка и то):

var mensajeDialogo;
function AnalizarArchivoEmpleados () {
var nombreArchivo = $(".cargarArchivo").val();
//Se verifica que hay un archivo seleccionado y que su extension sea Excel (xls, xlsx)
if ($(".cargarArchivo").get(0).files.length == 0 || nombreArchivo.indexOf(".xls") == -1) {
    mensajeDialogo = "Porfavor seleccione un archivo";
    if ($(".cargarArchivo").get(0).files.length != 0 && nombreArchivo.indexOf(".xls") == -1) {
        mensajeDialogo = mensajeDialogo + "<br> con extencion valida Excel (xls, xlsx)";
    }
    $('<div>' + mensajeDialogo + "</div>").dialog({
        scriptCharset: "utf-8",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        draggable: false,
        modal: true,
        resizable: false,
        width: 'auto',
        title: 'Analizar Archivo',
        buttons: {
            "Aceptar": function () {
                $(this).dialog("close");
            }
        }
    }); 
} else {
    //Se verifica que el navegador soporte windows.FormData , para el envio de archivo excel
    if (window.FormData !== undefined) {
        alert("si lo soporte oe");
        var archivoExcelData = new FormData();
        var totalFiles = document.getElementById("cargarArchivo").files.length;
        for (var i = 0; i < totalFiles; i++) {
            var file = document.getElementById("cargarArchivo").files[i];

            archivoExcelData.append("cargarArchivo", file);
        }
        $.ajax({
            type: 'POST',
            url: "/Empleados/AnalisisArchivoExcel",
            data: archivoExcelData ,
            dataType: 'json',
            contentType: false,
            processData: false,
            statusCode: {
                401: function () {
                    MostrarMensajeSinPermiso();
                },
                200: function (data, status, xhr) {
                    var expirado = xhr.getResponseHeader('Expires');
                    if (expirado == "-1") {
                        MostrarMensajeSessionExpirada();
                    } else {
                        alert("volvi");
                    }
                }
            }
        });
    }else {
        mensajeDialogo = "Su navegador no soporta envio de archivos <br>Porfavor actualize su navegador";
        $('<div>' + mensajeDialogo + "</div>").dialog({
            scriptCharset: "utf-8",
            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
            draggable: false,
            modal: true,
            resizable: false,
            width: 'auto',
            title: 'Error',
            buttons: {
                "Aceptar": function () {
                    $(this).dialog("close");
                }
            }
        });    
    }
}};

И это на контроллере:

 [HttpPost]
 public void AnalisisArchivoExcel()
 {
    for (int i = 0; i < Request.Files.Count; i++)
    {
        var file = Request.Files[i];
        var fileName = Path.GetFileName(file.FileName);            
        string fileContentType = file.ContentType;
        byte[] fileBytes = new byte[file.ContentLength];
        var data = file.InputStream.Read(fileBytes, 0, 
        Convert.ToInt32(file.ContentLength));
   }
}

var "data", просто показать цифры и ничего больше, мне нужно прочитать этот файл и получить данные

1 Ответ

0 голосов
/ 04 сентября 2018

Если вы хотите прочитать документ Excel и его ячейки и у вас установлен SQL Server с включенной OLEDB, вы можете напрямую прочитать документ Excel и преобразовать его в DataTable

Например, такой вопрос: Чтение файла Excel с использованием поставщика данных OLEDB

Обратите внимание, как он может обрабатывать как файлы xls, так и xlsx, изменяя тип поставщика

EDIT: Я вспомнил проект, в котором я делал это раньше, и нашел его, так что вот весь код, который вам нужен

            DataTable dt = new DataTable();

            string connStr = "";
            if (fileExtension == ".xls")
            {
                connStr = string.Format(String.Format("provider=Microsoft.Jet.OLEDB.4.0;Data Source='{0}';Extended Properties='Excel 8.0;IMEX=1;';", FullFilePath), FullFilePath, true);
            }
            else
            {
                connStr = string.Format(String.Format("provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 12.0;IMEX=1;';", FullFilePath), FullFilePath, true);
            }

            using (OleDbConnection dbConn = new OleDbConnection(connStr))
            {
                if (System.IO.File.Exists(FullFilePath))
                {
                    dbConn.Open();
                    DataTable dtSchema = dbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    OleDbCommand dbCmd = new OleDbCommand(String.Format("SELECT * FROM [{0}]", dtSchema.Rows[0]["TABLE_NAME"]), dbConn);
                    OleDbDataAdapter dbAdp = new OleDbDataAdapter(dbCmd);

                    try
                    {
                        dbAdp.Fill(dt);
                    }
                }
            }

Где FullFilePath - правильный путь к вашему файлу xls / x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...