2016-06-10 4 views
0

Ich importiere Excel-Daten in meine Datenbank, was einwandfrei funktioniert, aber nur wenn die Tabelle geöffnet ist. Wenn es nicht geöffnet ist, gibt es einen Fehler von "Erwartete Tabelle nicht im richtigen Format", irgendwelche Ideen warum? Vielen Dank im Voraus für jede Hilfe!Importieren von Excel-Daten (mit LinqToExcel) Funktioniert nur, wenn das Arbeitsblatt geöffnet ist C# MVC

[HttpPost] 
    public ActionResult ImportExcel(PipelineDetails model, HttpPostedFileBase FileUpload, int ProjectID) 
    { 
     string Result = ""; 

     if (FileUpload != null) 
     { 
      if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
      { 
       string filename = FileUpload.FileName; 
       string pathToExcelFile = filename; 

       var excelFile = new ExcelQueryFactory(); 
       excelFile.FileName = pathToExcelFile; 

       excelFile.AddMapping<PipelineDetails>(x => x.Accumulated_Length, "Accumulated Length"); 
       excelFile.AddMapping<PipelineDetails>(x => x.Elevation, "Elevation"); 
       excelFile.AddMapping<PipelineDetails>(x => x.Pipe_Outside_Diameter, "Pipe Outside Diameter"); 
       excelFile.AddMapping<PipelineDetails>(x => x.Wall_Thickness, "Wall Thickness"); 
       excelFile.AddMapping<PipelineDetails>(x => x.Control_Point_Description, "Control Point Description"); 
       excelFile.AddMapping<PipelineDetails>(x => x.Control_Point_Size, "Control Point Size"); 

       var pipelineData = from PLD in excelFile.Worksheet<PipelineDetails>() select PLD; 

       try 
       { 
        foreach (var a in pipelineData) 
        { 
         if (a.Accumulated_Length == null || a.Elevation == null || a.Pipe_Outside_Diameter == null || 
           a.Wall_Thickness == null) 
         { 
          Result = "There is a problem with the Import File. Please check the file format or data."; 
          return RedirectToAction("Index", "Pipeline", new { id = ProjectID, result = Result }); 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        Result = "There is a problem with the Import File. Please check the file format or data."; 
        return RedirectToAction("Index", "Pipeline", new { id = ProjectID, result = Result }); 
       } 


       ProjectManager PM = new ProjectManager(); 
       PM.DeleteALLPipeLine_forProject(ProjectID); 

       foreach (var a in pipelineData) 
       { 
        try 
        { 
         if (a.Accumulated_Length.ToString() != "" && a.Elevation.ToString() != "" && a.Pipe_Outside_Diameter.ToString() != "" && 
          a.Wall_Thickness.ToString() != "") 
         { 
          using (RexusTradingEntities RTE = new RexusTradingEntities()) 
          { 
           PipelineData PD = new PipelineData(); 
           PD.Accumulated_Length = Convert.ToDecimal(a.Accumulated_Length); 
           PD.Elevation = Convert.ToDecimal(a.Elevation); 
           PD.Pipe_Outside_Diameter = Convert.ToDecimal(a.Pipe_Outside_Diameter); 
           PD.Wall_Thickness = Convert.ToDecimal(a.Wall_Thickness); 
           PD.Control_Point_Description = a.Control_Point_Description; 
           PD.Control_Point_Size = a.Control_Point_Size; 
           PD.fkiProjectID = ProjectID; 
           PD.CreateDateTimeStamp = DateTime.Now; 

           RTE.PipelineDatas.Add(PD); 
           RTE.SaveChanges(); 
          } 
         } 
        } 

        catch (DbEntityValidationException ex) 
        { 
         foreach (var entityValidationErrors in ex.EntityValidationErrors) 
         { 

          foreach (var validationError in entityValidationErrors.ValidationErrors) 
          { 

           Response.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage); 

          } 

         } 
        } 
       } 

       //Adding the Node Numbers in sequencial order 
       PM.UpdatePipelineNodeNumbers(ProjectID, model); 

       Result = "Import Success"; 

       return RedirectToAction("Index", "Pipeline", new { id = ProjectID, result = Result }); 
      } 
      else 
      { 
       Result = "Only Excel file format is allowed."; 
       return RedirectToAction("Index", "Pipeline", new { id = ProjectID, result = Result }); 
      } 
     } 
     else 
     { 
      Result = "No Import File Selected."; 
      return RedirectToAction("Index", "Pipeline", new { id = ProjectID, result = Result }); 
     } 
    } 

EDIT: ich auch Hinzufügen der folgenden versucht, aber immer noch den Fehler:

if (FileUpload.FileName.EndsWith("xlsx")) 
       { 
        excelFile.DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace; 
       } 

if (FileUpload.FileName.EndsWith("xls")) 
       { 
        excelFile.DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Jet; 
       } 

EDIT: Ich sparte nur meine .xlsx-Datei als .xls und es importiert perfekt !? Warum nicht mit der .xlsx?

+0

Kann jemand helfen? – AxleWack

Antwort

0

Leider musste ich eine Lösung für dieses Problem finden und da ich keine Hilfe in der Nähe bekam (d. H. Antworten und andere Posts), musste ich eine Entscheidung treffen und das obige verwerfen und nur den Import von CSV-Dateien erlauben.

Verwandte Themen