Nyt olis tarvetta lukea tietoa MS excel taulukosta puhelimella.
Ja J2ME koska ei olis niin alusta riippuvainen.
Oon pari iltaa käyttäny googlaukseen ja ei oikein apuja tunnu löytyvän.
Onkohan kellään aavistusta onko mahdollista?(Pitäishän sen kyllä olla :S)
Kitoos.
Moikka MJS!
ehdotan, että rakentelet virityksen .csv -pohjalta elikä tallentelet excel-taulua .csv-muodossa jolloin riittää että splittaat vastanaanotetun datan
String[] rows = split(data, "\n"); for(int row = 0; row < rows.length; row++) { String[] cols = split(rows[row], ";"); for(int col = 0; col < cols.length; col++) { //simppeli tulostus System.out.println("rivi" + row + " sarake" + col + " :" + cols[j]); } }
excelin voit säädellä päivittämään/tallentamaan/lähettämään .csv-tiedoston dataa VBA:n avulla...
'simppeli tallennus esimerkki Sub SaveAsCVS(ByVal sheetName As String) Dim solu, dataStr As String For Each solu In Sheets(sheetName).UsedRange.Cells dataStr = dataStr & solu If solu.Column < Sheets(sheetName). _ UsedRange.Columns.Count Then dataStr = dataStr + ";" End If If solu.Column = Sheets(sheetName). _ UsedRange.Columns.Count _ And solu.Row < Sheets(sheetName). _ UsedRange.Rows.Count Then dataStr = dataStr & vbCrLf End If Next If Replace(Replace(dataStr, _ ";", ""), vbCrLf, "") <> "" Then Dim fullPath As String fullPath = Environ("userprofile") _ & "\Työpöytä\xldata.csv" Open fullPath For Output As #1 Print #1, dataStr: Close #1 End If End Sub
Moikka taas MJS!
yksinkertaisempaa on kuitenkin tallennella excel-taulua HTML-muodossa ja pukata sivu suoraan ftp-palvelimelle, jolloin sivu on kätevästi luettavissa ilman alusta-riippuvuuksia/J2ME-pelleilyjä...
Private Declare Function ShellExecute Lib _ "Shell32.dll" Alias "ShellExecuteA" (ByVal _ hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As _ String, ByVal lpDirectory As String, ByVal _ nshowcmd As Long) As Long 'jos excel-taulua päivitetään automaattisesti 'esim. ulkoisen datan tuonnin yhteydessä niin 'voit käyttää SetLinkOnData metodia kutsumaan 'Fire-aliohjelmaa... 'ActiveWorkbook.SetLinkOnData(Name, "Fire") Sub Fire() SaveAsHTML "Taul1" FtpTrnasfer End Sub Sub SaveAsHTML(ByVal sheetName As String) Dim localPath As String localPath = "c:\xldata.html" On Error Resume Next Kill localPath If Err <> 0 Then Err.Clear On Error GoTo 0 End If Dim solu, htmlStr As String htmlStr = _ "<html><head></head><body><form><p align=" + _ Chr(34) + "left" + Chr(34) + _ "><b>xldata.html</b></p><table border=" + _ Chr(34) + "1" + Chr(34) + " cellspacing=" + _ Chr(34) + "1" + Chr(34) + " bordercolor=" + _ Chr(34) + "#000000" + Chr(34) + ">" For Each solu In Sheets(sheetName).UsedRange.Cells If solu.Column = 1 Then htmlStr = htmlStr & "<tr>" End If htmlStr = htmlStr & "<td>" & solu & "</td>" If solu.Column = Sheets(sheetName). _ UsedRange.Columns.Count Then htmlStr = htmlStr & "</tr>" End If Next htmlStr = htmlStr & "</table></form></body>" Open localPath For Output As #1 Print #1, htmlStr: Close #1 Do While Dir(localPath) = "": Loop End Sub Sub FtpTransfer() Dim batchPath As String batchPath = "C:\ftpKomento.dat" On Error Resume Next Kill batchPath If Err <> 0 Then Err.Clear On Error GoTo 0 End If Open batchPath For Output As #1 Print #1, "Open" Print #1, "ftp-palvelin" Print #1, "käyttäjätunnus" Print #1, "salasana" Print #1, "put " & localPath & " xldata.html" & vbCrLf Print #1, "Quit": Close #1 Do While Dir(batchPath) = "": Loop z& = ShellExecute(Application.hwnd, vbNullString, _ "ftp.exe", "-s:" + batchPath, "C:\", 2) End Sub
Moikka taas MJS!
tässä vielä viritys jolla voit hakea datan www.palvelimelta, parsia takaisin .csv muotoon ja samalla avata tiedoston excel-tauluun
VBA-Projektiin referenssi:
Microsoft WinHTTP Services, Version 5.1
(C:\WINDOWS\System32\winhttp.dll)
'Class1 VBA-luokkamoduuli Public Function GetData() As String Dim strURL As String strURL = "http://www.neosofta.zxq.net/xldata.html" Dim xhttp As WinHttp.WinHttpRequest Set xhttp = New WinHttp.WinHttpRequest On Error Resume Next xhttp.Open "GET", strURL, False xhttp.SetRequestHeader "USER_AGENT", _ "Mozilla/5.0 (Windows; U; Windows NT 5.1; " & _ "fi; rv:1.9.0.13) Gecko/2009073022 " & _ "Firefox/3.0.13 (.NET CLR 3.5.30729)" xhttp.Send xhttp.GetAllResponseHeaders Dim strResponse As String strResponse = xhttp.ResponseText Set xhttp = Nothing strResponse = Replace(strResponse, vbCrLf, "") Dim data_beg As Long Dim data_end As Long Dim data_len As Long If InStr(strResponse, "<tr>") > 0 Then data_beg = InStr(strResponse, "<tr>") + 4 End If If InStr(strResponse, "</tr></table>") > data_beg Then data_end = InStr(strResponse, "</td></tr></table>") End If data_len = data_end - data_beg If Err <> 0 Then GoTo Handler Else strResponse = Mid(strResponse, data_beg, data_len) strResponse = Replace(strResponse, "</td></tr>", vbCrLf) strResponse = Replace(strResponse, "</td>", ";") strResponse = Replace(strResponse, "<td>", "") strResponse = Replace(strResponse, "<tr>", "") GetData = strResponse Exit Function End If Handler: Err.Clear On Error GoTo 0 GetData = _ "An error has occured...unknown reason" End Function
'Taul1 VBA-moduuli
Private Sub CommandButton1_Click() Dim cl1 As New Class1 Dim filePath As String filePath = Environ("userprofile") _ & "\Työpöytä\HtmlToCsv.csv" On Error Resume Next Kill batchPath If Err <> 0 Then Err.Clear On Error GoTo 0 End If Open filePath For Output As #1 Print #1, cl1.GetData: Close #1 Do While Dir(filePath) = "": Loop doFileQuery filePath, "Taul2" End Sub Function doFileQuery(filePath As String, _ outSheet As String) As Boolean Sheets(outSheet).Cells.Clear Dim connectionName As String connectionName = "TEXT;" + filePath With Worksheets(outSheet).QueryTables.Add( _ Connection:=connectionName, Destination:= _ Worksheets(outSheet).Range("A1")) .Name = filePath .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlOverwriteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = _ xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = True .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .Refresh BackgroundQuery:=False End With End Function
Pointti, joka ehkä ei tullut neau33:n innokkaista koodailuista vielä ilmi, on se, että Excelin omat tiedostot ovat melko mutkikasta binaaridataa eikä niiden lukeminen omalla koodilla ole käytännöllistä (tai edes nykytaidoilla realistista, jos aiheesta joutuu foorumilla kysymään). Voi olla, että joku on Javallekin tehnyt kirjaston, joka saa niistä edes jotain tolkkua, mutta usein tällaiset kirjastot ovat isoja, maksullisia, hankalia tai pahasti puutteellisia.
HEIPPA TAAS!
Jos jotakuta sattuisi aihe vielä kiinnostamaan niin täältä voi impata Excel/VBA-projektin, josta selviää miten rakennella data-layer, jonka avulla voi palautella Cell.Formula/Cell.HorisontalAlignment -jutskat www.palvelimelta
Aihe on jo aika vanha, joten et voi enää vastata siihen.