Avatar billede stig3 Mester
24. september 2001 - 22:09 Der er 32 kommentarer og
1 løsning

Excel charts

Jeg har fundet ud af at man kan overføre værdier fra html-tables til excel på to måder:

Ændre MIME typen:
Response.ContentType = \"application/vnd.ms-excel\"

Eller oprette et et object
Set ExcelSheet = CreateObject(\"Excel.Sheet\")

Jeg tror umiddelbart at den første er at foretrække, men jeg kunne godt tænke mig at tilføje grafer til exceldokumentet. Hvordan gør man det og kan det kun lade sig gøre ved een af de to metoder ?
Avatar billede mgade Nybegynder
24. september 2001 - 23:52 #1
Well:
http://www.asp101.com/puzzles/puzzle8.asp

Et af de eksempler laver Excel grafer efter alle kunstens regler på den nr. 2 metode. Metoden forudsætter Excel på serveren, men så er der også hul igennem til al Excels grafik hurlumhej!
Avatar billede stig3 Mester
25. september 2001 - 09:11 #2
Lige i røven, som faxe ville have sagt det.

Det ærgrer mig at det ikke var et forslag til den første metode. Mon ikke det også kan lade sig gøre med den ?

Jeg kunne nemlig godt tænke mig at det foregik på klient-siden, så webserveren ikke blev belastet så meget.
Avatar billede mgade Nybegynder
25. september 2001 - 09:21 #3
Tvivler. Det skulle så være noget med at sende en makro med og lade folk eksekvere den på de data der er sendt i html-tabellen - meeeen det lyder som om den der virus-ting har bremset den slags lidt!? (Hvis det altså nogensinde har været muligt den vej rundt)
Avatar billede stig3 Mester
25. september 2001 - 09:23 #4
Hovsa....

Jeg kan ikke få det til at virke. Den melder \"Et objekt er obligatorisk: \'MyExcelChart\'\" og jeg HAR excel installeret.

<%@ LANGUAGE=\"VBSCRIPT\" %>
<%
\' Create Object
Set MyExcelChart = CreateObject(\"Excel.Sheet\")

\' show or dont show excel to user, TRUE or FALSE
MyExcelChart.Application.Visible = True \'<-- Fejl i denne linie

\' populate the cells
MyExcelChart.ActiveSheet.Range(\"B2:k2\").Value = Array(\"Week1\", \"Week2\", \"Week3\", \"Week4\", \"Week5\", \"Week6\", \"Week7\", \"Week8\", \"Week9\", \"Week10\")
MyExcelChart.ActiveSheet.Range(\"B3:k3\").Value = Array(\"67\", \"87\", \"5\", \"9\", \"7\", \"45\", \"45\", \"54\", \"54\", \"10\")
MyExcelChart.ActiveSheet.Range(\"B4:k4\").Value = Array(\"10\", \"10\", \"8\", \"27\", \"33\", \"37\", \"50\", \"54\", \"10\", \"10\")
MyExcelChart.ActiveSheet.Range(\"B5:k5\").Value = Array(\"23\", \"3\", \"86\", \"64\", \"60\", \"18\", \"5\", \"1\", \"36\", \"80\")
MyExcelChart.ActiveSheet.Cells(3,1).Value=\"Internet Explorer\"
MyExcelChart.ActiveSheet.Cells(4,1).Value=\"Netscape\"
MyExcelChart.ActiveSheet.Cells(5,1).Value=\"Other\"

\' Select the contents that need to be in the chart
MyExcelChart.ActiveSheet.Range(\"b2:k5\").Select
   
\' Add the chart
MyExcelChart.Charts.Add
\' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show datatable, show legend
MyExcelChart.activechart.ChartType = 97
MyExcelChart.activechart.BarShape =3
MyExcelChart.activechart.HasTitle = True
MyExcelChart.activechart.ChartTitle.Text = \"Visitors log for each week shown in browsers percentage\"
MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets(\"Sheet1\").Range(\"A1:k5\"),1
MyExcelChart.activechart.Location 1
MyExcelChart.activechart.HasDataTable = True
MyExcelChart.activechart.DataTable.ShowLegendKey = True


\' Save the the excelsheet to chart.xls
MyExcelChart.SaveAs \"c:\\chart.xls\"


%>
<HTML>
<HEAD>
<TITLE>MyExcelChart</TITLE>
</HEAD>
<BODY>
</BODY>
</HTML>
Avatar billede mgade Nybegynder
25. september 2001 - 09:31 #5
Yeah - jeg rodede også en del med den :-)
Vær opmærksom på dansk/engelsk versionsproblematik.

Kigger lige efter hvad jeg i grunden selv har skrevet.
Avatar billede stig3 Mester
25. september 2001 - 09:37 #6
Jeg fandt ud af at hvis jeg har excel åben i forvejen virker det. Men det skulle helst ikke være nødvendigt.
Avatar billede mgade Nybegynder
25. september 2001 - 09:37 #7
Bad luck er afskåret fra serveren pt - stay tuned og giv mig en reminder hvis det tager for lang tid!
Avatar billede mgade Nybegynder
25. september 2001 - 09:52 #8
Hmm. Næh. Og det ringer ikke lige nogen klokker. Men jeg havde mega problemer med dialogbokse der poppede op og som kun kunne ses på serveren.

Men check mit gamle svar i http://www.eksperten.dk/spm/32432 - der er lidt bidrag til syntaksen (Og så skide være med at jeg ikke kan komme i kontakt med serveren.. Det er ekspertens sande værdi - den ultimative backup he he)
Avatar billede stig3 Mester
25. september 2001 - 10:17 #9
Backup, ja

Men jeg har nu også været ude for at eksperten har været nede på ubelejlige tidspunkter (Dte er det jo altid :-)

Udover det med at man skal have excel åben kan jeg heller ikke undgå at gemme exceldokumentet først. Det skulle gerne være sådan at man kan redigere videre i exceldokumentet og så er det lidt klodset at man skal gemme det først og åbne det igen for at redigere.

Jeg går ud fra at:
objExcelApp.DisplayAlerts = False

...skulle slå bla. gem fra ?

Men det virker ikke
(Jeg har selvfølgelig udkommenteret MyExcelChart.SaveAs \"c:\\chart.xls\")

Avatar billede stig3 Mester
25. september 2001 - 10:18 #10
Dte = det
Avatar billede mgade Nybegynder
25. september 2001 - 10:55 #11
Nu var det ikke Eksperten der var nede - men bare adgangen til min egen server der var shaky :-)

DisplayAlerts slår dialogbokse fra og til, man kan stadig gemme, men den kommer ikke og spørger efter om man nu er sikker og der ligger en fil atf samme navn etc. Det kan brugeren jo ikke se over Http. Brugeren ser bare at systemet går i sort fordi Excel på serveren mangler et tastetryk.

Hvis brugeren skal redigere i exceldokumentet er du i deep shit :-)

Check eksempelvis: http://www2.dfhpilot.dk/wwwopgaver/2512/info.asp?opgave=anna der er et Excel-ark. Så det kan lade sig gøre, men det tager laaaang tid! Jeg har gjort det at jeg opbevarer brugerens indtastninger i en access-base.

Du burde kunne undgå at gemme dokumentet.
Avatar billede stig3 Mester
25. september 2001 - 11:40 #12
2 ting:

1: Den vil stadig ikke køre hvis excel ikke er åben fra starten

2: Hvorfor kan man ikke redigere i det excelark man laver ?

Kan man bruge det som noget klient-side vbscript ?

Selvfølgelig forudsat at brugeren har excel installeret.


(Der skal nok komme lidt flere pts i puljen til sidst)
Avatar billede stig3 Mester
25. september 2001 - 11:41 #13
hmm

Det var vist 3 ting :-)
Avatar billede mgade Nybegynder
25. september 2001 - 11:55 #14
1: Wierd.. Så læge jeg ikke kan se hvad jeg selv har præcist har gjort er det omsonst at gætte.

2: Fordi MS Internet Explorer ikke er Excel (og hvis Exploreren kan åbne arket lokalt hos brugeren, ved at starte Excel lokalt, så kan brugeren i hvert fald ikke gemme det redigerede ark på serveren uden en særskilt upload-procedure.

3 (Kan man bruge det som noget klient-side vbscript): Hvad mener du? Prøv at beskrive din ønskesituation/arbejdsgang.
Avatar billede stig3 Mester
25. september 2001 - 12:13 #15
1: Vi venter

2: Brugeren skulle gerne gemme lokalt på sin egen computer.

3: Arbejdsgang:
1. der laves en html-tabel som brugeren ser.
2. Brugeren trykker vis-excel
3. tabellen vises i excel med en tilhørende graf.
4. Brugeren redigerer excel dokumentet
5. Brugeren gemmer.

1-5 ville jeg helst have kørt på klient-siden
Avatar billede mgade Nybegynder
25. september 2001 - 13:03 #16
Nååå.. :-)

Jamen hvis der skal gemmes på brugerens *egen* PC - og vedkommende først har fået arket op på sin skærm er der jo ikke noget problem.

Jeg tror jeg ville satse på at udvide arbejdsgangen mellem 2 og 3 sådan:

2.1: tabellen gemmes i en præfabrikeret excelfil i foruddefinerede/bestemte celler. Det kan klares med odbc-driveren - men du er jo så desværre nødt til at acceptere at der skal skrives i Excel-filen. Derfor skal du fmtl. opfinde en \"lock\" mekanisme (evt. application.lock??)
2.2: når data er gemt redirectes til en side der henter Excel-arket - hvilket med den korrekte MIME-type skulle starte Excel hos brugeren. Hvis du så har sørget for en automatisk beregning og visning af grafen er du hjemme.

På denne måde undgår du også at have Excel kørende på serveren.
Avatar billede stig3 Mester
25. september 2001 - 14:51 #17
2.1
Dette kunne ikke være en skabelon ?

Er det *.xlt de hedder ?
Avatar billede stig3 Mester
27. september 2001 - 20:35 #18
Har du fået gang i serveren ?
Avatar billede stig3 Mester
28. september 2001 - 12:43 #19
Avatar billede stig3 Mester
07. oktober 2001 - 10:36 #20
Endnu en gang............

Har du fået liv i serveren ??
Avatar billede mgade Nybegynder
10. oktober 2001 - 15:30 #21
Hey - der er sket mystiske ting.. Jeg har ikke set mails vedrørende dette spørgsmål!

Det med serveren er vel uaktuelt nu? Jeg mener hvis du alligevel skal gemme lokalt?? Eller??
Avatar billede stig3 Mester
10. oktober 2001 - 23:21 #22
Nej, jeg har faktisk bestemt mig for at bruge createobject, så det er meget aktuelt..............

hvis du har noget, der kan bruges er jeg meget taknemmelig.

(Jeg forhøjer lige til 200)
Avatar billede mgade Nybegynder
11. oktober 2001 - 08:38 #23
Hvad er dit problem lige nu?

(Den er da på 200?)
Avatar billede stig3 Mester
11. oktober 2001 - 09:06 #24
Det er at:

1. Excel SKAL være åben i forvejen for at det virker
2. Man får ikke mulighed for at redigere i arket før man bliver bedt om at gemme.

Jeg har lidt ladet det ligge et stykke tid, så det er stadig den ovenstående kode, som jeg er nået til.

(200 - ja, nu som eskild fra svendborg sagde - den var på 60 før)
Avatar billede mgade Nybegynder
11. oktober 2001 - 10:22 #25
Har du et link med en demo? Jeg har svært ved at fatte setuppet!

(OK - jeg går ikke en sk*d op i points, så det havde jeg ikke lige lagt mærke til)
Avatar billede stig3 Mester
11. oktober 2001 - 10:33 #26
Dette var mit udgangspunkt:
http://www.asp101.com/puzzles/puzzle8_s5.asp

Jeg har desværre ikke et netsted så jeg kan ikke rigtigt lægge det ud. Det den skal gøre er at:
1. Åbne et excelark <- Det kan den ikke. Excel skal nu være åbent først.
2. skrive nogle værdier i et par felter.
3. bruge værdierne i felterne til at lave en graf.
4. excel forbliver redigerbar så brugeren kan foretage sine ændringer <- Den beder om at gemme og lukker derefter.
5. brugerne kan gemme når han får lyst.
Avatar billede mgade Nybegynder
11. oktober 2001 - 10:54 #27
Den kode jeg har lavet et link til ovenfor (http://www.eksperten.dk/spm/32432) viser jo ikke *serverens* Excel i et browservindue hos *brugeren*! Det er nemlig umuligt.

Så det der med at \"skrive nogle værdier i et par felter\" og \"Excel forbliver redigerbar så brugeren kan foretage sine ændringer\" er umuligt.

Det vil du også opleve hvis du forsøger at lægge Excel på en webserver og kalde det med din ASP fil.

Se de andet link: http://www2.dfhpilot.dk/wwwopgaver/2512/info.asp?opgave=anna Det er excel der beregner \"bag kulisen\". Men det er jo ikke Excel du ser i din browser.
Avatar billede stig3 Mester
11. oktober 2001 - 16:18 #28
Hvad er teknikken bag det eksempel ?

Kan man lave excel-grafer med den metode ?

Avatar billede mgade Nybegynder
12. oktober 2001 - 08:39 #29
arbejdsgangen er noget i retning af:
- Et regne ark med default data ligger på serveren
- Brugeren requester en beregning ved kald af en asp side, der åbner Excel, trækker data ud af Excel og præsenterer dem i en form på brugerens browser (med reference til celleadresser) og lukker Excel og arket igen uændret.
- Brugeren redigerer data i formen og sender den til et aspscript der gemmer data i en accessdatabase (med reference til session.ID og celleadresser) og åbner Excel igen og sætter de samme data ind i de relevante celler, beregner arket og lukker Excel og arket igen - stadig uændret samt præsenterer beregingsresultatet på brugerens skærm - evt. i en form.

Vitsen er at det er flerbruger på den måde og det originale regneark altid er urørt på disken idet det aldrig gemmes.

Og ja du kan lave grafer på den måde. Det viser asp101 eksemplet. Her skal du bare få ecxel til at gemme grafikken som en GIF-fil som ASP-kan præsenterer bagefter.

Det er ikke let, men som du kan se virker det.
Avatar billede stig3 Mester
12. oktober 2001 - 09:10 #30
Graferne:
Hvis det er en gif..... er det så dynamiske informationer ?

Det skulle gerne være sådan at man får de nyeste ændringer fra databasen.
Avatar billede mgade Nybegynder
12. oktober 2001 - 09:43 #31
Yep, for Excel genberegner også grafen
Avatar billede stig3 Mester
12. oktober 2001 - 12:46 #32
Jeg har fundet noget, der ser ud til at virke. Her laver man et excel-ark i et temp-directory og redirecter til det. Det ser da smart ud syns mig.

<%
Response.Buffer = true
\'************************************************
\'All Credit must be given to:
\'
\'David L. Penton [mailto:lemans70@home.com]
\'
\'(Thanks Dave, again!)
\'************************************************



\'***********************************
\'EXCEL
\'***********************************
dim xls, I, J, tempName, tempPath, tempnum

On Error Resume Next

Set xls = CreateObject(\"Excel.Application\")

With xls
\' Make sure there is no minimized window created
.Application.Visible = False

\' Add a new workbook
.Workbooks.Add

\' Select some cells to put the DATETIME in it

.Range(\"A1:C1\").Select
.Selection.MergeCells = True
.Selection = Now

\' populate some cells
For I = 2 To 15
For J = 2 To 20
tempnum = 12
If J = 15 Then
.Cells(J, I).Value = Sqr(i*j) / (i^tempnum)
ElseIf J = 10 then
.Cells(J, I).Value = (i+j) * (i^tempnum)
Else
.Cells(J, I).Value = (i+j)^2
End If
Next
Next

.Charts.Add
.ActiveChart.ChartType = 67 \'xlLineMarkersStacked100 = 67
\' xlColumns = 2
.ActiveChart.SetSourceData .Sheets(\"Sheet1\").Range(\"B2:O20\"), 2
\' xlLocationAsNewSheet = 1
.ActiveChart.Location 1
With .ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = \"My Kewl Chart number #\" & CStr(tempnum)
.Axes(1, 1).HasTitle = True
.Axes(1, 1).AxisTitle.Characters.Text = \"X axis for you\"
.Axes(2, 1).HasTitle = True
.Axes(2, 1).AxisTitle.Characters.Text = \"Y axis for me\"
End With
With .ActiveChart.Axes(1)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
With .ActiveChart.Axes(2)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With

.ActiveChart.HasLegend = True
.ActiveChart.Legend.Select
\' xlBottom = -4107
.Selection.Position = -4107
\' xlDataLabelsShowNone = -4142
.ActiveChart.ApplyDataLabels -4142, False
.ActiveChart.HasDataTable = False

\' Make a path for the file to be saved

tempName = Hour(Now) & minute(now) & second(now) & \".xls\"
tempPath = \"c:\\inetpub\\wwwroot\\testing\\\" & tempName

\' Save the Workbook in my web drive

\'.Application.DisplayAlerts = False
\'.Sheets(\"Sheet2\").Select
\'.ActiveWindow.SelectedSheets.Delete
\'.Sheets(\"Sheet3\").Select
\'.ActiveWindow.SelectedSheets.Delete
\'.Sheets(\"Chart1\").Select

\'.Application.DisplayAlerts = True

.ActiveWorkbook.SaveAs tempPath

\'.ActiveWorkBook.PrintOut 1

.ActiveWorkbook.Close

\' VERY IMPORTANT HERE
\' Quit the Application
\' xls.Quit is NOT enough...is it only the reference to the Excel Object
\' you still have to terminate the Application

.Application.Quit
End With

\' VERY IMPORTANT HERE
\' Release the memory
set xls = Nothing

\'Response.Buffer = true
Response.Redirect \"http://localhost/testing/\" & tempName
\'Response.Write \"http://localhost/testing/\" & tempName

%>


Avatar billede stig3 Mester
12. oktober 2001 - 14:47 #33
Efter at have rodet lidt med det tror jeg at det er vejen frem. Den er noget simplere end det du foreslog og det gør at man kan redigere i outputtet og gemme det lokalt. Samtidig er det rent excel brugeren får i hovedet hvilket også er en fordel i mit tilfælde.

Mange tak for hjælpen - her kommer dine pts.
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