Avatar billede chrisrj Forsker
16. oktober 2002 - 20:03 Der er 25 kommentarer og
1 løsning

søge i excel

Jeg har et excel dokument "test.xls" med nogle kolonner bla. "kunde" og "forecast".

På min ASP side har jeg en form med en select box, hvor jeg har lagt alle kunderne ind. Den del virker fint.

Men, når jeg så skal lave en "vis" knap, er jeg lost!!

Jeg kan godt lave det til access, men til excel??
Avatar billede eagleeye Praktikant
16. oktober 2002 - 20:10 #1
I din excel fil skal øverste række indeholde navnet på feltet.

        A                        B
1    Fornavn            Efternavn
2    Anders              Hansen
3    Erik                  Jørgensen

Du skal markere det område som skal kunne læses fra ASP. Det markede område skal så tildeles et navn.
Marker områder A1:B3, gå op i menuen Indsæt -> Navn .. -> Definer… 
Definer et navn eks.vis myRange.

Generelt undgå æøå i feltnavne og det Defineret navn

Så kan man lave en SQL som denne:
"SELECT * from myRange"

Elternativt skal kan man angive range i selve SQL sætnignen:
"SELECT * from `arknavn$A1:B3`"
Avatar billede eagleeye Praktikant
16. oktober 2002 - 20:14 #2
eks på koden kunne være:


<%
set oConn = Server.CreateObject("ADODB.Connection")
set oRs = Server.CreateObject("ADODB.recordset")

' Open a connection to the Excel spreadsheet
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source="&Server.MapPath("fil.xls")&";" & _
          "Extended Properties=""Excel 8.0;HDR=Yes;"";"

sql = "SELECT * from myRange WHERE kunde='" & Request.Form("valgt_kunde") & "'"

' Open a recordset containing the worksheet data.
oRS.Open sql,oConn,1,3


while not(oRS.EOF OR oRS.BOF)
  Response.Write oRS("kunde") & " " & oRS("forecast") & "<br>"
  oRS.MoveNext
Wend
%>
Avatar billede chrisrj Forsker
16. oktober 2002 - 21:07 #3
Jeg har nu denne kode:

<% vis = request.form("mode")
%>
<%

set oConn = Server.CreateObject("ADODB.Connection")
set oRs = Server.CreateObject("ADODB.recordset")
set oRse = Server.CreateObject("ADODB.recordset")

' Open a connection to the Excel spreadsheet
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source="&Server.MapPath("test.xls")&";" & _
          "Extended Properties=""Excel 8.0;HDR=Yes;"";"

if vis <> "vis" then
%>
<form action="excel.asp" method=post>
<table border="0" width="382">
    <tr>
<select size="1" name="soge">
<%
' Create a command object and set its ActiveConnection
' This SQL statement selects a cell range in the "Expenses"  worksheet.
'    oCmd.CommandText = "SELECT * from `Expenses$A2:C4`"

' This SQL statement selects a named cell range defined in the workbook.
sql = "SELECT * from myRange where karen='dunker'"

' Open a recordset containing the worksheet data.
oRS.Open sql,oConn,1,3

sqle = "SELECT * from kunde"

' Open a recordset containing the worksheet data.
oRSe.Open sqle,oConn,1,3


do while not oRSe.eof
If IsNull(oRSe("kunde")) Then
else
response.write "<option value='"&oRSe("kunde")&"'>"&oRSe("kunde")&"</option>"
end if
oRSe.movenext
loop

response.write "</select><input type=hidden name='mode' value='vis'><input type=submit value='Søg!!'>"

else
soge = request.form("soge")
sql = "SELECT * from totest where kunde='"&soge&"'"

' Open a recordset containing the worksheet data.
oRS.Open sql,oConn,1,3

'do while not ors.eof
response.write "dette er " & ors("kunde") & " dette er fakt_plan " & ors("test")

'ors.movenext
'loop
end if

den kommer med en fejl i linie 69:
"Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal"

linie 69:
response.write "dette er " & ors("kunde") & " dette er fakt_plan " & ors("test")

test er kolonnen lige ved siden af kunde kolonnen. de er lige lange hvis det har betydning.

Med hvad er der galt??
Avatar billede chrisrj Forsker
16. oktober 2002 - 21:12 #4
har fundet ud af det... den skulle ikke hedde test...
Avatar billede chrisrj Forsker
16. oktober 2002 - 23:36 #5
Hallo ?? Hænger du stadig på?? ;)

Hvis man nu vil tilgå et andet ark i et excel dokument, hvordan laver man det??
Avatar billede eagleeye Praktikant
16. oktober 2002 - 23:46 #6
du kan enten på den anden side lave et range og give det et ny navn eller du kan i SQL lave det sådan her: navnet på arket$område:

oRS.Open "SELECT * from `ark2$A1:B2`", oConn, 1, 2
Avatar billede chrisrj Forsker
17. oktober 2002 - 00:09 #7
ok, det vil sige at man "bare" opfatter ark som tabeller i access?
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:15 #8
Den opfatter dette `ark2$A1:B2` som en tabel i access de svare til man har i tabel med 2 kolonne og 2 recors i.

