2017-09-26 12 views
1

Excelファイルが分割されています:コードは1列、説明は1列、価格は1列、サイズは1列です。VBはExcelの列を1つしか考慮しません

VBでは、各フィールドを選択してAccessで作成したデータベースにエクスポートする必要があります。 説明列で作業する場合、問題が発生します。VBは各行を1つだけとみなしているため、dbの1つの列にすべての製品の完全な説明があります。私はより良い私が言ったことを説明しようとすることができ、上記私はそれを投稿例で

enter image description here

。私が望むのは、製品ごとに説明が正しく報告されていることです。

これは私が書いたコードです:

Private Sub Importa_XLS(ByVal fileData As String, ByVal dbVuoto As String, ByVal dbDest As String) 

    If My.Computer.FileSystem.FileExists(dbDest) Then My.Computer.FileSystem.DeleteFile(dbDest) 
    My.Computer.FileSystem.CopyFile(dbVuoto, dbDest) 

    Dim capitoli As New cCapitoli 
    Dim paragrafi As New cParagrafi 
    Dim voci As New cVoci 
    Dim total As Integer 
    Dim fileStream As FileStream = New FileStream(fileData, FileMode.Open) 
    Dim file(fileStream.Length) As Byte 

    fileStream.Read(file, 0, fileStream.Length) 

    fileStream.Close() 

    Dim ExcelEngine As ExcelEngine = New ExcelEngine() 
    Dim application As IApplication = ExcelEngine.Excel 
    Dim workbook As IWorkbook = application.Workbooks.Open(New MemoryStream(file), ExcelOpenType.Automatic) 

    Dim gecc As New Syncfusion.GridExcelConverter.GridExcelConverterControl 

    Dim grid As New GridModel 
    gecc.ExcelToGrid(fileData, grid.Model) 
    Dim r As Integer = 2 
    Dim oldCap, oldPar, vett() As String 
    Dim capitolo As New cCapitolo 
    Dim paragrafo As New cParagrafo 

    'For r As Integer = 196 To grid.RowCount = 5549 
    For r = 2 To grid.RowCount - 1 
     vett = Split(grid(r, 1).Text) 
     total = UBound(Split(grid(r, 1).Text, ".")) 

     If total = 0 Then 'capitolo 
      oldCap = capitolo.Cod 
      oldPar = paragrafo.Cod 
      If Left(vett(0), 1) >= Chr(65) And Left(vett(0), 1) <= Chr(90) Then 
       capitolo.Cod = Left(vett(0), 1) 
       If capitolo.Cod <> oldCap Then 
        capitoli.Add(capitolo) 
       End If 
      End If 
      If Left(vett(0), 2) >= Chr(65) And Left(vett(0), 2) <= Chr(90) Then 
       paragrafo.Cod = Left(vett(0), 2) 
       If paragrafo.Cod <> oldPar Then 
        paragrafi.Add(paragrafo) 
       End If 
      End If 
      If grid(r, 2).Text.Length > 255 Then 
       capitolo.Descrizione = grid(r, 3).Text.ToString.Substring(0, 252) + "..." 
      Else 
       capitolo.Descrizione = grid(r, 3).Text.ToString 
      End If 
      'capitolo.Cod = grid(r, 1).Text.ToString 
     End If 

     If total = 1 Then 'voce 
      Dim voce As New cVoce 
      If grid(r, 1).Text.Length > 255 Then 
       voce.Descrizione = grid(r, 2).Text.ToString.Substring(0, 252) + "..." 
      Else 
       voce.Descrizione = grid(r, 2).Text 
      End If 
      voci.Add(voce) 
     End If 

     If total = 2 Then 'sottovoce 
      Dim sottovoce As New cVoce 
      sottovoce.Descrizione = grid(r, 3).Text 
      If grid(r, 1).Text.Length > 255 Then 
       sottovoce.DescBreve = grid(r, 2).Text.ToString.Substring(0, 252) + "..." 
      Else 
       sottovoce.DescBreve = grid(r, 2).Text 
      End If 

      sottovoce.Prezzo1 = grid(r, 3).Text 
      sottovoce.Prezzo2 = sottovoce.Prezzo1 
      sottovoce.Prezzo3 = sottovoce.Prezzo1 
      sottovoce.Prezzo4 = sottovoce.Prezzo1 
      sottovoce.UniMi = grid(r, 2).Text 
      sottovoce.Separatore = "." 
     End If 

    Next 

    capitoli.Salva_DB(dbDest) 
    paragrafi.Salva_DB(dbDest) 
    voci.Salva_DB(dbDest) 

End Sub 


