Avatar billede moejensen Nybegynder
24. marts 2004 - 10:30 Der er 22 kommentarer og
2 løsninger

hjlæp til læs fra excel og for sætning

Jeg er ved at lave et modul til at udskrive indholdet af et excelregneark.  problemet er at jeg ikke på forhånd ved hvormange ark der er brugt, så jeg skal gennemløbe ark 1 til 50 for at tjekke om der er lagt data i dem. Hvis der er data i skal det udskrives.

Jeg har lavet følgende kode:

'Tjekker ark 1 til 50. Systemet her han håndtere 50 løb
    For t = 1 to 50
        xlsRS.Open "SELECT * from `"& t &"$A1:E15`", xlsConn, 1, 2
       
        'Springer de tomme ark over
        If xlsRS.EOF OR xlsRS.BOF Then Next
       
    %>
        <%
            xlsRS.movenext
            Do while not xlsRS.eof OR xlsRS.bof
        %>
            <tr>
                <td><%=xlsRS(0)%></td>
                <td><%=xlsRS(1)%></td>
                <td><%=xlsRS(2)%></td>
                <td><%=xlsRS(3)%></td>
                <td><%=xlsRS(4)%></td>
            </tr>
        <%
            xlsRS.movenext
            loop
        %>
        </table><br><br>
<%
    Next
%>

Problemet er at den ikke kan finde ud ag følgende:

'Springer de tomme ark over
If xlsRS.EOF OR xlsRS.BOF Then Next

---------------- Fejl ---------------------
Microsoft VBScript compilation error '800a041f'

Unexpected 'Next'

/Default.asp, line 25

If xlsRS.EOF OR xlsRS.BOF Then Next
-------------------------------^
Avatar billede medions Nybegynder
24. marts 2004 - 11:29 #1
Mener du ikke sådan her tror du?:


'Tjekker ark 1 til 50. Systemet her han håndtere 50 løb
    For t = 1 to 50
        xlsRS.Open "SELECT * from `"& t &"$A1:E15`", xlsConn, 1, 2
       
        'Springer de tomme ark over
        If Not (xlsRS.BOF And xlsRS.EOF) Then
       
    %>
        <%
            xlsRS.movenext
            Do while not xlsRS.eof OR xlsRS.bof
        %>
            <tr>
                <td><%=xlsRS(0)%></td>
                <td><%=xlsRS(1)%></td>
                <td><%=xlsRS(2)%></td>
                <td><%=xlsRS(3)%></td>
                <td><%=xlsRS(4)%></td>
            </tr>
        <%
            xlsRS.movenext
            loop
        %>
        </table><br><br>
<%
    End If
    Next
%>

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 11:59 #2
nu brokker den sig bare over den sidste Next:

-------------------- Fejl --------------------
Microsoft VBScript compilation error '800a041f'

Unexpected 'Next'

/Default.asp, line 57

Next
^
Avatar billede moejensen Nybegynder
24. marts 2004 - 12:00 #3
jeg skal vel også have en t = t + 1 in et sted for at springe frem til neste ark?
Avatar billede moejensen Nybegynder
24. marts 2004 - 12:05 #4
for løkken skulle gerne styre de enkelte ark, og xlsRS styre dataen der er i hvert ark. Så hvis der ikke er data på et ark, så skal der skiftes til et nyt ark.
Avatar billede medions Nybegynder
24. marts 2004 - 12:40 #5
Prøv sådan...:

'Tjekker ark 1 til 50. Systemet her han håndtere 50 løb
    For t = 1 to 50
        strSQL = "SELECT * from `"& t &"$A1:E15`"
    Set xlsRS = xlsConn.Execute(strSQL)
       
        'Springer de tomme ark over
        If Not (xlsRS.BOF And xlsRS.EOF) Then
            while Not xlsRS.EOF
        %>
            <tr>
                <td><%=xlsRS(0)%></td>
                <td><%=xlsRS(1)%></td>
                <td><%=xlsRS(2)%></td>
                <td><%=xlsRS(3)%></td>
                <td><%=xlsRS(4)%></td>
            </tr>
        <%
            xlsRS.MoveNext()
            Wend
    End If
        %>
        </table><br><br>
