Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Excel-ohjelmointi

Sivun loppuun

Höpis [03.04.2007 14:27:05]

#

Osaisiko kukaan neuvoa tai kertoa voiko excelillä tehdäö sellaisen ohjelman joka aloittaa aina uudella juoksevalla numerolla, siihen voi kirjoittaa tietoja ja ohjelma tallentaa ne omaan tiedostoon.

Koulussa joskus tehtiin sellainen ostoskorin tapainen, mutta muistaakseni se ei tallentanu sitä...

siis VB ohjelmoinnista onpi kyse...

Mobel [03.04.2007 16:41:48]

#

Excelhän tukee kahdenlaista "koodia". Ensinnäkin sitä mitä varmaankin koulussa kirjoittelitte, eli kaavoja soluihin ja sitten makroja.

En aivan saanut kiinni mitä tarkoitit juoksevilla luvuilla, mutta yritämpä arvata.
Haluatko tulosteesta tämän näköisen:

1    Tietoa tähän
2    Jotain muuta tähän
3    Uutta tietoa tänne
4    Jne.

Selityksestäni tuskin paljoa sait irti, mutta onneksi google auttaa. Ainakin seuraava linkki näytti kiinnostavalta:
http://www.angelfire.com/biz7/julian_s/julian/julians_macros.htm

Lisää varmasti löytyy hakusanoilla: excel macro tj.


Ja makrojahan voi myös nauhoittaa. Excelistä taitaa löytyä jonkin valikon alta punainen pallura, missä lukee "Nauhoita makro". Näin, mikäli oikein muistan. Ja makrojen nauhoittaminenhan toimii niin, että teet nauhoittamisen aloittamisen jälkeen "käsin" sen, mitä haluat makron tekevän. Eli jos haluat tallentaa tiedoston aloitat makron ja painat tallenna-namiskaa ja lopetat makron nauhoittamisen.

Höpis [04.04.2007 09:39:03]

#

Hain lähinnä semmosta, että voiko excelillä koodata vaikka tilauslomakkeen, joka alkaa nro 1 ja kun se on täytetty ja tallennettu niin tulee uusi sivu nro 2!

Jotain tuontapaista ajattelin omaksi iloksi kokeilla=)

neau33 [04.04.2007 13:24:19]

#

Heippa Höpis!

kehittele tästä eteenpäin...

Private Sub Workbook_Open()

' Mikäli sattuisi virhe niin jatketaan seuraavasta...
 On Error Resume Next 'Tai Goto Ohjelmointiputka

'Tutkitaan työkirjan jokaisen taulun nimi
For Each w In Sheets
 With w

  'ja jos nimi on eri kuin "Nro " + trimmattu merkkijonoksi
  'muutettu taulun indeksi niin...
  If Not .Name = "Nro " & Trim(Str(.Index)) Then

   '...nimetään taulu uudelleen em. systeemin mukaan
   .Name = "Nro " & Trim(Str(.Index))

  End If

 End With

Next

End Sub


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

' Tutkitaan ehtolauseella aktiivisen taulun solun E5 arvoa
' ja jos solu ei ole tyhjä niin...
 If Not IsEmpty(ActiveSheet.Cells(5, 5)) Then 'esim. (5, 5)

' Tyhjennetään aktiivisen taulun solu A6
Set ActiveSheet.Cells(6, 1).Value = Empty

'´Tutkitaan jokaisen, alueen A1:E5, solun arvo
For Each c In Range("A1:E5")

 With c

 ' Jos jokin alueen A1:E5 soluista on tyhjä niin...
  If IsEmpty(.value) Then

   '...annetaan ilmoitus ja poistutaan aliohjelmasta.
   ActiveSheet.Cells(6, 1).Value = "Täytä kaikki vaaditut kentät": Exit Sub

  End IF

 End With

