1
我有一個如此劃分的Excel文件:代碼的一列,一個描述,一個價格和一個大小。VB只考慮一個Excel列
在VB中,我必須選擇每個字段並導出到由我使用Access創建的數據庫中。 如果我使用說明列,我遇到了一個問題:VB認爲每行只有一行,所以我只在我的數據庫的一列中列出了每個產品的完整描述。
在我張貼以上我可以嘗試更好地解釋什麼,我說的例子。我想要的是每個產品的描述都正確報告。
這是我寫的代碼:
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
是否有任何人誰可以幫助我,好嗎?
不幸的是,錯誤的是Excel文件裏。事實上,描述欄是一個包含每個產品描述的塊。一旦我修復了這個文件,它就可以工作。無論如何,謝謝你 – Marietto
你最歡迎 –