<%
    Next
%>

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 12:44 #6
så er det wend der er problemert:

Microsoft VBScript compilation error '800a0400'

Expected statement

/Default.asp, line 54

Wend
^
Avatar billede moejensen Nybegynder
24. marts 2004 - 12:47 #7
ville det være smartere at løbe hele xls dokumnetet i gennem til at starte med, og så smide ark navnet ind i et array der hvor arket indeholder data. Så behøvede jeg ikke længere nede at tjekke om arket var tomt?
Avatar billede moejensen Nybegynder
24. marts 2004 - 12:51 #8
eller det skal nok være en vector, hvis man kan lave det, jeg ved jo ikke på forhånd hvormange ark der er data i
Avatar billede medions Nybegynder
24. marts 2004 - 13:18 #9
Jeg tror ikke du sætter din kode ordentlig ind... Det som jeg har postet skulle efter sigende virke!

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 13:19 #10
Så nu tror jeg at jeg har fået det til at virke, men har nu følgende problem:

Nedenstående linje:

Set xlsRS = xlsConn.Execute("SELECT * from `"& t &"$A1:E15`")

Giver følgende fejl:

Microsoft JET Database Engine error '80040e37'

The Microsoft Jet database engine could not find the object '4$A1:E15'. Make sure the object exists and that you spell its name and the path name correctly.

/Default.asp, line 26

Har jeg nogen mulighed for at gribe den fejl. Hvis jeg eksempelvis indsætter:

On Error Resume Next

Så får jeg ingen fejl, men så får jeg 50 tomme rækker ud, og dem ville jeg jo gerne undgå???
Avatar billede medions Nybegynder
24. marts 2004 - 13:33 #11
Prøv at lad mig se din kode...

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 13:41 #12
så får du lige hele skidtet :-)

--------------------Kode start ----------------------------

<%
    'Laver de instanser der skal anvendes
    Set xlsConn = Server.CreateObject("ADODB.Connection")
    Set xlsRS = Server.CreateObject("ADODB.Recordset")
   
    'Inkludere database connection
%>
    <!--#include virtual="/includes/db.asp"-->
<%
    'On Error Resume Next
    'Antallet af ark der skal tjekkes i .xls filen
    intAntalArk = 50

    'Henter xls filnavnet ud fra databasen, for at sikre at det altid er den sidst uploadede fil der bliver anvendt
    set Rs = Conn.Execute("SELECT FileName FROM xlsliste WHERE id = 1;")
    strFileName = Rs(0)
   
    'Opbyger stien til xls filen
    strXLS = Server.MapPath("/xls/") &"\"& strFileName & ";"

    'Connecter til .xls filen   
    xlsConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strXLS & "Extended Properties=""Excel 8.0;HDR=No;"";"
   
    'Opbygger link index
    For t = 1 to intAntalArk
      Set xlsRS = xlsConn.Execute("SELECT * from `"& t &"$A1:E15`")
      If not (xlsRS.eof OR xlsRS.bof) Then
          Response.write("<a href='#"&t&"'>Løb "& t &": "& xlsRS(1) &"</a><br>")
      End if
    Next
   
    'Udskriver indhold af arkne i .xls filen
  For t = 1 to intAntalArk
      Set xlsRS = xlsConn.Execute("SELECT * from `"& t &"$A1:E15`")
       
      'Springer de tomme ark over
      If Not (xlsRS.BOF And xlsRS.EOF) Then
      %>
            <table border="0" width="600" cellpadding="0" style="font-family: verdana; font-size: 10pt;">
                <tr>
                    <td><a name="<%=t%>"><b>Løb <%=t%></b></a></td>
                    <td colspan="4"><b><%=xlsRS(1)%></b></td>
                </tr>
                <tr>
                    <td>Bane</td>
                    <td>Navn</td>
                    <td>klub</td>
                    <td>Tid</td>
                    <td>Tid</td>
                </tr>
            <%
                xlsRS.movenext
                Do while not xlsRS.eof OR xlsRS.bof
            %>
                <tr>
                    <td width="50"><%=xlsRS(0)%></td>
                    <td width="300"><%=xlsRS(1)%></td>
                    <td width="200"><%=xlsRS(2)%></td>
                    <td width="75"><%=xlsRS(3)%></td>
                    <td width="75"><%=xlsRS(4)%></td>
                </tr>
            <%
            xlsRS.MoveNext()
            loop
            %>
            </table><br><br>
        <%
        End if
    Next