Next

 ' Verrataan aktiivisen taulun indeksin arvoa työkirjan
 ' taulujen määrään
  Select Case ActiveSheet.Index

   ' Tapauksessa että aktiivisen taulun indeksi on
   ' pienempi, kuin työkirjan taulujen määrä...
   Case Is < Sheets.Count

    ' ...asetetaan seuraavana indeksissä ylöspäin oleva
    ' taulu aktiiviseksi eli siirrytään seuraavaan tauluun.
    Sheets(ActiveSheet.Index + 1).Activate

    ' Muussa tapauksessa...
    Case Else

    '...lisätään työkirjaan uusi taulu...
     Set NewSheet = Sheets.Add(Type:=xlWorksheet)

      '...asetetaan uusi taulu aktiiviseksi...
      Sheets(NewSheet.Name).Activate

      '...ja annetaan uudelle työkirjalle nimi
      'HUOMAA 'Index + 1'
      ActiveSheet.Name = "Nro " & Trim(Str(ActiveSheet.Index + 1))
   End Select

 End If

End Sub

neau33 [04.04.2007 16:48:31]

#

Sorry!

Unohtui toi vaihtoehtoinen virheenkäsittely kokonaan...

Private Sub CommandButton1_Click()

 On Error GoTo Ohjelmointiputka
  O = 0 / 0
 Exit Sub

Ohjelmointiputka:
 Err.Clear
 Shell "C:\Program Files\Internet Explorer\iexplore " & _
 "https://www.ohjelmointiputka.net/keskustelu/alue.php?tunnus=5", vbMaximizedFocus

End Sub

Grez [04.04.2007 23:35:37]

#

Tilausten tallentaminen excel-tiedostoiksi ei lähtökohtaisesti kuulosta miltään loistavalta idealta. Tai no, jos niitä tulee kaikkiaan muutaman käden sormilla laskettava määrä, niin on varmaan ihan sama. Mutta jos puhutaan tuhansista tilauksista niin => tietokanta.

Höpis [05.04.2007 09:43:12]

#

Kiitoksia Nea=)..pitää kokeilla pääsiäisen jälkeen...

Ajattelin kokeillakin vain ihan omaksi huvikseni. Tietokantahan siihen hommaan paras olisi ja accessilla olen myös meinannut kokeilla tuota samaa systeemiä..pitää vain palauttaa access mieleen=)

neau33 [05.04.2007 21:54:28]

#

Moikka taas!

Tohon Grez'n kommenttiin sen verran, että toki valmiin tietokantamoottorin avulla on kätevintä varastoida & käsitellä dataa. Mutta väitän Excelin, höystettynä VBA'lla ja mielikuvituksella, taipuvan svääreihin, joista aika moni tietokanta-guru vielä unelmoi...

Blaze [05.04.2007 22:12:23]

#

neau33 kirjoitti:

Mutta väitän Excelin, höystettynä VBA'lla ja mielikuvituksella, taipuvan svääreihin, joista aika moni tietokanta-guru vielä unelmoi...

Joo, kyllähän sillä vatupassilla VOI naulata, eriasia sitten, kuinka järkevää se on.

Grez [07.04.2007 09:36:49]

#

neau33 kirjoitti:

Mutta väitän Excelin, höystettynä VBA'lla ja mielikuvituksella, taipuvan svääreihin, joista aika moni tietokanta-guru vielä unelmoi...

Tuskin yhdenkään tietokantagurun tarvitsee unelmoida niistä, koska tietokantagurukin toki osaa yhdistää Excelin projektissa sellaiseen osaan johon se sopii.

Joka tapauksessa jos oikein käsitin tuon mitä oltiin tekemässä, niin siinä vaiheessa kun on 10000 tilausta, on levyllä 10000 Excel-tiedostoa, joka ei ole tiedon hallinnan ja analysoinnin kannalta mikään kovin mukava tilanne.

neau33 [07.04.2007 13:30:51]

#

Heippa taas!

Nyt kannattaisi käyttää sitä mielikuvitusta...

