2016-06-10 4 views
0

Я импортирую данные Excel в свою базу данных, которая работает отлично, но только если электронная таблица открыта. Если он не открыт, он дает ошибку «Ожидаемая таблица не в правильном формате», любые идеи почему? Заранее благодарю за любую помощь!Импорт данных Excel (с использованием LinqToExcel) Работает только если рабочий лист открыт 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: Я также попытался добавить следующее, но все еще получаю ошибку:

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

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

EDIT: Я только что спас мой .xlsx файл как .xls и импортирован совершенным !? Почему бы не использовать .xlsx?

+0

Любой, кто может помочь? – AxleWack

ответ

0

К сожалению, мне нужно было найти решение этого вопроса, и поскольку я не получал никакой помощи в этом (ответы на вопросы и другие сообщения), мне пришлось принять решение и отказаться от вышеуказанного и разрешить импорт файлов csv.

Смежные вопросы