Visa Exceldata på webben via ASP
Förord
Att använda sig av data som finns lagrat i någon form av register eller databas är oftast det man börjar intressera sig av när man upptäcker att man vill katalogisera saker. Personligen började jag intressera mig av detta för ca 10 år sedan då jag skrev min första relationsdatabas för Novell Server 2.15. Vi hade stora mängder data på det företaget och då kände jag att det var dags att skriva något som underlättade arbetet. Idag finns det färdiga databasmotorer som är så överlägsna de gamla sätten att man inte ens behöver fundera på hur man skall lagra sitt data, men ibland kanske man inte behöver all denna kraft, ett Excel-ark kan räcka en bra bit på vägen.Jag tänkte visa dig hur man kan placera excel-ark på exempelvis din lokala server för att sedan visa upp informationen på ett sätt utan att för den delen använda sig av Microsoft Excel. Med ASP och ADO kan du tillverka ett enkelt system för dig eller företaget..
Först måste du börja med att ha eller skapa ett Excel-ark som du skall använda dig av. Det finns egentligen bara två viktiga punkter för att lyckas och det ena är att se till att det finns rubriker på varje kolumn, och sist men inte minst - arket får inte vara skrivskyddat. Vi börjar med att skapa oss ett enkelt excel-ark innehållande lite information. Ett exempel på detta kan vara:
Ovan ser du ett vanligt Excelark som vi kan använda oss av. Jag har även skrivit in datum för det brukar oftast ställa till lite problem, så jag tänkte underlätta lite för er att se hur allting reagerar.. Vi döper även detta blad1 till genom att högerklicka på Blad 1 och välja "Byt namn" - döp istället Blad1 till Adress. När du ändå går det - döp även om Blad2 till Statistik.
Vi skall nämligen skapa ytterligare ett ark för jag tänkte visa lite mer finnesser när jag ändå håller på. Det är ju inte så ovanligt att man lagrar viss information i en tabell och annan information i en annan tabell - på detta sätt skapar vi oss en relation (relationsdatabas).
På sidan som vi kallar statistik - fyller vi med exakt samma förnamn men vi lägger till en kolumn som heter tips - i denna kolumnen skriver vi några siffror.
Detta är flik2 som vi döpt till Statistik och nu lägger vi till fältet tips som vi skall använda oss av. Tänk på att du i detta exempel måste ha samma förnamn i de båda flikarna/bladen för att denna demonstration skall fungera ordentligt.
Spara ditt excelark på exempelvis katalogen c:\inetpub\wwwroot\aspxls med namnet bok1.xls. Därefter är det viktigt att du gör följande. I menyn Verktyg finns ett alternativ som heter Dela arbetsbok - välj det och markera Tillåt redigering av flera användare samtidigt.
Tips! Detta exempel visar inte hur man kan uppdatera excelarket från webben, men för att förbereda det så se även till att IUSR_xxx får rättigheter att skriva till denna excelfil, så slipper du det problemet senare om du skall implementera den funktionen.
Nu har du sparat excelarket och det är dags att börja titta på anslutningssträngen för att i ASP kunna komma åt detta arket. Genom att sätta upp connectionsträngen och peka ut din excelfil så öppnar vi en anslutning emot databasen (som i detta fall är ett excelark).
Vi instansierar ADO, därefter bygger vi upp connectionsträngen och pekar ut vår Excelfil. I detta exemplet ser du även att jag anger vilken Excelversion som denna avser. Om du kör Excel 97 skall du skriva Excel 5.0. HDR informerar att på det/de bladen som vi kommer att använda finns en rubrik på varje kolumn som blir våra fältnamn.
Obs! Om du har problem med programmet senare så kontrollera att du verkligen namngett alla kolumner - ingen får vara blank.
För att kontrollera hur din connectionsträng ser ut efter att du anslutit till Excel kan du skriva:
Response.Write con.ConnectionString
Det bör även tilläggas att du bör använda dig av en relativ sökväg och då skall du istället skriva:
"Data Source = " & Server.MapPath("bok1.xls") & ";" & _
Om du kör ditt asp-program nu skall inget felmeddelande komma upp - det kan vara bra att testa innan du fortsätter. Fungerar allt som det skall så fortsätter vi med att försöka hämta ut alla för och efternamn nu från tabellen adress:
Ovan ser du att vi skriver lite annorlunda än du tidigare kanske sett när vi refererar till en tabell - du skall innesluta tabellnamnet med brackets [] och efter tabellnamnet skriver du ett $ tecken. Om du inte gör så - blir det fel. Om allting fungerar som det skall så skrivs nu förnamn och efternamn ut på alla de poster som finns.
Du kan också bestämma att endast använda dig av det data som finns i exempelvis cellerna A1:B5, vilket innebär att sista raden i excelarket inte kommer med:
Här uppger vi på samma sätt tabellens namn inneslutet av brackets - men med tillägget vilka celler som skall användas. Tänk på att om du begränsar informationen så, kan du kanske tro att alla celler finns med i bredd, men här säger du utryckligen att endast kolumn A och B skall tas med.
På samma sätt som tidigare exempel kan du hämta information från vilken flik/tabell du vill - det är bara att byta namn. Detta exemplet visar hur du hämtar fältet tips från tabellen/fliken statiskt:
Samma sak gäller här, inneslut tabellen med brackets och avsluta med dollar-tecken.
Nu tror du att detta kan bli svårt, men det är faktiskt lika enkelt som du skriver en vanlig SQL-query för att hämta information från två tabeller och kopplar ihop dessa med en join. Mitt exempel hämtar ut förnamn från tabellen adress samt fältet tips från tabellen statistik:
Som du ser här så används de båda tabellerna, jag använder ett s.k. alias för att enklare skriva min sql-sats. Frågan är således: hämta alla förnamn från tabellen adress och alla tips från tabellen statistik där förnamn i tabell adress matchar förnamn i tabellen statistik.
Avslutningsvis skall vi städa upp lite efter oss genom att stänga våra öppna objekt:
Nu har du fått en inblick i hur man kan använda en excelfil som ligger på webbservern och presentera dess innehåll via exempelvis ert intranet eller kanske från din privata hemsida. Detta innefattar också möjligheten att någon kan använda Excel för att förändra informationen och det syns direkt på din site. Prova gärna att ha Excel igång och ändra samtidigt som du uppdaterar din webbläsare.
Nästa exempel i denna serie angående Excel kommer visa hur du gör en stilig telefonlista som du kan presentera på webben med samma teknik som du precis lärt dig här, jag tänkte avslutningsvis även visa hur du kan redigera excelarket via webben.
Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna artikel.
/Pelle Johansson
Skapa din exceldatabas
Först måste du börja med att ha eller skapa ett Excel-ark som du skall använda dig av. Det finns egentligen bara två viktiga punkter för att lyckas och det ena är att se till att det finns rubriker på varje kolumn, och sist men inte minst - arket får inte vara skrivskyddat. Vi börjar med att skapa oss ett enkelt excel-ark innehållande lite information. Ett exempel på detta kan vara:Ovan ser du ett vanligt Excelark som vi kan använda oss av. Jag har även skrivit in datum för det brukar oftast ställa till lite problem, så jag tänkte underlätta lite för er att se hur allting reagerar.. Vi döper även detta blad1 till genom att högerklicka på Blad 1 och välja "Byt namn" - döp istället Blad1 till Adress. När du ändå går det - döp även om Blad2 till Statistik.
Vi skall nämligen skapa ytterligare ett ark för jag tänkte visa lite mer finnesser när jag ändå håller på. Det är ju inte så ovanligt att man lagrar viss information i en tabell och annan information i en annan tabell - på detta sätt skapar vi oss en relation (relationsdatabas).
På sidan som vi kallar statistik - fyller vi med exakt samma förnamn men vi lägger till en kolumn som heter tips - i denna kolumnen skriver vi några siffror.
Detta är flik2 som vi döpt till Statistik och nu lägger vi till fältet tips som vi skall använda oss av. Tänk på att du i detta exempel måste ha samma förnamn i de båda flikarna/bladen för att denna demonstration skall fungera ordentligt.
Gör Excelfilen körbar för flera samtidiga användare
Spara ditt excelark på exempelvis katalogen c:\inetpub\wwwroot\aspxls med namnet bok1.xls. Därefter är det viktigt att du gör följande. I menyn Verktyg finns ett alternativ som heter Dela arbetsbok - välj det och markera Tillåt redigering av flera användare samtidigt. Tips! Detta exempel visar inte hur man kan uppdatera excelarket från webben, men för att förbereda det så se även till att IUSR_xxx får rättigheter att skriva till denna excelfil, så slipper du det problemet senare om du skall implementera den funktionen.
Testa att ansluta till excelarket
Nu har du sparat excelarket och det är dags att börja titta på anslutningssträngen för att i ASP kunna komma åt detta arket. Genom att sätta upp connectionsträngen och peka ut din excelfil så öppnar vi en anslutning emot databasen (som i detta fall är ett excelark).Vi instansierar ADO, därefter bygger vi upp connectionsträngen och pekar ut vår Excelfil. I detta exemplet ser du även att jag anger vilken Excelversion som denna avser. Om du kör Excel 97 skall du skriva Excel 5.0. HDR informerar att på det/de bladen som vi kommer att använda finns en rubrik på varje kolumn som blir våra fältnamn.
<%
set con=server.CreateObject("adodb.connection")
' För Excel 2000, ange Excel 8.0
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:\inetpub\wwwroot\asp\bok1.xls;" & _
"Extended Properties=""Excel 8.0;HDR=Yes;"";"
con.open ConnStr
%>
Obs! Om du har problem med programmet senare så kontrollera att du verkligen namngett alla kolumner - ingen får vara blank.
För att kontrollera hur din connectionsträng ser ut efter att du anslutit till Excel kan du skriva:
Response.Write con.ConnectionString
Det bör även tilläggas att du bör använda dig av en relativ sökväg och då skall du istället skriva:
"Data Source = " & Server.MapPath("bok1.xls") & ";" & _
Hämta ut all data från en tabell
Om du kör ditt asp-program nu skall inget felmeddelande komma upp - det kan vara bra att testa innan du fortsätter. Fungerar allt som det skall så fortsätter vi med att försöka hämta ut alla för och efternamn nu från tabellen adress:
<%
Set Rst=Con.Execute("select Förnamn, EfterNamn from [adress$]")
' Loopar igenom resultatet
Do While Not Rst.Eof
Response.Write Rst("Förnamn") & " " & Rst("Efternamn") & "
"
Rst.MoveNext
Loop
Rst.Close
%>
Ovan ser du att vi skriver lite annorlunda än du tidigare kanske sett när vi refererar till en tabell - du skall innesluta tabellnamnet med brackets [] och efter tabellnamnet skriver du ett $ tecken. Om du inte gör så - blir det fel. Om allting fungerar som det skall så skrivs nu förnamn och efternamn ut på alla de poster som finns.
Hämta ut data från vissa celler
Du kan också bestämma att endast använda dig av det data som finns i exempelvis cellerna A1:B5, vilket innebär att sista raden i excelarket inte kommer med:
<%
set rst=con.Execute("select Förnamn, EfterNamn from [adress$A1:B5]")
' loopa igenom resultatet
Do While Not rst.eof
Response.Write Rst("Förnamn") & " " & Rst("Efternamn") & "
"
rst.MoveNext
Loop
rst.Close
%>
Här uppger vi på samma sätt tabellens namn inneslutet av brackets - men med tillägget vilka celler som skall användas. Tänk på att om du begränsar informationen så, kan du kanske tro att alla celler finns med i bredd, men här säger du utryckligen att endast kolumn A och B skall tas med.
Hämta data från tabell statistik
På samma sätt som tidigare exempel kan du hämta information från vilken flik/tabell du vill - det är bara att byta namn. Detta exemplet visar hur du hämtar fältet tips från tabellen/fliken statiskt:
<%
Set Rst=Con.Execute("select Tips from [statistik$]")
' Loopar igenom resultatet
Do While Not Rst.Eof
Response.Write Rst("Tips") & "
"
Rst.MoveNext
Loop
Rst.Close
%>
Samma sak gäller här, inneslut tabellen med brackets och avsluta med dollar-tecken.
Hämta data från båda tabellerna
Nu tror du att detta kan bli svårt, men det är faktiskt lika enkelt som du skriver en vanlig SQL-query för att hämta information från två tabeller och kopplar ihop dessa med en join. Mitt exempel hämtar ut förnamn från tabellen adress samt fältet tips från tabellen statistik:
<%
set rst=con.execute("select a.förnamn, s.tips " & _
"from [adress$] a, [statistik$] s " & _
"where a.förnamn = s.förnamn")
' loopa igenom resultatet
do while not rst.eof
response.write rst(0) & "-" & rst(1) & "
"
rst.movenext
loop
rst.close
%>
Som du ser här så används de båda tabellerna, jag använder ett s.k. alias för att enklare skriva min sql-sats. Frågan är således: hämta alla förnamn från tabellen adress och alla tips från tabellen statistik där förnamn i tabell adress matchar förnamn i tabellen statistik.
Avslutningsvis skall vi städa upp lite efter oss genom att stänga våra öppna objekt:
<%
set rst=nothing
set con=nothing
%>
Nu har du fått en inblick i hur man kan använda en excelfil som ligger på webbservern och presentera dess innehåll via exempelvis ert intranet eller kanske från din privata hemsida. Detta innefattar också möjligheten att någon kan använda Excel för att förändra informationen och det syns direkt på din site. Prova gärna att ha Excel igång och ändra samtidigt som du uppdaterar din webbläsare.
Nästa exempel i denna serie angående Excel kommer visa hur du gör en stilig telefonlista som du kan presentera på webben med samma teknik som du precis lärt dig här, jag tänkte avslutningsvis även visa hur du kan redigera excelarket via webben.
Var denna artikeln användbar?
Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna artikel./Pelle Johansson
0 Kommentarer