...ensinnäkin niitä tilauksia on mahdollista säilyttää tauluissa,
samassa taulussa voi range-ominaisuutta hyödyntämällä olla vähän
enempi, kuin yksi tilaus. Visible ominaisuuden avulla voidaan
kätkeä tauluja, taulun osia jne. Eli siis, kulloinkin tarvittava
tieto saadaan näkyviin ja data, jota ei kästtelyhetkellä tarvita
näkyvissä voidaan pitää piilossa. "Vanhentunut" data voidaan siir-
tää automaattisesti erilliseen tiedostoon/tiedostoihin esim. jon-
kin periodin päättyessä (vaikkapa kuukausittain) tai haluttaessa
se voidaan kokonaa tuhota.
Eli siis rakentamalla Excelin sisään oma 'pikku' database engine'
voidaan saada vaikkapa vain iloa ja ohjelmointi harjoitusta.
Hieman enemällä mielikuvituksella ja kokemuksella voidaankin jo
saada aikaan todella käyttökeploinen ja hyödyllinen datan varas-
tointiin ja käsittelyyn soveltuva .xla laajennus.
...toisekseen valmiita ohjelmia voidaan ostaa, impata ilmaiseksi
tai vaikkapa varastaa, mutta mitä tekemistä sillä on ohjemointi-
harrastuksen ja ohjelmointitaitojen kehittämisen kanssa.
...kolmanneksi, voisi kannattaa esim. testata .csv muodossa
(mekijonona) tallenetun Excel datan tilan käyttöä (pakattavissa)
ja verrata sitä ihan minkä tahansa tietokantasysteemin vastaavaan.
...lopulta, HYVÄÄ KEVÄTTÄ IHAN KAIKILLE...

-Nea-

Grez [07.04.2007 15:09:03]

#

neau33 kirjoitti:

Eli siis rakentamalla Excelin sisään oma 'pikku' database engine' voidaan saada vaikkapa vain iloa ja ohjelmointi harjoitusta.

Tokihan kaikki on mahdollista. Sinne omaan pikku "tietokantaengineen" kun vielä rakennetaan indeksoinnit, eheystarkistukset, transaktiot ja rajapinnat niin, että sitä voi käyttää yhtä aikaa usealta koneelta, niin tuossahan alkaakin jo olla lähes yhtä toimiva ratkaisu kuin valmiin tietokantamoottorin käyttäminen. Ja se on saavutettu vain kohtuullisen hillittömällä määrällä turhaa työtä pyörää uudelleen keksittäessä.

neau33 kirjoitti:

Hieman enemällä mielikuvituksella ja kokemuksella voidaankin jo saada aikaan todella käyttökeploinen ja hyödyllinen datan varastointiin ja käsittelyyn soveltuva .xla laajennus.

Ja sitten kun sitä kokemusta saadaan vielä enemmän lisää, niin huomataan, että se olisi sittenkin kannattanut tehdä käyttämällä valmista tietokantamoottoria.

neau33 kirjoitti:

...toisekseen valmiita ohjelmia voidaan ostaa, impata ilmaiseksi tai vaikkapa varastaa, mutta mitä tekemistä sillä on ohjemointiharrastuksen ja ohjelmointitaitojen kehittämisen kanssa.

No lähinnä sillä on sen verran tekemistä, että yleensä harrastus on sitä mukavampaa mitä paremmat välineet on käytössä. Eli jos harrastaa vaikka talojen rakentamista, niin kyllähän se onnistuu pelkällä ruuvimeisselilläkin - mutta jos käytössä on kunnon välineet niin se on paljon mukavampaa.

Eli ohjelmointiharrastuksessa pätee sama periaate: Kannattaa käyttää hommaan soveltuvia välineitä. Jos haluat rakentaa oman tietokantaenginen niin kaikin mokomin, en silti tekisi sitäkään Excelillä.

Tietty, pidemmäksi ajaksi harrastettavaa saa sillä pelkällä ruuvimeisselillä. Eli jos homman ideana on vaan kehittää mahdollisimman paljon puuhasteltavaa niin mikäs siinä. Itse en vaan ole koskaan ymmärtänyt masokismia nimeltä parhaiden käytäntöjen tahallinen välttely. Esimerkiksi tekstiä koneella kirjoittaessa on paras käytäntö olla itse lisäämättä rivivaihtoja, mutta silti jotkut lisäilevät niitä itse. Ja sitten kun tekstiä pitää muokata, ne rivivaihdot joudutaan kuitenkin tekemään uusiksi.