Public Sub Salva_DB(ByVal PathDB As String) 

    Dim db As New cDB 

    db.connetti_DB(PathDB) 
    db.get_rs("DELETE * FROM Capitoli") 
    db.get_rs("SELECT * FROM Capitoli") 

    Dim rs As ADODB.Recordset = db.RecordSet 
    For Each cap As cCapitolo In Me 
     rs.AddNew() 
     rs("Descrizione").Value = cap.Descrizione 
     rs("Cod").Value = cap.Cod 
     rs.Update() 
    Next 

    db.close_DB() 

End Sub 

Public Sub Salva_DB(ByVal PathDB As String) 

    Dim db As New cDB 

    db.connetti_DB(PathDB) 
    db.get_rs("DELETE * FROM Paragrafi") 
    db.get_rs("SELECT * FROM Paragrafi") 

    Dim rs As ADODB.Recordset = db.RecordSet 
    For Each par As cParagrafo In Me 
     rs.AddNew() 

     rs("Cod_Capitolo").Value = par.Cod_Capitolo 
     rs("Descrizione").Value = par.Descrizione 
     rs("Cod").Value = par.Cod 

     rs.Update() 
    Next 

    db.close_DB() 

End Sub 

Public Sub Salva_DB(ByVal PathDB As String) 

    Dim db As New cDB 

    db.connetti_DB(PathDB) 
    db.get_rs("DELETE * FROM Voci") 
    db.get_rs("SELECT * FROM Voci") 

    Dim rs As ADODB.Recordset = db.RecordSet 
    For Each v As cVoce In Me 
     rs.AddNew() 
     rs("Cod_Voce").Value = v.Cod_Voce 
     rs("Cod_SottoVoce").Value = v.Cod_SottoVoce 
     rs("Cod_Capitolo").Value = v.Cod_Capitolo 
     rs("Cod_Paragrafo").Value = v.Cod_Paragrafo 
     rs("Cod_SottoParagrafo").Value = v.Cod_SottoParagrafo 
     'rs("Articolo").Value = v.Genera_Articolo 
     rs("Descrizione").Value = v.Descrizione 
     If v.Prezzo1 IsNot Nothing Then 
      rs("Prezzo1").Value = Val(v.Prezzo1.Replace(",", ".")) 
     End If 
     If v.Prezzo2 IsNot Nothing Then 
      rs("Prezzo2").Value = Val(v.Prezzo2.Replace(",", ".")) 
     End If 
     If v.Prezzo3 IsNot Nothing Then 
      rs("Prezzo3").Value = Val(v.Prezzo3.Replace(",", ".")) 
     End If 
     If v.Prezzo4 IsNot Nothing Then 
      rs("Prezzo4").Value = Val(v.Prezzo4.Replace(",", ".")) 
     End If 
     rs.Update() 
    Next 

    db.close_DB() 

End Sub 

は私を助けることができる誰もが、そこにしてくださいますか?

答えて

