Gå til innhold

Alexen

Medlemmer
  • Innlegg

    258
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av Alexen

  1. Får man kvittering ved kjøp i dagligvarebutikker? MobilePay var en utmerket løsning der man fikk elektronisk tilgang til kvittering. Disse kunne hentes ned i pent json-format og puttes i en egen database, om man hadde lyst til å f.eks kunne se prisutvikling på produkter. Eller alternativt få en oversikt over forbruket av potetgull  :cry:

     

    Som vi vet ble de utkonkurrert av Vipps som sikkert kommer med den muligheten i 2030'ish.  :wallbash:

    • Liker 9
  2. Tipper det vil være mer elegant i powershell, men vbscript er jo alltid gøy :p

     

    Orker ikke lage scriptet ferdig, noe gøy må du jo ha å gjøre. men tenker no sånt som dette:

     

    ----------------------

     

    Dim Ip

    Ip = GetIp()

    ' Løkke her

    ' Sleep

    ' Sjekk om endret

    ' hvis ja, avslutt app ( http://www.computerp...rocess_stop.htm ) ?

    ' slutt løkke

     

    ' Takk til http://superuser.com...ws-command-line

    Function GetIP()

    Dim o

    Set o = CreateObject("MSXML2.XMLHTTP")

    o.open "GET", "http://ifconfig.me/ip", False

    o.send

    GetHtml = o.responseText

    End Function

     

    -----------

     

    Ipdelen ser ut til å funke bra. Post gjerne scriptet om du fullfører det :)

  3. Vet ikke om dette vil være til nytte for deg: deler stjålet fra (http://stackoverflow.com/questions/8224480/how-to-create-hotkey-in-word-vba-programatically), kombinert med opendocument blir det da no sånt som.

     

    ----

     

    Option Explicit

     

    Private Sub Document_Open()

    AddKeyBinding

     

    End Sub

     

    Sub AddKeyBinding()

    With Application

    ' \\ Do customization in THIS document

    .CustomizationContext = ThisDocument

     

    ' \\ Add keybinding to this document Shorcut: Alt+0

    .KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyAlt, wdKey0), _

    KeyCategory:=wdKeyCategoryCommand, _

    Command:="TestKeybinding"

    End With

    End Sub

     

    ' \\ Test sub for keybinding

    Sub TestKeybinding()

    MsgBox "We have a winner", vbInformation, "Succes"

    End Sub

     

    -----

    Testet det, og det så ut til å funke her (word 2013). Take it or leave it :p

  4. Virker som bøkene må være lagret, så får du det til så er det vel ikke noe hokus pokus

     

    Et annet alternativ kan jo være å styre Outlook fra Excel. Gå igjennom aktuelle mailer, lagre vedleggene for så å åpne og merge de. http://www.dicks-clicks.com/excel/olRetrieving.htm - her er litt kode for det.

     

    En tredje og kanskje bedre løsning er å styre Excel fra Outlook. På den måten kan du merge med en gang en mail kommer inn. Her er en link som kanskje kan hjelpe deg igang med det. http://stackoverflow.com/questions/11876549/how-to-copy-outlook-mail-message-into-excel-using-vba-or-macros

  5. Siden jeg aldri har prøvd vba i outlook tenkte jeg å gi det et forsøk. Kom frem til koden under, som kanskje være et utgangspunkt. Ser ihvertfall ut til å fungere her. Jeg hadde bare gmail å teste med og støtte på en bug som er beskrevet her: http://social.msdn.m...4-5cbfd565eebe/

     

    Fikk løst den ved å følge oppskriften der, men virker som det bare er et problem med gmail.

     

    Koden forutsetter at man får epost på formatet: <bydel> <avd> <kode> ok. Sånn som den er nå er den case-insensitiv, oSlo og Oslo er altså det samme.

     

     

    Public Sub ProcessIncomingMail(IncomingMail As Outlook.MailItem)
    Dim Subject As String
    Dim Avdeling As String
    Dim Bydel As String
    Dim Feilkode As String
    Dim nWords As Integer
    Dim BaseFolder As String
    
    Subject = IncomingMail.Subject
    Subject = UCase(Subject)	' Gjør om til store bokstaver
    Dim AllWords() As String
    AllWords = Split(Subject, " ")
    nWords = UBound(AllWords)
    
    If AllWords(nWords) <> "OK" Or nWords <> 3 Then Exit Sub	' Må ende med OK og bestå av 4 ord
    
    Bydel = AllWords(0)
    Avdeling = AllWords(1)
    Feilkode = AllWords(2)
    BaseFolder = "mingmailadresse\[Gmail]\"  ' Må sette inn adressen til epostmappa her
    
    Dim SrcFolder As MAPIFolder ' Mappen vi flytter gammel mail fra
    Dim DstFolder As MAPIFolder ' Mappen vi flytter til, hardkodet til "Ferdig"
    
    Set SrcFolder = GetFolder(BaseFolder & Bydel)
    Set DstFolder = GetFolder(BaseFolder & "Ferdig")
    
    If SrcFolder Is Nothing Or DstFolder Is Nothing Then Exit Sub   ' Finner ikke en av mappene
    
    Dim Mail As MailItem
    Set Mail = FindOldMail(SrcFolder, Avdeling, Feilkode)
    If Mail Is Nothing Then
    	Exit Sub
    Else
    	Mail.Move DstFolder
    	IncomingMail.Delete
    End If
    
    End Sub
    
    Function FindOldMail(Folder As Outlook.Folder, Avdeling As String, Feilkode As String) As MailItem
    Dim items As Outlook.items
    Set items = Folder.items
    For Each Mail In items
    Dim Subject As String
    Subject = UCase(Mail.Subject)
    Dim AllWords() As String
    AllWords = Split(Subject, " ")
    nWords = UBound(AllWords) ' nWords vil være antall ord - 1
    If nWords = 2 Then  ' må være 3 ord
    	If AllWords(1) = Avdeling And AllWords(2) = Feilkode Then
    		Set FindOldMail = Mail
    		Exit Function
    	End If
    End If
    Next
    End Function
    ' Kode stjålet fra: http://www.outlookcode.com/d/code/getfolder.htm
    Public Function GetFolder(strFolderPath As String) As MAPIFolder
     ' strFolderPath needs to be something like
     '   "Public Folders\All Public Folders\Company\Sales" or
     '   "Personal Folders\Inbox\My Folder"
     Dim objApp As Outlook.Application
     Dim objNS As Outlook.NameSpace
     Dim colFolders As Outlook.Folders
     Dim objFolder As Outlook.MAPIFolder
     Dim arrFolders() As String
     Dim I As Long
     On Error Resume Next
     strFolderPath = Replace(strFolderPath, "/", "\")
     arrFolders() = Split(strFolderPath, "\")
     Set objApp = Application
     Set objNS = objApp.GetNamespace("MAPI")
     Set objFolder = objNS.Folders.Item(arrFolders(0))
     If Not objFolder Is Nothing Then
    For I = 1 To UBound(arrFolders)
      Set colFolders = objFolder.Folders
      Set objFolder = Nothing
      Set objFolder = colFolders.Item(arrFolders(I))
      If objFolder Is Nothing Then
    	Exit For
      End If
    Next
     End If
     Set GetFolder = objFolder
     Set colFolders = Nothing
     Set objNS = Nothing
     Set objApp = Nothing
    End Function
    

  6. Bare for å klarere. Du kan vel rote rundt i mailer med vbscript, men jeg ser for meg at det beste er å bruke vba som er det innebygde scriptverktøyet i outlook. En fremgangsmåte er vel å lage en regel på innkommende post som inneholder "OK", denne starter en scriptrutine. Denne kan se noe sånn ut:

     

     

    Public Sub ProcessIncomingMail(Item As Outlook.MailItem)
     MsgBox "hello mail"
    End Sub
    

     

     

    For å få laget denne kodesnutten trykker du Alt+F11 for å åpne vba-editoren. Deretter kan du ved hjelp av "rule wizard" (sorry, har engelsk office) koble scriptet til inkommende mail med "OK" i emne.

     

    Nå vil det poppe opp en dialogboks hver gang du får mail med OK i emne. Morsomt men ikke nyttig. Ser for meg en fremgangsmåte som er noe som:

     

    * Hent bydel fra mailemne

    - Er bydel alltid et ord? isåfall er det bare å hente ut det som er til venstre for " ".

    * Sjekk om mappen bydel finnes og let igjennom etter mail som matcher

    - Hvis Mail funnet:

    - Flytt til Ferdig mappe

    - Slett inkommende mail

    - Hvis ikke funnet:

    - Burde dette kunne skje? Bør en alarm gå? Skal noen sparkes?

     

    Edit: Innrykk fungerte dårlig på den lista der, mine forumskills er svaake.

     

    Her er en link med litt vba-info:

     

    http://msdn.microsof...e/ee814736.aspx

  7. Hei!

     

    Her er et forslag som kanskje kan fungere:

     

    - Begynn med å hente unike navn og tilhørende kategorier fra den øverste tabellen. For å lagre dette kan du jo kanskje bruke en array av en Type som f.eks

     

    Type Person

    Navn as String

    Kategorier(9) as Integer

    End Type

     

    Dim Personer(9) as Person

     

    for å sørge for at det blir unikt må du for hver celle du leser inn sjekke om det navnet allerede finnes i Personer arrayen, hvis det ikke gjør det oppretter du e ny og hvis det gjør det så legger du til den kategorien du nå står i.

     

    - Deretter går du igjennom den nederste tabellen og henter verdiene til de ulike kategoriene, disse kan du f.eks lagre i en 2d-array, kategoridata(katnr, verdinr) ellerno.

     

    - Nå kan du gå igjennom alle personene i Personer, gå igjennom alle deres kategorier og hente verdiene fra den 2d-arrayen og skrive ut disse.

     

     

    Ble muligens noe rotete forklart sånn midt på natta, men håper det kan gi litt ideer ihvertfall :)

  8. Det er nettopp det som gjør det gøy og utfordrende, det er mange måter å gjøre tingene på :) bare en siste ting før jeg gir meg. Jeg vet ikke helt hva dette skal brukes til, men det høres ut som en slags callcenterapplikasjon. Isåfall er det er kanskje greit å kunne grave frem historikk på ting som har skjedd i etterkant, hvilken selger gjorde hva og med hvilket resultat. Jeg ville nok muligens hatt en egen tabell for kundehenvendelser med knytning til selger og kunde. Hvis denne inneholder et tidspunkt og en resultatkode er det ganske greit å holde styr på låste kunder. Det er rader uten resultat. Slenger du på et resultattidspunkt kan du måle hvor lang tid ulike selgere bruker på henvendelser.

     

    Poenget mitt er ihvertfall at historikk kan være greit og ved å samle mye i en kundetabell hvor ting overskrives mister du denne muligheten. Lykke til :)

  9. Tilfeldig utvalg kan du vel gjøre på dbsiden med Rand() eller på klienten med php. Nå er ikke php det jeg bruker ofte, men array_rand ser ut til å kunne gjøre det du vil. Godt mulig du må inn med flere felt i db ja, men jeg ser ikke åssen du skal kunne si at noe skal låses opp etter en viss tid uten å lagre tiden i db. Det er vel ganske vanlig å lagre salg(ordrer) i egen tabell med en ordrelinjetabell som kobler kunde og ordre sammen. Da er det naturlig å legge tidspunktet for salget i ordretabellen, denne kan senere brukes for å finne ut om det er på tide å "mase" igjen. Da kan du bruke det visning-feltet for å si om en kunde er "låst" av en selger nå. En problemstilling der er vel hva som skjer dersom en selger får en kunde og deretter slår av pc'en. På et eller annet tidspunkt må vel denne låsen låses opp igjen da? Jeg ville nok vurdert å bruke et tidspunkt på denne også.

  10. Hva med å gjøre om feltet 'VISNING' til en datetime/timestamp som ikke bare forteller at raden er vist, men også når den ble vist? da kan du gjør no sånn som: Select Blah From Kunde Where visning + timer > Now()? Mysql har en rekke datofunksjoner som kan brukes. DATE_ADD f.eks. ( http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html ) deretter kan du plukke tilfeldig fra dette utvalget.

  11. Hei!

     

    Fint hvis du gir litt info om hvilken error det er, men jeg kan tenke meg at det kanskje er "TypeError: unsupported operand type(s) for -: 'str' and 'str'" ? isåfall kan du konvertere row[x] til et heltall (int) ved å bruke int(row[x])..

     

    import csv

    with open('test.txt', 'rb') as fd:

    reader=csv.reader(fd,delimiter='\t')

    for row in reader:

    print int(row[1]) - int(row[3])

  12. Siden jeg aldri har brukt Openoffice base måtte jeg teste det. Rotet sammen et lite utkast til noe som muligens kan fungere.

     

    https://www.diskusjon.no/uploads/monthly_08_2011/post-44561-0-02989700-1312311834_thumb.png

     

    Bladtype er tenkt å være: blad, pocket, samlebok etc. For at en historie skal kunne finnes i flere blad brukes en mellomtabell historie_i_blad.

     

    Men det her er jo bare datastrukturen hvor data lagres. Du snakker en del om grensesnittet og hva som skal skje når noe velges i ulike lister. I Openoffice Base lager du grensesnitt i såkalte Forms. Mener å huske at det heter det samme i delphi?

    post-44561-0-02989700-1312311834_thumb.png

  13. "Her ser jeg ikke helt hvordan jeg skal få det til uten å bruke 3 forskjellige tabeller."

     

    Hvorfor vil du ikke bruke 3+ tabeller? Det er ikke noe mål i databasedesign å bruke minst mulig tabeller, snarere tvert om. Nå har ikke jeg brukt openoffice base no særlig men kan ikke tenke meg at det er noe veldig dårligere enn ms Access, og da burde det fint la seg gjøre å lage en database for dette formålet med den.

     

    Delphi har jeg ikke rørt på minst 12 år så der har jeg lite kunnskap. Et alternativ vil jo være sql-databaser som postgresql/mysqc etc men de er kanskje litt "heavy" for en såpass enkel database. Et annet alternativ vil være å bruke f.eks sqlite som gjør at du ikke trenger å installere en egen databasemotor. Et kjapt googlesøk ga meg linken: http://www.yunqa.de/delphi/doku.php/products/sqlite3/index for delphi.

×
×
  • Opprett ny...