Tarkoitus ei ole olla negatiivinen, vaan yritän vaan antaa hyvää vinkkiä jonka olen itse todennut vuosien kokemuksella. Tokihan saat sen tehdä miten haluat.

neau33 [07.04.2007 15:32:53]

#

Heippa taas!

Eli siis parhaan käytännön mukaan...kumpi olisi käytännöllisempää lähtiessä pururadalle juoksemaan, mennäkö sinne uudella kiiltävällä Mercedeksellä vaiko vieläkin uudemmalla Jeepillä..?

Grez [07.04.2007 15:46:17]

#

Tuskinpa tuohon hommaan on olemassa parasta käytäntöä. Jos olet todennut että merusulla tai jeepillä meno on parempi vaihtoehto kuin vaikka ihan kävelemällä tai hölkäten meno (jolloin saisit samalla myös hyötyliikuntaa), etkä osaa päättää kummalla menet, niin mene vaikka joka toinen päivä mersulla ja joka toinen päivä jeepillä.

tkarkkainen [08.04.2007 11:35:09]

#

neau33 kirjoitti:

Nyt kannattaisi käyttää sitä mielikuvitusta...

Mielikuvitus ei muuta tosimaailmaa mihinkään. Se ei tee Excelistä mitenkään tarkoitukseen nimenomaan suunniteltuja tietokantasysteemejä parempaa.

neau33 kirjoitti:

...toisekseen valmiita ohjelmia voidaan ostaa, impata ilmaiseksi tai vaikkapa varastaa, mutta mitä tekemistä sillä on ohjemointiharrastuksen ja ohjelmointitaitojen kehittämisen kanssa.

Silläkään ei ole mitään tekemistä ohjelmointitaitojen kehittämisen kanssa, että tehdään hommat väärillä työkaluilla. Alusta alkaen olisi syytä opetella tekemään hommat oikein.

Grez [08.04.2007 12:18:52]

#

Huhheijaa. Onko joku sanonut että sen tietokannan pitäisi olla MySQL?

Noh, laitetaan tähän nyt sitten perusteita miksi tiedon säilyttäminen tietokannassa on järkevämpää kuin Excel-tiedostossa:

1) Locking level. Tietokannoissa ei yleensä koskaan tarvitse lukita koko tietokantaa, huonoimmassa tapauksessa muokkauksen ajaksi lukitaan taulu, yleensä vain osa taulusta ja usein jopa pelkästään muokattava rivi/rivit. Excelin tapauksessa taas kun joku muokkaa tietoja, eivät muut voi muokata mitään tietoja samaan aikaan. Yleensä vieläpä niin, että jotta homma toimisi, saa taulukko olla muokattavana vain yhdellä käyttäjällä kerrallaan. Eli tilanne on huomattavasti huonompi kuin oikeassa tietokannassa, kun koko roska voi olla lukittuna tunteja kun oikeassa tietokannassa pahimmillaankin yksi taulu on lukittuna muutamia sekunnin osia.

2) Tehokkuus muutoksissa. Jos muutetaan yhtä tietoa niin Excelissä joudutaan lataamaan koko "tietokanta" muistiin, tekemään muutos ja tallentamaan kaikki uudestaan levylle. Oikean tietokannan tapauksessa ainoastaan muuttuneet tiedot kirjoitetaan levylle uudestaan.

3) Indeksoinnit, eheystarkistukset (kuten viiteavaimet) jne. ovat kaikissa uskottavissa tietokantatoteutuksissa mutta eivät Excelissä.

Näitä kohtia voisi listata lisääkin, mutta tuossa nyt on joitakin melko merkittäviä seikkoja jotka tulevat saman tien mieleen.

neau33 [09.04.2007 18:17:33]

#

Well, I almost cut my hair...

Mutta,... kuten eräs 'pikku' businessman antoi takavuosina Chigaco'ssa ymmärtää... We'll be back, so soon...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta