Obtener datos de un file Excel cargado sin save en el sistema de files

Tengo el requisito de permitir que un usuario de esta aplicación web ASP.NET cargue una spreadsheet de Excel con formatting específico, complete las matrices con datos de la spreadsheet y enlace las matrices a un procedimiento almacenado de Oracle para su validation e inserción en la database. Debo poder leer los datos de la spreadsheet de Excel sin poder savelos en el disco duro del server web. Esta es la parte que no puedo entender cómo hacer. Aquí hay un ejemplo de código simple.

<%--ASP.NET Declarative--%> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" Text="Send File" OnClick="Button1_Click" /> // C# Code-Behind protected void Button1_Click(object sender, EventArgs e) { var postedFile = FileUpload1.PostedFile; // ... Read file in memory and put in format to send to stonetworking procedure ... } 

Puede alguien ayudarme con esto? Agradezco la consideración de todos.

Gracias,
Gabe

Encontré una gran API liviana de código abierto en Codeplex para hacer esto llamada ExcelDataReader.

Puede transformar una secuencia de input de un file de Excel en un object System.Data.DataSet (probablemente parsing usando las especificaciones BIFF).

Aquí está el enlace:

http://www.codeplex.com/ExcelDataReader

Aquí hay una muestra de código:

 <%--ASP.NET Declarative--%> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" Text="Send File" OnClick="Button1_Click" /> <asp:GridView ID="GridView1" runat="server" /> // C# Code-Behind protected void Button1_Click(object sender, EventArgs e) { // the ExcelDataReader takes a System.IO.Stream object var excelReader = new ExcelDataReader(FileUpload1.FileContent); FileUpload1.FileContent.Close(); DataSet wb = excelReader.WorkbookData; // get the first worksheet of the workbook DataTable dt = excelReader.WorkbookData.Tables[0]; GridView1.DataSource = dt.AsDataView(); GridView1.DataBind(); } 

Use FileUpload1. FileContent Stream. Supongo que su biblioteca de Excel puede manejar transmisiones directamente.

Las bibliotecas COM de Excel no admiten la carga de files de otra fuente que no sea un file. Pero existe una gran cantidad de componentes de terceros, que le permite leer / escribir files de Excel.

De otra manera, puede ver una documentation para el formatting de file XLS en [MS-XLS]: Formato de file binary de Excel (.xls) Especificación de estructura .

O puede utilizar una misma forma de procesamiento de files de oficina como en Sharepoint Server. Consulte el espacio de nombres Microsoft.Office.Excel.Server.WebServices .

tal vez haya visto csvreader, lee csv, xls y xlsx:

http://www.csvreader.com

Esto es algo con lo que he estado jugando recientemente.

Verifique esta publicación: escriba un libro de Excel en una secuencia de memory .NET

Apunta a una gran biblioteca de Carlos Aguilar Mares, que le permite trabajar con libros de trabajo de Excel como XML.

ExcelXMLWriter

No es necesario que Excel esté instalado en el server (lo que significa que está rompiendo la licencia de MS de todos modos, ya que está accediendo a esto en la web).

Puede cargar el libro de Excel como una secuencia utilizando Workbook.Load(stream)

¿Podrían hacer que sus usuarios carguen un file CSV en su lugar? Tratar con un file de text sin formatting sería mucho más fácil. Tuve un problema similar antes y les pregunté a los usuarios si estaban bien, me ahorraron mucho trabajo.

Buena suerte.