Hvis du bare skriver  `ark2$`  så hendter den alle kolonne med data i fra ark2 og alle records så det svare til at hendte fra en tabel.
Avatar billede chrisrj Forsker
17. oktober 2002 - 00:17 #9
Det er godt nok noget uoverskueligt... :(
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:17 #10
Altså hvis du skrive:
oRS.Open "SELECT * from `ark2$`", oConn, 1, 2

Ville det for access hvis tabelle hed ark2 være:
oRS.Open "SELECT * from ark2", oConn, 1, 2
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:26 #11
Ja lidt.. :)  og en anden ting..


hvis du har dette i ark2:

      A      B
1    kolA  kolB
2    a2    b2
3    a3    b3


Og du laver connection med HDR=No    og laver denne SQL:
oRS.Open "SELECT * from `ark2$`", oConn, 1, 2

Så skal du udskrive sådan her:
while (not (oRS.EOF OR oRS.BOF)) AND (i <= 10)
  Response.Write oRS(0) & " " & oRS(1) & "<br>"
  oRS.MoveNext
Wend

og out puttet bliver:

kolA  kolB
a2  b2
a3  b3


Hvis du så rette, og du laver connection med HDR=Yes og laver samme SQL:
oRS.Open "SELECT * from `ark2$`", oConn, 1, 2

Så kan du udskrive sådan her:
while (not (oRS.EOF OR oRS.BOF)) AND (i <= 10)
  Response.Write oRS(0) & " " & oRS(1) & "<br>"
  oRS.MoveNext
Wend

Eller du kan bruge kolonnenavne lige som med Access

while (not (oRS.EOF OR oRS.BOF)) AND (i <= 10)
  Response.Write oRS("kolA") & " " & oRS("kolB") & "<br>"
  oRS.MoveNext
Wend

og out puttet bliver:

a2  b2
a3  b3


Så når man skriver HDR=Yes så bliver første kolonne regnet som kolonne navne..
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:27 #12
se bare bort for AND(i<=10) i while linierne...
Avatar billede chrisrj Forsker
17. oktober 2002 - 00:31 #13
Der faldt jeg lige ned af stolen...
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:34 #14
;)
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:40 #15
Jeg har lave en lille test side til mig selv mht HDR=No/Yes og lavet et exccel ark som indeholde de 3 rækker nævnt i sidte kommentar og koden er her:


'Prøv at rette HDR=Yes -> HDR=No og omvendt
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Server.MapPath("dfil.xls") & ";" & _
          "Extended Properties=""Excel 8.0;HDR=Yes;"";"

Set oRS = Server.CreateObject("ADODB.Recordset")
oRS.Open "SELECT * from `ark2$`", oConn, 1, 2
while not (oRS.EOF OR oRS.BOF)
  'Denne linie virker ved HDR=No samt HDR=Yes dog er første række ikke med
  'Response.Write "<br>" & oRS(0) & " " & oRS(1)

  'Denne linie virker kun ved HDR=Yes
  Response.Write "<br>" & oRS("kolA") & " " & oRS("kolA")

  oRS.MoveNext
Wend
Avatar billede eagleeye Praktikant
17. oktober 2002 - 00:41 #16
Godnat og sov godt :)
Avatar billede chrisrj Forsker
17. oktober 2002 - 01:21 #17
Tak, jeg kigger på det imorgen.... zzzz...zzzz
Avatar billede chrisrj Forsker
17. oktober 2002 - 11:56 #18
Så er jeg tilbage!! ;)

Hvis man forstiller sig at man har et budget-ark, der ser således ud:

hele
          januar                    februar
kunder  forecast  budget      forecast  budget
data      data      data          data    data
...      ....      ....          ....    ....
...      ....      ....          ....    ....




hvordan kan man lave en SELECT ala: "select kunder,forecast,budget from hele where kunder=kunde1 and maned=januar"??
Avatar billede chrisrj Forsker
17. oktober 2002 - 11:57 #19
Det ser ud af ht, men jeg håber du kan læse/forstå det...:)
Avatar billede chrisrj Forsker
17. oktober 2002 - 13:40 #20
Hvaa' er du der stadig eagleeye??
Avatar billede eagleeye Praktikant
17. oktober 2002 - 18:59 #21
januar / februar er det sheets/ark?
Avatar billede chrisrj Forsker
17. oktober 2002 - 19:00 #22
nej, det er områder på arket....
Avatar billede chrisrj Forsker
17. oktober 2002 - 19:05 #23
Det betyder helt vildt meget for mig.

Hvis du kan lave det får du 100 points extra!! :)
Avatar billede chrisrj Forsker
17. oktober 2002 - 20:47 #24
De extra 100 point gælder også alle andre!!!

Jeg SKAL bruge det imorgen. :(
Avatar billede chrisrj Forsker
17. oktober 2002 - 21:02 #25
Jeg lukker dette spørgsmål og opretter et nyt, da jeg har fundet svaret på problemet.
Men, som altid, er der kommet et nyt problem....
Avatar billede chrisrj Forsker
17. oktober 2002 - 21:29 #26
Der fortsættes her: http://www.eksperten.dk/spm/271666 ....
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