%>

<%
    'Cleanup
    xlsRS.Close
    xlsConn.Close
    Conn.close
    Set conn = Nothing
    Set rs = Nothing
    Set slxRS = Nothing
    Set xlsConn = Nothing
%>

----------------------- Kode slut --------------------------
Avatar billede moejensen Nybegynder
24. marts 2004 - 13:43 #13
Jeg har prøvet at oprette alle 50 ark i excel filen, og så bare lade nogle af arkne være tomme, men så brokker den sig stadig, selvom jeg synes jeg tjekker for om arket er tomt:

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/Default.asp, line 28

------------------ kode omkring linje 28 ------------------
'Opbygger link index
    For t = 1 to intAntalArk
      Set xlsRS = xlsConn.Execute("SELECT * from `"& t &"$A1:E15`")
      If not (xlsRS.eof OR xlsRS.bof) Then
          Response.write("<a href='#"&t&"'>Løb "& t &": "& xlsRS(1) &"</a><br>")
      End if
    Next
Avatar billede medions Nybegynder
24. marts 2004 - 13:48 #14
Får du en fejl hvis du skriver:

Set xlsRS = xlsConn.Execute("SELECT * from `1$A1:E15`")

?

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 13:55 #15
nej det virker fint, så længe der er et ark der hedder det der bliver skrevet i SQL sætningen, så virker det fint.
Avatar billede medions Nybegynder
24. marts 2004 - 13:56 #16
Linje 28, hvad er det for en linje?

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 13:59 #17
Response.write("<a href='#"&t&"'>Løb "& t &": "& xlsRS(1) &"</a><br>")
Avatar billede moejensen Nybegynder
24. marts 2004 - 14:00 #18
det undre mig bare for linjen lige ovenover:
If not (xlsRS.eof OR xlsRS.bof) Then

skulle vel gerne gøre at den springer over, vhis der ikke er nogle data
Avatar billede medions Nybegynder
24. marts 2004 - 14:10 #19
If not (xlsRS.eof OR xlsRS.bof) Then = Hvis ikke den er EOF (End Of File) eller BOF (Begin Of File)
Det vil sige, hvis recorden ikke findes, så skal den ikke gøre noget, hvis den findes udfører den statementsne i If...Then.

Grunden til at der kommer en fejl i din Response.Write() er at der ikke er en xlsRS(1)

Prøv evt. at skriv xlsRS(0).

Hvis feltet i dit excell ark ikke findes, vil den melde en fejl, jeg mener ikke man kan lave en forespørgsel på om et felt findes :-/

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 14:16 #20
feltet findes, men er tomt.... eller siger man at et felt ikke er oprettet, hvis det er tomt i excel?
Avatar billede medions Nybegynder
24. marts 2004 - 14:17 #21
Det er det jeg frygter... -dog må jeg indrømme jeg ikke kender særlig meget til Excell, men det kunne godt tyde på det :-(

//>Rune
Avatar billede medions Nybegynder
24. marts 2004 - 14:18 #22
Prøv evt. at skriv UBound(xlsRs) og se hvad du får af resultat, hvis du kan gøre det kan du jo sige at hvis din UBOUND er under 1 så kan det kun være 0, osv.

//>Rune
Avatar billede moejensen Nybegynder
24. marts 2004 - 15:31 #23
Jeg tror ikke jeg kommer det meget nærmere, så længe jeg bruger On Error Resume Next, så går det som det skal. Jeg må jo erkende at excel ikke er det samme som Access

Rune, du skal have tak for din hjælp og sparring.
Avatar billede medions Nybegynder
24. marts 2004 - 15:34 #24
Anytime...
Thx 4 Poinz

//>Rune
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester