2008-11-04 6 views
10

Ich muss einem Benutzer dieser ASP.NET-Webanwendung das Hochladen einer speziell formatierten Excel-Tabelle, das Füllen von Arrays mit Daten aus der Kalkulationstabelle und das Binden der Arrays ermöglichen an eine gespeicherte Oracle-Prozedur zur Validierung und zum Einfügen in die Datenbank. Ich muss in der Lage sein, die Daten aus der Excel-Tabelle zu lesen, ohne sie auf der Festplatte des Webservers speichern zu können. Dies ist der Teil, den ich nicht herausfinden kann, wie es geht. Hier ist ein einfaches Codebeispiel.Abrufen von Daten aus einer hochgeladenen Excel-Datei ohne Speichern im Dateisystem

<%--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 ... 

} 

Kann mir jemand dabei helfen? Ich schätze jede Rücksichtnahme.

thx,
gabe

Antwort

2

Verwenden Sie die FileUpload1. FileContent Strom. Ich denke, Ihre Excel-Bibliothek kann Streams direkt verarbeiten.

1

Die COM-Bibliotheken von Excel unterstützen das Laden von Dateien aus anderen Quellen als Dateien nicht. Aber es gibt eine Menge von Drittanbieter-Komponenten, mit denen Sie Excel-Dateien lesen/schreiben können.

Andere können Sie eine Dokumentation für das XLS-Dateiformat unter [MS-XLS]: Excel Binary File Format (.xls) Structure Specification sehen.

Oder Sie können eine gleiche Art der Verarbeitung von Office-Dateien wie in Sharepoint Server verwenden. Siehe Microsoft.Office.Excel.Server.WebServices Namespace.

+0

XLS/BIFF-Format allerdings möglich zu sein scheinen aus dem Speicher zu laden, aber nicht in einige Excel-Instanz übergeben, aber neue Anwendungen für Benutzer ausführen. Es wird gemacht, indem man es in ISTorage lädt, dann mit OleLoad und dann IOleObject.DoVerb –

0

Das ist etwas, mit dem ich vor kurzem gespielt habe.

Überprüfen Sie diesen Eintrag: Write an excel workbook to a memory stream .NET

Es deutet auf eine große Bibliothek von Carlos Aguilar Mares, die Sie arbeiten mit Excel-Dateien im XML-Format ermöglicht.

ExcelXMLWriter

Sie nicht Excel auf dem Server installiert sein (was irgendwie ist die MS Lizenzierung brechen ohnehin wie Sie diese über das Web zugreifen).

Sie können die Excel-Arbeitsmappe als Stream laden mit Workbook.Load(stream)

0

Könnten Sie Ihre Benutzer laden haben eine CSV-Datei statt? Der Umgang mit einer einfachen Textdatei wäre viel einfacher. Ich hatte ein ähnliches Problem zuvor und ich fragte die Benutzer und sie waren OK, rettete mir jede Menge Arbeit.

Viel Glück.

+0

nein, das ist nicht möglich. Der Kunde hat bereits eine definierte Tabelle, die ich verwenden muss. – gabe

8

ich einen großen leichten Open-Source-API auf Codeplex, dies zu tun genannt ExcelDataReader gefunden.

Es kann einen Eingabestream einer Excel-Datei in ein System.Data.DataSet-Objekt transformieren (wahrscheinlich mit BIFF-Spezifikationen analysieren).

Hier ist der Link:

http://www.codeplex.com/ExcelDataReader

Hier ist ein Codebeispiel:

<%--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(); 
} 
+1

Diese API exportiert keinen ExcelDataReader. Scheint, dass dies überholt ist. –

+0

@MatthewJamesDavis Verwenden Sie einfach die Factory-Methoden von 'ExcelReaderFactory' – aggsol

Verwandte Themen