[英]Importing Spreadsheet + Data manipulation and save to DB
嗨,我需要導入電子表格-驗證數據並保存到數據庫。
電子表格數據來自兩個來源。 一個可以直接導入(我對此沒有問題)。 在將第二個來源的電子表格中的數據保存到數據庫之前,必須對其進行操作。
我創建了一個網頁,該網頁上載xls文件,然后導入到數據表中。 然后,數據表是gridview的數據源。 然后,我進行驗證並保存到數據庫。
此代碼對於標准電子表格非常有效。 現在,我需要修改代碼,以便可以處理兩種類型的源電子表格。
示例數據標准源
Unique ID Ref PartName New_SH Year ProductType Location Qty TopSeller
39564 SD9PP/SS Micra Water Pump N 2012 Cooling CD19 12 Y
需要操縱的來源
Unique ID Ref PartName New_SH Year ProductType Location Qty TopSeller
IS-4564 XM3M_ZZ_001_001_1982 180 wiper motor S Wiper Motor CD19 3 N
在上面的示例中,需要處理Ref,以便將最后4位數字傳輸到YEAR列,並修剪Ref的第一部分,直到第二個下划線,並用/替換下划線。例如XM3M / ZZ。 引用可以是從4 + 2后綴到6 + 2后綴的任何內容,但始終后面跟着_XXX_XXX_YYYY,其中X和Y是數字X不需要,而YYYY是年份。
我的計划是將電子表格導入到臨時數據表,並逐個單元格逐行瀏覽該表,並在進行必要的更改后將其復制到另一個數據表。 然后,將第二個表用作gridview的數據源。
這是我的代碼...
Protected Sub ReadExcelFile(filename As String, worksheet As String)
Try
' Fetch Data from Excel data is based on the following
'Unique ID Ref PartName New_SH Year ProductType Location Qty TopSeller
'IS-4564 XM3M_ZZ_001_001_1982 180 wiper motor S Wiper Motor CD19 3 N
'35667 SD9PP/SS Micra water pump N 2012 Cooling CA4 14 Y
Dim MyConnection As New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source='" & filename & "'; Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'")
Dim MyCommand As New OleDbDataAdapter("select * from [" & worksheet & "]", MyConnection)
Dim dtPreview As New DataTable()
Dim dtTemp As New DataTable()
'Place data in temp datatable
MyCommand.Fill(dtTemp)
'Go through tem[ datatable and transfer cell values to dtPreview
If dtTemp.Columns.Count < 9 Then
'We do not have enough columns
lb_Error.Text = "Spreadsheet does not contain enough columns
Exit Sub
Else
'We have at least 9 columns - we are only interested in the first 9
If dtTemp.Rows.Count > 0 Then
'we have at least one row
'Add Column Headers
For c = 0 To dtTemp.Columns.Count - 1
dtPreview.Columns.Add(dtTemp.Columns(c).ColumnName, dtTemp.Columns(c).DataType)
Next
'Add Row Data
Dim l As Integer = 0
For Each drTempRow As DataRow In dtTemp.Rows
Dim newRow As DataRow = dtPreview.NewRow()
'Unique ID
If Left(dtTemp.Rows(0).ToString, 3) = "IS-" Then
newRow(0) = Mid(dtTemp.Columns(0).ToString.ToUpper.Trim, 4, 8)
Else
newRow(0) = dtTemp.Columns(0).ToString.ToUpper.Trim
End If
'Ref
If Left(dtTemp.Rows(0).ToString, 3) = "IS-" Then
l = Len(dtTemp.Columns(1).ToString.Trim)
newRow(1) = Left(dtTemp.Columns(1).ToString.Replace("_", "/").ToUpper.Trim, l - 13)
Else
newRow(1) = dtTemp.Columns(1).ToString.ToUpper.Trim
End If
'Part Name
newRow(2) = dtTemp.Columns(2).ToString.ToUpper.Trim
'New / Secondhand
newRow(3) = dtTemp.Columns(3).ToString.ToUpper.Trim
'Year
If Left(dtTemp.Columns(0).ToString, 3) = "IS-" Then
newRow(4) = Right(dtTemp.Columns(0).ToString, 4)
Else
newRow(4) = dtTemp.Columns(4).ToString
End If
'Product Type
newRow(5) = dtTemp.Columns(5).ToString.ToUpper.Trim
'Location
newRow(6) = dtTemp.Columns(6).ToString.ToUpper.Trim
'Quantity in Stock
newRow(7) = dtTemp.Columns(7).ToString
'Top Seller
newRow(8) = dtTemp.Columns(8).ToString.ToUpper.Trim
dtPreview.Rows.Add(newRow)
newRow = Nothing
Next
End If
'Add additional columns
dtPreview.Columns.Add("RecdBy", GetType(System.Int16), Session("UserNo").ToString())
If ddl_FileSource.SelectedValue.ToString() = "1" Then
dtPreview.Columns.Add("IntExt", GetType(System.Int16), "1")
Else
dtPreview.Columns.Add("IntExt", GetType(System.Int16), "0")
End If
dtTemp = Nothing
End If
'Bind DataTable to Gridview
Session("dtgv") = dtPreview
gv_StockData.DataSource = dtPreview
gv_StockData.DataBind()
MyConnection.Close()
Catch msg As Exception
lb_Error.Text = msg.Message
End Try
結束子
問題是我遇到了錯誤。...我是從正確的角度出發嗎?
排序...用於遍歷數據表中每個單元的代碼有缺陷...將在今天晚些時候發布工作版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.