使用

时间:2016-09-09 19:38:01

标签: excel asp-classic

我在网页上列出了大量备件,供应商每周提供给我。我只是将.xlsx文件上传到web文件夹,页面填充自己。对象不是以任何方式更改文件,因此不涉及任何工作。在我使用的经典ASP中

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"&_
    "DBQ=" & Server.MapPath(file) & ";" 
strSQL = "SELECT * FROM A1:D10000 order by ""Item number"" ASC"
Set objRS=objConn.Execute(strSQL)

项目编号是可以是数字或字母数字的部件号 问题是订单不正确

例如

X1
X11
x111
X2
X22
X222

什么时候应该

X1
X2
X11
X22
X111
X222

我理解为什么会发生这种情况但无法找到使订单正确的方法

其他一切都运行良好,但客户不希望在x200之前找到X1000并且它已经引起了一些问题

非常感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:0)

对于Excel中的这类问题,一种解决方案是使用“帮助列”将数据拆分为数字和alpha部分,然后对辅助列进行排序。

根据您的真实数据的样子,您可以使用以下公式:

Alpha(第一)部分

=LEFT(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&"0123456789"))-1)

数字(第二)部分

=MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&"0123456789")),99)

答案 1 :(得分:0)

编辑:使用我的完整测试代码和输入/输出进行更新。 我在Excel中运行它,但我刚刚在一个简单的ASP页面中确认了它...

Sub TestQuery()

    Dim oConn As New ADODB.Connection
    Dim oRS As New ADODB.Recordset
    Dim sPath
    Dim sSQL As String

    sSQL = " select [Item Number], [Name] from " & _
           " D22:E34 order by 1*right([Item Number],len([Item Number])-1) "

    sPath = ThisWorkbook.Path & "\" & ThisWorkbook.Name


    oConn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
               "DBQ=" & sPath & ";"

    Set oRS = oConn.Execute(sSQL)

    If Not oRS.EOF And Not oRS.BOF Then
        ToSheet Sheet1.Range("H22"), oRS
    Else
        MsgBox "No records found"
    End If

End Sub

Sub ToSheet(rng, rs)
    Dim f, i
    i = 0
    For Each f In rs.Fields
        rng.Offset(0, i).Value = f.Name
        i = i + 1
    Next f
    rng.Offset(1, 0).CopyFromRecordset rs
End Sub

enter image description here