read net mvc asp and c# asp.net excel file-upload filestream

c# - net - Lea el archivo de Excel de una secuencia



upload and read excel file in asp net c# (5)

Necesito una forma de leer un archivo de Excel desde una secuencia. No parece funcionar con la forma de hacer las cosas de ADO.NET.

El escenario es que un usuario carga un archivo a través de FileUpload y necesito leer algunos valores del archivo e importarlo a una base de datos.

Por varias razones, no puedo guardar el archivo en el disco, y tampoco hay motivos para hacerlo.

Entonces, ¿alguien sabe de una forma de leer un archivo de Excel desde una secuencia FileUpload?


Esto se puede hacer fácilmente con EPPlus .

//the excel sheet as byte array (as example from a FileUpload Control) byte[] bin = FileUpload1.FileBytes; //gen the byte array into the memorystream using (MemoryStream ms = new MemoryStream(bin)) using (ExcelPackage package = new ExcelPackage(ms)) { //get the first sheet from the excel file ExcelWorksheet sheet = package.Workbook.Worksheets[1]; //loop all rows in the sheet for (int i = sheet.Dimension.Start.Row; i <= sheet.Dimension.End.Row; i++) { //loop all columns in a row for (int j = sheet.Dimension.Start.Column; j <= sheet.Dimension.End.Column; j++) { //do something with the current cell value string currentCellValue = sheet.Cells[i, j].Value.ToString(); } } }


Parece que encontré un alma en el problema yo mismo.

http://www.codeplex.com/ExcelDataReader

Esta biblioteca parece funcionar bien y requiere una transmisión para leer el archivo de Excel.

ExcelDataReader reader = new ExcelDataReader(ExcelFileUpload.PostedFile.InputStream);


Uso el paquete nuget ClosedXML para leer el contenido de Excel de la transmisión. Tiene una sobrecarga de constructor en la clase XLWorkbook que toma corriente apuntando a un archivo de Excel (también conocido como libro de trabajo).

espacio de nombres importado en la parte superior de su archivo de código:

using ClosedXML.Excel;

Código fuente:

var stream = /*obtain the stream from your source*/; if (stream.Length != 0) { //handle the stream here using (XLWorkbook excelWorkbook = new XLWorkbook(stream)) { var name = excelWorkbook.Worksheet(1).Name; //do more things whatever you like as you now have a handle to the entire workbook. var firstRow = excelWorkbook.Worksheet(1).Row(1); } }


Infragistics tiene un componente de Excel que puede leer un archivo de Excel de una secuencia.

Lo estoy usando en un proyecto aquí y funciona bien.

También el componente myXls de fuente abierta podría modificarse fácilmente para admitir esto. El contstructor XlsDocument solo admite la carga desde un archivo dado por un nombre de archivo, pero funciona al crear un FileStream y luego leer el Stream, por lo que cambiarlo para admitir la carga de secuencias debe ser trivial.

Editar: Veo que encontraste una solución, pero solo quería señalar que actualicé el código fuente del componente para que ahora pueda leer un archivo de Excel directamente desde una transmisión. :-)


SpreadsheetGear puede hacerlo:

SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbookSet().Workbooks.OpenFromStream(stream);

Puede probarlo usted mismo con la evaluación gratuita .

Descargo de responsabilidad: soy dueño de SpreadsheetGear LLC