2008-11-04 12 views
10

Je dois obliger un utilisateur de cette application Web ASP.NET à télécharger une feuille de calcul Excel spécifiquement formatée, à remplir des tableaux avec des données de la feuille de calcul et à lier les tableaux à une procédure stockée Oracle pour la validation et l'insertion dans la base de données. Je dois être capable de lire les données de la feuille de calcul Excel sans pouvoir les enregistrer sur le disque dur du serveur Web. C'est la partie que je ne peux pas comprendre comment faire. Voici un exemple de code simple.Obtenir des données à partir d'un fichier Excel téléchargé sans enregistrer dans le système de fichiers

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

} 

Quelqu'un peut-il m'aider avec cela? J'apprécie la considération de quiconque.

thx,
gabe

Répondre

2

Utilisez le FileUpload1. FileContent Stream. Je suppose que votre bibliothèque Excel peut gérer les flux directement.

1

Les bibliothèques COM d'Excel ne prennent pas en charge le chargement d'un fichier à partir d'une autre source que le fichier. Mais il existe beaucoup de composants tiers, ce qui vous permet de lire/écrire des fichiers Excel.

Autrevise vous pouvez voir une documentation pour le format de fichier XLS à [MS-XLS]: Excel Binary File Format (.xls) Structure Specification. Vous pouvez également utiliser le même traitement de fichiers Office comme dans SharePoint Server. Voir Microsoft.Office.Excel.Server.WebServices Namespace.

+0

XLS/format BIFF semble bien être possible de charger de la mémoire, mais pas dans certains donné une instance Excel mais pour lancer une nouvelle application pour l'utilisateur. Il est fait en le chargeant dans ISTorage, puis en utilisant OleLoad puis IOleObject.DoVerb –

0

C'est quelque chose que j'ai joué récemment.

Vérifiez ce post: Write an excel workbook to a memory stream .NET

Il pointe vers une grande bibliothèque par Carlos Aguilar Mares, qui vous permet de travailler avec des classeurs Excel au format XML.

ExcelXMLWriter

Vous ne avez pas besoin Excel installé sur le serveur (qui casse un peu la licence MS de toute façon que vous accédez à ce sur le web).

Vous pouvez charger le classeur Excel comme un flux en utilisant Workbook.Load(stream)

0

: Pouvez-vous vos utilisateurs de télécharger un fichier CSV à la place? Traiter avec un fichier texte brut serait beaucoup plus facile. J'ai eu un problème similaire avant et j'ai demandé aux utilisateurs et ils étaient OK, m'a sauvé des tonnes de travail.

Bonne chance.

+0

non, ce n'est pas possible. le client a déjà une feuille de calcul définie que je dois utiliser. – gabe

8

J'ai trouvé une grande légèreté API open source sur CodePlex pour ce faire appelé ExcelDataReader.

Il peut transformer un flux d'entrée d'un fichier Excel en un objet System.Data.DataSet (probablement en utilisant les spécifications BIFF).

Voici le lien:

http://www.codeplex.com/ExcelDataReader

Voici un exemple de code:

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

Cette API n'exporte pas un objet ExcelDataReader. Il semble que ce soit devenu obsolète. –

+0

@MatthewJamesDavis Il suffit d'utiliser les méthodes Factory de 'ExcelReaderFactory' – aggsol

Questions connexes