我需要读取通过ajax发送到控制器的excel文件(格式为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));
}
}
“数据”变量,只显示数字,别无其他,我需要读取该文件以获取数据
答案 0 :(得分:0)
如果您想阅读Excel文档及其单元格,并且碰巧安装了启用OLEDB的SQL Server,则可以直接阅读excel文档并将其转换为数据表
例如这个问题:Reading excel file using OLEDB Data Provider
请注意它如何通过更改提供程序类型来处理xls和xlsx文件
编辑: 我记得我以前做过的一个项目,并找到了它,所以这是您需要的所有代码
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文件的正确路径