c# - org - Obtener datos de un archivo Excel cargado sin guardar en el sistema de archivos
mapwindows 5 (6)
¿Podrían hacer que sus usuarios carguen un archivo CSV en su lugar? Tratar con un archivo de texto sin formato 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.
Tengo el requisito de permitir que un usuario de esta aplicación web ASP.NET cargue una hoja de cálculo de Excel con formato específico, complete las matrices con datos de la hoja de cálculo y enlace las matrices a un procedimiento almacenado de Oracle para su validación e inserción en la base de datos. Debo poder leer los datos de la hoja de cálculo de Excel sin poder guardarlos en el disco duro del servidor 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 stored procedure ...
}
Puede alguien ayudarme con esto? Agradezco la consideración de todos.
Gracias,
Gabe
Las bibliotecas COM de Excel no admiten la carga de archivos de otra fuente que no sea un archivo. Pero existe una gran cantidad de componentes de terceros, que le permite leer / escribir archivos de Excel.
De otra manera, puede ver una documentación para el formato de archivo XLS en [MS-XLS]: Formato de archivo binario de Excel (.xls) Especificación de estructura .
O puede utilizar una misma forma de procesamiento de archivos de oficina como en Sharepoint Server. Consulte el espacio de nombres Microsoft.Office.Excel.Server.WebServices .
Use FileUpload1. FileContent Stream. Supongo que su biblioteca de Excel puede manejar transmisiones directamente.
tal vez haya visto csvreader, lee csv, xls y xlsx:
Encontré una gran API liviana de código abierto en Codeplex para hacer esto llamada ExcelDataReader.
Puede transformar una secuencia de entrada de un archivo de Excel en un objeto System.Data.DataSet
(probablemente analizando usando las especificaciones BIFF).
Aquí está el enlace:
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();
}
Esto es algo con lo que he estado jugando recientemente.
Verifique esta publicación: escriba un libro de Excel en una secuencia de memoria .NET
Apunta a una gran biblioteca de Carlos Aguilar Mares, que le permite trabajar con libros de trabajo de Excel como XML.
No es necesario que Excel esté instalado en el servidor (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)