2016-12-09 7 views
0

ExcelFormat.OpenXml 2.5.0ライブラリを使用してExcelファイルから値を読み取るC#コードを作成しています。 Excelには3つの列があります。私のプログラムは3つの列の値を読み、IEnumerable<ShipViewModel>excelから値を読み取り、viewmodelタイプのリストコレクションに格納

マイビューモデルは基本的に3つのプロパティが含まれて返すリストのコレクション内の値を格納する必要があります。私はのためのループで収集リストを移入で探しています

public List<ShipViewModel> OpenSpreadsheetDocument(string filepath) 
     { 

      List<ShipViewModel> model = new List<ShipViewModel>(); 

      // Open a SpreadsheetDocument based on a filepath. 
      using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filepath, false)) 
      { 
       WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart; 
       WorksheetPart worksheetPart = workbookPart.WorksheetParts.First(); 
       SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); 
       string text; 
       foreach (Row r in sheetData.Elements<Row>()) 
       { 
        foreach (Cell c in r.Elements<Cell>()) 
        { 
         text = c.CellValue.Text; 
         Console.Write(text + " "); 
        } 
       } 
      } 
     } 

をExcelファイルを読むためにロジック

public class ShipViewModel 
{ 

    public string Column1 { get; set; } 
    public string Column2 { get; set; } 
    public string Column3 { get; set; } 

} 

以下のコードを参照してください。例えば以下のコードを参照してください。あなたは上記のループをチェックすると しかし、列2およびCOLUMN3は​​ケースではありません列1の同じセルの値が含まれます。セルの値は、次の反復中にのみ変化します。

ShipViewModel shipViewModel = new ShipViewModel(); 
        shipViewModel.Column1 = c.CellValue.Text; 
        shipViewModel.Column2 = c.CellValue.Text; 
        shipViewModel.Column3 = c.CellValue.Text; 

        model.Add(shipViewModel); 
+0

Interop.Excelを使用していますか? – Aravind

+0

こんにちはAravind。私はDocumentFormat.OpenXmlを使用しています。2.5.0 – Tom

+0

影響を受けるセルの数を知っているので、ループのためにセルをドロップした場合、rに何を持っているかに基づいてshipViewModel.Column#へのマッピングを行います。 (あなたがテキストを持っているところ= ...) – nocturns2

答えて

0

私は、データベースにExcelからデータをインポートするために、あなたはnugetからLinqToExcelをインストールする必要がありますどのようにあなたに私の解決策を表示することができます。 コード:

[HttpPost] 
    public JsonResult UploadExcel(Item items, HttpPostedFileBase FileUpload) 
    { 

     List<string> data = new List<string>(); 
     if (FileUpload != null) 
     { 
      // tdata.ExecuteCommand("truncate table OtherCompanyAssets"); 
      if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") 
      { 


       string filename = FileUpload.FileName; 
       string targetpath = Server.MapPath("~/Content/Uploads/Excel/"); 
       FileUpload.SaveAs(targetpath + filename); 
       string pathToExcelFile = targetpath + filename; 
       var connectionString = ""; 
       if (filename.EndsWith(".xls")) 
       { 
        connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", pathToExcelFile); 
       } 
       else if (filename.EndsWith(".xlsx")) 
       { 
        connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", pathToExcelFile); 
       } 

       var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString); 
       var ds = new DataSet(); 

       adapter.Fill(ds, "ExcelTable"); 

       DataTable dtable = ds.Tables["ExcelTable"]; 

       string sheetName = "Sheet1"; 

       var excelFile = new ExcelQueryFactory(pathToExcelFile); 
       var artistAlbums = from a in excelFile.Worksheet<Item>(sheetName) select a; 

       foreach (var a in artistAlbums) 
       { 
        try 
        { 
         if (a.Name != "" && a.Description != "" && a.Number != "") 
         { 
          Item TU = new Item(); 
          TU.Name = a.Name; 
          TU.Description = a.Description; 
          TU.Number = a.Number; 
          db.Items.Add(TU); 

          db.SaveChanges(); 



         } 
         else 
         { 
          data.Add("<ul>"); 
          if (a.Name == "" || a.Name == null) data.Add("<li> Name is required</li>"); 
          if (a.Description == "" || a.Description == null) data.Add("<li> Description is required</li>"); 
          if (a.Number == "" || a.Number == null) data.Add("<li>Number is required</li>"); 

          data.Add("</ul>"); 
          data.ToArray(); 
          return Json(data, JsonRequestBehavior.AllowGet); 
         } 
        } 

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

          foreach (var validationError in entityValidationErrors.ValidationErrors) 
          { 

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

          } 

         } 
        } 
       } 
       //deleting excel file from folder 
       if ((System.IO.File.Exists(pathToExcelFile))) 
       { 
        System.IO.File.Delete(pathToExcelFile); 
       } 
       return Json("success", JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       //alert message for invalid file format 
       data.Add("<ul>"); 
       data.Add("<li>Only Excel file format is allowed</li>"); 
       data.Add("</ul>"); 
       data.ToArray(); 
       return Json(data, JsonRequestBehavior.AllowGet); 
      } 
     } 
     else 
     { 
      data.Add("<ul>"); 
      if (FileUpload == null) data.Add("<li>Please choose Excel file</li>"); 
      data.Add("</ul>"); 
      data.ToArray(); 
      return Json(data, JsonRequestBehavior.AllowGet); 
     } 
    } 
関連する問題