0
Private Sub btnOpenExcel_Click(sender As Object, e As RoutedEventArgs) Handles btnOpenExcel.Click 
    Try 
     ocIteam = New ObservableCollection(Of SLSerMain.proTradeItemMaster) 
     Dim flDialog As New OpenFileDialog() 
     flDialog.Filter = "Excel Files(*.xlsx)|*.xlsx" 
     Dim res As Boolean = CBool(flDialog.ShowDialog()) 
     If res Then 
      Dim fs As FileInfo = flDialog.File 
      Dim fileName As String = fs.Name 
      Dim objExcel As Object = AutomationFactory.CreateObject("Excel.Application") 
      'Open the Workbook Here 
      Dim objExcelWorkBook As Object = objExcel.Workbooks.Open(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\" & fileName) 
      'Read the Worksheet 
      Dim objActiveWorkSheet As Object = objExcelWorkBook.ActiveSheet() 
      'Cells to Read 

      Dim enumvalues As ItemEntry.ItemColoumn 

      Dim ItemName, Department, ItemCategory, Stock, Base, Purchase, Sales, Manufacture, HSNNo, CostRate, MRPRate, SalesRate As Object 
      'Iterate through Cells 
      For count As Integer = 1 To 158 
       ItemName = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.ItemName)) 
       Department = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Department)) 
       ItemCategory = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.ItemCategory)) 
       Stock = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Stock)) 
       Base = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Base)) 
       Purchase = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Purchase)) 
       Sales = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Sales)) 
       Manufacture = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.Manufacture)) 
       HSNNo = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.HSNNo)) 
       CostRate = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.CostRate)) 
       MRPRate = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.MRPRate)) 
       SalesRate = objActiveWorkSheet.Cells(count, Convert.ToInt32(enumvalues.SalesRate)) 
       Dim departmentID As String = "" 
       Dim pStockUnitID As String = "" 
       Dim pBaseUnitID As String = "" 
       Dim categoryID As String = "" 
       Dim manufactureID As String = "" 
       Dim pChargeID As String = "" 
       Dim pSalesChargeID As String = "" 
       Dim pHSNNo As String = "" 
       Try 
        departmentID = ocDepartment.Where(Function(x) x.DepartmentName.Contains(Department.value.ToString.Trim)).FirstOrDefault.DepartmentID 
       Catch ex As Exception 
       End Try 
       Try 
        categoryID = ocCategory.Where(Function(x) x.CategoryName.Contains(ItemCategory.value.ToString.Trim)).FirstOrDefault.CategoryID 
       Catch ex As Exception 
       End Try 
       Try 
        pStockUnitID = ocUnit.Where(Function(x) x.UnitID.Contains(Stock.value.ToString.Trim)).FirstOrDefault.UnitID 
       Catch ex As Exception 
       End Try 
       Try 
        pBaseUnitID = ocUnit.Where(Function(x) x.UnitID.Contains(Base.value.ToString.Trim)).FirstOrDefault.UnitID 
       Catch ex As Exception 
       End Try 
       Try 
        manufactureID = ocManufactureMaster.Where(Function(x) x.Name.Contains(Manufacture.value.ToString.Trim)).FirstOrDefault.ManuFacture_ID 
       Catch ex As Exception 
       End Try 
       Try 
        pChargeID = ocCharge.Where(Function(x) x.Name.Contains(Purchase.value.ToString.Trim)).FirstOrDefault.ChargeID 
       Catch ex As Exception 
       End Try 
       Try 
        pSalesChargeID = ocCharge.Where(Function(x) x.Name.Contains(Sales.value.ToString.Trim)).FirstOrDefault.ChargeID 
       Catch ex As Exception 
       End Try 
       Try 
        pHSNNo = HSNNo.value.ToString.Trim 
       Catch ex As Exception 
       End Try 
       ocIteam.Add(New SLSerMain.proTradeItemMaster() _ 
        With { 
          .Client_ID = gcClientID, 
          .Property_ID = gcPropertyID, 
          .ItemID = "", 
          .Name = ItemName.Value.ToString.Trim, 
          .SortName = ItemName.Value.ToString.Trim, 
          .DepartmentID = departmentID, 
          .CategoryID = categoryID, 
          .StockUnitID = pStockUnitID, 
          .BaseUnitID = pBaseUnitID, 
          .ChargeID = pChargeID, 
          .SalesChargeID = pSalesChargeID, 
          .MfgID = manufactureID, 
          .OpeningStock = 0.000, 
          .DefaultyQty = 1.0, 
          .Weight = 0.000, 
          .CostRate = Format(Convert.ToDouble(CostRate.value), ".00"), 
          .MrpRate = Format(Convert.ToDouble(MRPRate.value), "00"), 
          .SalesRate = Format(Convert.ToDouble(SalesRate.value), ".00"), 
          .CurrentStock = 0.000, 
          .AskForQuantity = 1, 
          .AskForRate = 1, 
          .IsAllowDecimalQty = 1, 
          .IsAlterPrice = 1, 
          .IsAlterQty = 1, 
          .IsAllowDiscount = 1, 
          .IsReadScal = 0, 
          .IsExpired = 0, 
          .IsVenderImplemented = 0, 
          .IsAllowZeroRate = 0, 
          .IsCustomerImplemented = 0, 
          .MiniStock = 1.0, 
          .MaxStock = 1.0, 
          .MiniOrderQty = 1.0, 
          .MaxOrderQty = 1.0, 
          .IsImported = 1, 
          .ClassCategory = "H", 
          .Movement = "F", 
          .ValMethod = "F", 
          .HSN_NO = pHSNNo 
          } 
         ) 
      Next count 
      dgBillDetails.ItemsSource = ocIteam 
      objExcel.Workbooks.close() 
     End If 
    Catch ex As Exception 
    End Try 
End Sub 

Public Class ItemEntry 
    Enum ItemColoumn 
     ItemName = 1 
     Department = 2 
     ItemCategory = 3 
     Stock = 4 
     Base = 5 
     Purchase = 6 
     Sales = 7 
     Manufacture = 8 
     HSNNo = 9 
     CostRate = 10 
     MRPRate = 11 
     SalesRate = 12 
    End Enum 
End Class 

使用このパッテン

+0

残念ながらエラーがExcelファイル内にあります。実際、記述列は各製品の説明を含むブロックである。ファイルを修正すると、それは動作します。とにかくありがとうございます – Marietto

+0

大歓迎 –

関連する問題