2012-09-18 43 views
0

嗨我有一个要求导入电子表格 - 验证数据并保存到数据库。导入电子表格+数据操作并保存到数据库

电子表格数据来自两个来源。一个可以直接导入(我没有这个问题)。在将数据保存到数据库之前,必须处理来自第二个来源的电子表格中的数据。

我创建了一个网页,上传的XLS文件,然后进口数据表。数据表是gridview的数据源。然后我进行验证并保存到数据库。

此代码适用于标准电子表格。我现在需要修改代码,以便它可以处理任何类型的源电子表格。需要操纵

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 

在上述示例中的参考文献需要被操纵,从而在最后4位被转移到YEAR柱和

实施例数据 标准来源

Unique ID Ref  PartName   New_SH Year ProductType Location Qty TopSeller 
39564  SD9PP/SS Micra Water Pump N  2012 Cooling  CD19  12 Y 

源Ref的第一部分直到第二个下划线被修剪,下划线被替换为/ eg XM3M/ZZ。 引用可以是4 + 2后缀到6 + 2后缀之间的任意值,但总是后跟_XXX_XXX_YYYY,其中X和Y是数字X不是必需的,YYYY是年份。

我的计划是将电子表格导入到数据表中的温度,并通过细胞的去通过该表逐行细胞并复制到另一个数据表进行任何改动neccesary后。然后这个第二个表格用作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 

末次

麻烦的是我得到错误....我是不是从右侧的角度接近这一点?

回答

0

排序...通过数据表中的每个单元循环中的代码是有缺陷......将公布今天晚些时候工作版本。

相关问题